| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> 初探TVM--使用Tensor Engine来编写算子 -> 正文阅读 |
|
[Python知识库]初探TVM--使用Tensor Engine来编写算子 |
什么是TE就像在题目中写的那样,TE就是Tensor Engine的简称,其实就是用这些接口来定义一个计算算子是干什么的。可以转到tvm的一个大体介绍里面再看看。 通过这个教程,我们会学习TVM中,怎样通过TE定义一个张量计算算子。TE使用纯粹的功能性的语言描述一个张量计算,在这里是TE是没有边际效应(其实这个side effect一直不好理解,我觉得就是说换了硬件平台的话,也不应该对它产生影响)的。从tvm整体上看,relay是用来描述一组算子组成的计算图,TE是用来描述计算图中的每个算子节点,也就是说TE中可以认为是接受一个或多个输入张量,然后输出一个或多个输出张量。 在这个TE的入门的学习文章中,TVM用几个领域专用的张量计算来完成高效的算子构建。这里会通过两个算子来展示使用TE的技巧。第一个例子是个向量加法的例子,通过它来理解使用TE和TE的调度。然后我们会把这些调度概念一步一步拓展到一个compute bound的矩阵乘算子的例子上面去。同时,矩阵乘会被用到其他的TVM的操作当中,这个例子是一个非常好的入门的例子。 第一个例子:用TE写一个CPU的向量加法我们先在Python的TE里面实现一个简单的向量加法吧,在中间加入一些基于CPU优化的优化调度试试。写Python的时候,还是老样子,首先import需要的依赖库。
还要再提一个说了三四次的东西了,就是如果把CPU的型号信息告知llvm,它会做出更多基于CPU特性的优化,比如被Linus疯狂吐槽的
描述一个向量计算描述一个向量加法的计算。tvm支持向量语义,可以把每一层级的中间结果表达成为多维数组形式。用户需要描述生成向量的计算规则。我们可以先定义一个变量
给计算创造一个默认的优化调度虽然上面的几行代码定义了计算规则,我们仍然可以用不同的方式计算 TVM允许创造一个基本的调度以row major的方式去计算
编译并且评估默认的调度使用TE的表达式和一个优化调度,我们可以生成一个在目标架构和语言的可执行代码,现在就是LLVM和X86 CPU。我们给TVM提供:调度,TE表达式的列表,目标机器和主机,函数的名称。这个输出结果是一个无类型的函数,并且可以在python端直接被调用。 用下面一行代码,我们可以通过
我们可以运行这个函数,并且把输出结果和用numpy写的代码的结果作比较。编译后的TVM函数暴露出一个简明的C接口,这个结果可以通过任何语言调用。首先我们需要定义一个device,TVM可以在这个device上编译出相应的优化调度。当前我们的device是LLVM CPU。然后我们可以在device上初始化张量并且执行这个加法操作。我们通过对比TVM函数的输出结果和numpy的输出结果来验证正确性。
可以通过一个helper函数来profile这个TVM生成的代码,以此来和numpy函数比较一下运行速度。
输出:
不得不说,还挺慢。。。再把架构指定一下吧:
这次快了点儿:
使用并行化优化调度(paralleism) |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 23:32:38- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |