深度学习编译中间件之NNVM(一)介绍

为参考文档

  1. https://github.com/dmlc/nnvm
  2. https://github.com/dmlc/tvm
  3. https://baijiahao.baidu.com/s?id=1580600243200331182 陈天奇团队发布NNVM编译器,性能优于MXNet
  4. https://mp.weixin.qq.com/s/CHUZX92tERidKq-y3EMTfQ NNVM 编译器导论:用于AI框架的一种新式端到端编译器
  5. http://dataunion.org/31598.html 如何使用CNN推理机在IoT设备上实现深度学习
  6. 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参考和继承的软件,其中提到了TOPIHalideIRLoopy,如果你的需求不是仅仅使用TVM,而是定制TVM来满足自己的需求的话了解TVM的软件继承关系是非常有必要的。

TOPI(TVM Operator Inventory)

TOPI即TVM操作符清单,一个TVM操作符收集库,是为了让TVM可以同时手工定制自动优化计算Kernel函数。具体的目标为:

  • 提供操作符声明的语法糖
  • 提供创建融合操作符的基础功能
  • 提供不同硬件下的通用调度器
文件组织
  • include:C++库,只包含头文件
  • python:TOPI的python库
  • recipe:包含一些有用的操作符示例集合
指导方针
  • 使用numpy-style操作符命名约定
  • 尽可能分离操作符声明和调度
  • 慎重地维护需求
  • 注意数据布局

未完待续…

猜你喜欢

转载自blog.csdn.net/sanallen/article/details/79196868