深度学习编译中间件之NNVM(一)介绍
为参考文档https://github.com/dmlc/nnvmhttps://github.com/dmlc/tvmhttps://baijiahao.baidu.com/s?id=1580600243200331182 陈天奇团队发布NNVM编译器,性能优于MXNethttps://mp.weixin.qq.com/s/CHUZX92tERidKq-y3EMTfQ NNVM 编译...
为参考文档
- https://github.com/dmlc/nnvm
- https://github.com/dmlc/tvm
- https://baijiahao.baidu.com/s?id=1580600243200331182 陈天奇团队发布NNVM编译器,性能优于MXNet
- https://mp.weixin.qq.com/s/CHUZX92tERidKq-y3EMTfQ NNVM 编译器导论:用于AI框架的一种新式端到端编译器
- http://dataunion.org/31598.html 如何使用CNN推理机在IoT设备上实现深度学习
- https://zhuanlan.zhihu.com/p/32711259 从NNVM和ONNX看AI芯片的基础运算算子
综述
NNVM是亚马逊和华盛顿大学合作发布的开源端到端深度学习编译器,支持将包括mxnet,pytorch,caffe2,coreml等在内的深度学习模型编译部署到硬件上并提供多级别联合优化。速度更快,部署更加轻量级。支持包括树莓派,FPGA板卡,服务器和各种移动式设备和cuda,opencl,metal,javascript以及其它各种后端。
NNVM compiler可以将前端框架中的工作负载直接编译到硬件后端,能在高层图中间表示(IR)中表示和优化普通的深度学习工作负载,也能为不同的硬件后端转换计算图、最小化内存占用、优化数据分布、融合计算模式。
NNVM编译器基于此前发布的TVM堆栈中的两个组件:NNVM用于生成计算图,TVM用于映射张量运算。
NNVM:将不同框架的工作负载表示为标准化计算图,然后将这些高级图转换为执行图
TVM:提供一种独立于硬件的特定域语言,以简化张量索引层次中的运算符实现。另外,TVM还支持多线程、平铺、缓存等。
TVM软件堆栈
上图基本上展示了TVM软件堆栈的功能构成:
- Computation Graph Optimization
- Tensor Compute Description
- Schedule Space and Optimzation
值得关注的是TVM软件堆栈并不是一个完全重新创建的应用软件,作者本人也提供到TVM参考和继承的软件,其中提到了TOPI、HalideIR和Loopy,如果你的需求不是仅仅使用TVM,而是定制TVM来满足自己的需求的话了解TVM的软件继承关系是非常有必要的。
TOPI(TVM Operator Inventory)
TOPI即TVM操作符清单,一个TVM操作符收集库,是为了让TVM可以同时手工定制和自动优化计算Kernel函数。具体的目标为:
- 提供操作符声明的语法糖
- 提供创建融合操作符的基础功能
- 提供不同硬件下的通用调度器
文件组织
- include:C++库,只包含头文件
- python:TOPI的python库
- recipe:包含一些有用的操作符示例集合
指导方针
- 使用numpy-style操作符命名约定
- 尽可能分离操作符声明和调度
- 慎重地维护需求
- 注意数据布局
未完待续…
更多推荐
所有评论(0)