TVM学习-刘波
TVM是一个用于CPU, GPU和专用加速器(如华为的达芬奇芯片)的开放式深度学习编译器堆栈,之所以说是堆栈,是因为TVM解决的不只是一个特定AI硬件的编译,而是做成通用的,解决不同前端模型(TF/CAFFE等)的转换、图优化、张量优化、图编译、代码生成等一体的解决方案。tvm - tvm 0.6.0 documentationdocs.tvm.ai
https://blog.csdn.net/hw5226349/category_9290561.htmlblog.csdn.net
tvm.load_json、tvm.save_json持久化为json文件tvm.var、tvm.const构造一个变量或者常量tvm.convert把一个值转为TVM节点或者函数tvm.placeholder比较常用,声明一个占位符tvm.compute这个很常用,返回一个tensor,通过lambda表达式描述一个计算。tvm.decl_buffer定义一个符号缓存tvm.sum、tvm.div、tvm.indexdiv、tvm.indexmod、tvm.truncdiv、tvm.truncmod、tvm.floordiv、tvm.floormod都是算术计算tvm.min和tvm.max是取最大和最小tvm.tag_scope用来给计算节点打上tagtvm.tensor类tvm.tensor.Tensor的操作:astype: 类型转换axis : 返回轴信息equal:表达式相等判断same_as:相等判断属性如下:propertyndimtensor的维度信息propertyop对应的操作shape:输出的形状property value_index
classtvm.tensor.Operation操作如下:output(index) 获取对应索引的输出tensorsame_as:判断相等
属性如下:propertyinput_tensors输入tensor列表propertynum_outputs输出个数今天学习tvm.schedule。参考https://zhuanlan.zhihu.com/p/94846767
在TBE编程中,最难写的一部分就是这个tvm.schedule,里面需要遍历计算节点做数据流的设置、轴的切分和重排、指令的映射等。tvm.create_schedule(ops)为OP列表创建调度tvm.schedule.Schedul:cache_read(tensor,scope,readers) 返回cache tensor,其中tensor为需要cache的源tensor,scope是cache的区域,readers是这个cache数据的使用者。这个函数一般在split&reuse等源语调用的前面。cache_write(tensor,scope) 在写进tensor前,插入一个cache write的tensor