自学笔记之TVM编译器框架 ,核心特性,模型优化概述,AI应用落地

最近在学习一些和芯片 AI相关的知识,重点了解了一下TVM,我自己认为TVM在AI应用落地类似的项目中,用途还是非常广泛的,现在把一些重要的笔记贴在下面,有两篇原帖链接也附上,感兴趣的同学可以学习一下。

TVM

1.什么是TVM?

TVM(Tensor Virtual Machine)是一个开源的机器学习编译器框架,由华盛顿大学陈天奇博士主导开发。它旨在为各种硬件后端提供统一的编程模型,使得开发者能够便捷地将深度学习模型编译成不同硬件平台可执行的代码。TVM 支持多种深度学习框架(如 TensorFlow、PyTorch、ONNX 等)的模型导入,并提供了一系列工具来优化和部署模型。

总的来说,TVM 是一个功能强大、灵活且高效的机器学习编译器框架,它通过提供一系列的工具和优化策略,帮助开发者在不同的硬件平台上高效地部署深度学习模型。

2.TVM 的核心特性包括:

多语言支持:TVM 支持多种硬件描述语言,如 CUDA、OpenCL、Metal 等,以及传统的编程语言如 C++。

自动优化:TVM 提供了自动调优工具(如 AutoTVM 和 AutoScheduler),这些工具可以通过搜索最优的计算配置来加速模型的执行。

中间表示(IR):TVM 使用 Relay 作为高级 IR,用于表示和优化计算图。此外,TVM 还引入了 Tensor IR(TIR)作为低级的 IR,用于描述张量级别的计算。

图优化:TVM 提供了图优化工具,可以对计算图进行优化,包括算子融合、内存规划等。

代码生成:TVM 可以将优化后的计算图生成特定硬件平台的机器码。

运行时支持:TVM 提供了轻量级的运行时系统,支持在多种设备上部署和执行编译后的模型。

硬件抽象:TVM 通过 Device API 抽象了硬件操作,使得开发者可以不必关心底层硬件细节。

模块化设计:TVM 的设计允许开发者根据需要选择使用其不同的组件,如编译器、运行时系统、图优化工具等。

3.TVM架构

TVM 的架构包括前端、中端(图优化 Pass 机制)、后端(代码生成)、运行时等部分。它通过定义和演示关键概念,引导用户了解 TVM 的所有主要功能。用户可以通过 TVM 的 Python 接口来编译和优化模型,也可以使用命令行界面进行操作。TVM 还支持交叉编译和远程过程调用(RPC),以及使用 GPU 编译深度学习模型。

在这个网站中 https://tvm.hyper.ai/docs/tutorial/intro/ 介绍了Apache TVM的详细原理和架构以及开源代码,感兴趣的可以过去看看,这里摘要一些重点信息来展示给大家:

TVM 和模型优化概述

下图说明了使用 TVM 优化编译器框架转换时所采取的步骤。
在这里插入图片描述
步骤一:从 TensorFlow、PyTorch 或 ONNX 等框架导入模型。在导入阶段中,TVM 可以从其他框架(如 TensorFlow、PyTorch 或 ONNX)中提取模型。 TVM 为前端提供的支持水平会随着我们不断改进这个开源项目而变化。如果在将模型导入 TVM 时遇到问题,可以将其转换为 ONNX。

步骤二:翻译成 TVM 的高级模型语言 Relay。已导入 TVM 的模型在 Relay 中表示。Relay 是神经网络的功能语言和中间表示(IR)。它支持:

1.传统的数据流式表示
2.函数式作用域,let-binding 使其成为一种功能齐全的可微语言
3.允许用户混用两种编程风格的能力
4.Relay 应用图级优化 pass 来优化模型。

步骤三:降级为张量表达式(TE)表示。降级是指将较高级的表示转换为较低级的表示。应用了高级优化之后,Relay 通过运行 FuseOps pass,把模型划分为许多小的子图,并将子图降级为 TE 表示。

张量表达式(TE)是一种用于描述张量计算的领域特定语言。 TE 还提供了几个 schedule 原语来指定底层循环优化,例如循环切分、矢量化、并行化、循环展开和融合。为将 Relay 表示转换为 TE 表示,TVM 包含了一个张量算子清单(TOPI),其中包含常用张量算子的预定义模板(例如,conv2d、transpose)。

步骤四:使用 auto-tuning 模块 AutoTVM 或 AutoScheduler 搜索最佳 schedule。schedule 为 TE 中定义的算子或子图指定底层循环优化。auto-tuning 模块搜索最佳 schedule,并将其与 cost model 和设备上的测量值进行比较。 TVM 中有两个 auto-tuning 模块。

1.AutoTVM:基于模板的 auto-tuning 模块。它运行搜索算法以在用户定义的模板中找到可调 knob 的最佳值。 TOPI 中已经提供了常用算子的模板。
2.AutoScheduler(又名 Ansor):无模板的 auto-tuning 模块。它不需要预定义的 schedule 模板,而是通过分析计算定义自动生成搜索空间,然后在生成的搜索空间中搜索最佳 schedule。

步骤五:为模型编译选择最佳配置。调优后,auto-tuning 模块会生成 JSON 格式的调优记录。此步骤为每个子图选择最佳 schedule。

步骤六:降级为张量中间表示(TIR,TVM 的底层中间表示)。基于调优步骤选择最佳配置后,所有 TE 子图降级为 TIR 并通过底层优化 pass 进行优化。接下来,优化的 TIR 降级为硬件平台的目标编译器。这是生成可部署到生产的优化模型的最终代码生成阶段。 TVM 支持多种不同的编译器后端:

1.LLVM,针对任意微处理器架构,包括标准 x86 和 ARM 处理器、AMDGPU 和 NVPTX 代码生成,以及 LLVM 支持的任何其他平台。
2.特定编译器,例如 NVCC(NVIDIA 的编译器)。
3.嵌入式和特定 target,通过 TVM 的 自定义代码生成(Bring Your Own Codegen, BYOC)框架实现。

步骤七:编译成机器码。compiler-specific 的生成代码最终可降级为机器码。 TVM 可将模型编译为可链接对象模块,然后轻量级 TVM runtime 可以用 C 语言的 API 来动态加载模型,也可以为 Python 和 Rust 等其他语言提供入口点。或将 runtime 和模型放在同一个 package 里时,TVM 可以对其构建捆绑部署。

经过以上的理论科普,我想用我自己的话来总结一下TVM有什么用:
即:TVM可以把你在任何平台上训练好的模型(Windows,Linux,ARM端等等),打包好,并把你优化好的模型放到任何你想要放到的平台上运行,也就是AI技术的落地。

以上只是自己学习过程中的一个笔记,如果大家想做一些关于TVM的例子,了解一下怎么将自己搭建的神经网络模型转换成onnx格式的模型权重,非常推荐大家看这篇大佬的经验贴,https://cloud.tencent.com/developer/article/2346576,写的非常好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1542393.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

小球轻重的测量

设有12个小球。其中11个小球的重量相同,称为好球;有一个小球的重量与11个好球的重量不同(或轻或重),称这个小球为坏球。试编写一个算法,用一个无砝码的天平称三次找出这个坏球,并确定其比好球轻…

SpringCloud入门(五)Nacos注册中心(上)

国内公司一般都推崇阿里巴巴的技术,比如注册中心,SpringCloudAlibaba也推出了一个名为Nacos的注册中心。Dynami Naming and Configuration Service。是阿里巴巴2018年7月开源的项目。 Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。…

智谱清影 - CogVideoX-2b-部署与使用

🍑个人主页:Jupiter. 🚀 所属专栏:Linux从入门到进阶 欢迎大家点赞收藏评论😊 目录 体验地址:[丹摩DAMODEL官网](https://www.damodel.com/console/overview) CogVideoX 简介本篇将详细介绍使用丹摩服务器部…

网络通信——OSI七层模型和TCP/IP模型

OSI模型 一.OSI七层模型 OSI(Open System Interconnect)七层模型是一种将计算机网络通信协议划分为七个不同层次的标准化框架。每一层都负责不同的功能,从物理连接到应用程序的处理。这种模型有助于不同的系统之间进行通信时,更…

KamaCoder 103. 水流问题

题目要求 N*M的矩阵,数值代表位置的相对高度。矩阵模拟了一个地形,当雨水落上时,会根据地形倾斜向低处流动。但是只能从较高或等高的地点流向较低或等高并且相邻的地点,我们的目标是确定那些单元格,从这些单元格出发的…

Vue(14)——组合式API①

setup 特点&#xff1a;执行实际比beforeCreate还要早&#xff0c;并且获取不到this <script> export default{setup(){console.log(setup函数);},beforeCreate(){console.log(beforeCreate函数);} } </script> 在setup函数中提供的数据和方法&#xff0c;想要在…

101. 对称二叉树(共含三道leetcode题)

文章目录 101. 对称二叉树递归法迭代法 小结100.相同的树572.另一个树的子树 101. 对称二叉树 101. 对称二叉树 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true示例 2&#…

Administration Console后台弱⼝令登录

1.环境搭建 cd vulhub-master/iboss/CVE-2017-12149 docker-compose up-d 2.访问登录页面 JBoss AS 6 Admin Consolehttp://47.121.211.205:8080/admin-console/login.seam?conversationId4用户名admin 密码vulhub 3.上传war文件 4.访问上传文件并进行连接 访问上传文件 使…

kubectl 执行一条命令之后发生了什么?

kubectl 是与 Kubernetes 集群交互的命令行工具&#xff0c;用户通过它可以对集群资源进行操作和管理。你有没有想过&#xff0c;当我们执行一条 kubectl 命令之后&#xff0c;背后都发生了什么&#xff1f; 详细过程 kubectl -> kube-api-server 根据通信类型&#xff0…

算法题之宝石与石头

宝石与石头 给你一个字符串 jewels 代表石头中宝石的类型&#xff0c;另有一个字符串 stones 代表你拥有的石头。 stones 中每个字符代表了一种你拥有的石头的类型&#xff0c;你想知道你拥有的石头中有多少是宝石。 字母区分大小写&#xff0c;因此 "a" 和 "…

EECS498 Deep Learning for Computer Vision (一)软件使用指南

#最近开始学习深度学习的相关基础知识&#xff0c;记录一下相关笔记及学习成果# learning&#xff1a;building artificial systems that learn from data and experience deep learning(a set of machine learning): hierarchical learning algorithms with many "laye…

制作一个rabbitmq-sdk以及rabbitmq消费者实现定时上下线功能

目录结构 pom.xml <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">&l…

低版本JMX Console未授权

1.环境搭建 cd vulhub-master/jboss/CVE-2017-7504 docker-compose up -d 2.访问漏洞网站 http://47.121.211.205:8080/jmx-console/http://47.121.211.205:8080/jmx-console/ 3.然后找到jboss.deployment (jboss ⾃带得部署功能) 中的flavorURL,typeDeploymentScanner点进 …

比 Kimi 更强!用 Claude 仿写头条文章,轻松过原创(附完整指令)

最近&#xff0c;我有个做头条号的朋友跟我吐槽&#xff0c;说每天都要更新内容&#xff0c;经常写文章写到半夜&#xff0c;他已经快撑不住了。我听完实在有点不忍心&#xff0c;就告诉他&#xff0c;其实可以用 AI 来帮忙写头条文章。 朋友一脸怀疑&#xff0c;说“怎么可能&…

UML图之类图关系例题

答案&#xff1a;B C 知识点 依赖关系 一个事物发生变化影响另个一个事物 泛化关系 特殊/一般关系 关联关系 描述了一组链&#xff0c;链是对象之间的连接 实现关系 接口与类之间的关系

客户转化预测以及关键因素识别_支持向量机与相关性分析

数据入口&#xff1a;数字营销转化数据集 - Heywhale.com 数据集记录了客户与数字营销活动的互动情况。它涵盖了人口统计数据、营销特定指标、客户参与度指标以及历史购买数据&#xff0c;为数字营销领域的预测建模和分析提供了丰富的信息。 数据说明&#xff1a; 字段说明Cu…

【verilog】4. gtkwave的调用

文章目录 前言实验步骤 前言 进行 数电 FPGA 实验 实验步骤 将 GTKwave 的 bin 文件夹路径添加到 “系统环境变量” 的 “Path” 中 启动 debugger wizard, 设置观测信号 编译选择 2进制 文件 点击 start programming connect debugger 选择触发方式 Run 自动打开 gtkwave&a…

priority_queue 与 deque

priority_queue的介绍与使用 简单介绍 priority_queue - Referencep 从模板可以看出&#xff0c;优先级队列这里的有着新的东西&#xff0c;Compare&#xff1b; 首先&#xff1a;class T 我们都知道&#xff0c;是元素类型&#xff0c;比如int char 一类的&#xff1b; 其实…

基于 jenkins 配置自动化邮件发送

文章目录 安装插件测试配置开始配置邮件创建项目并配置常见问题 安装插件 搜索 Email Extension 测试配置 Manage Jenkins -> System -> E-mail Notification&#xff0c;测试配置是否可以正常发送邮件&#xff1b; 此时可以看到接收到的邮件&#xff1b; 开始配置邮…

矩阵范数介绍

这里写目录标题 理论1 诱导范数 (induced norm)2 “元素形式”范数(“entrywise" norm)3 Schatten 范数 论文中常用范数的书写 理论 参考张贤达矩阵分析page 34 矩阵范数主要有三种类型&#xff1a;诱导范数&#xff0c;元素形式范数和Schatten范数 1 诱导范数 (induce…