NNVM Compiler,AI框架的开放式编译器

NNVM Compiler,AI框架的开放式编译器

深度学习已变得无处不在且不可或缺。在多种平台(例如手机,GPU,IoT设备和专用加速器)上部署深度学习工作负载的需求不断增长。宣布了TVM堆栈,以弥合深度学习框架与面向性能或效率的硬件后端之间的鸿沟。TVM堆栈使为深度学习框架轻松构建端到端编译变得容易。拥有适用于所有框架的统一解决方案甚至会更好。

威斯康星大学艾伦分校和AWS AI团队以及其他贡献者,宣布NNVM编译器的发布,NNVM编译器是一种开放式深度学习编译器,用于将前端框架工作负载直接编译到硬件后端。使用TVM堆栈中的两级中间表示(IR)来构建它。欢迎读者参考原始的TVM公告,以获取有关TVM堆栈的更多技术细节。借助TVM堆栈,NNVM编译器可以:

  • 在高级图IR中表示并优化常见的深度学习工作负载
  • 转换计算图以最大程度地减少内存利用率,优化数据布局并融合不同硬件后端的计算模式。
  • 提出从前端深度学习框架到裸机硬件的端到端编译管道。

 

 

 

NNVM编译器可以直接从深度学习框架(例如Apache MXNet)中获取模型。支持模型交换格式,例如ONNX和CoreML。ONNX支持使NNVM能够从PyTorch,Caffe2和CNTK编译深度学习模型。CoreML前端支持将CoreML模型部署到非iOS设备。

 

 

 优化与部署分离

 

 

 NNVM编译器应用图级和张量级优化,共同优化以获得最佳性能。采用与现有深度学习框架不同的方法,后者将图形优化与部署运行时打包在一起。NNVM编译器采用了编译器的传统知识,将优化与实际部署运行时分开。这种方法提供了实质性的优化,但仍保持运行时的轻量级。编译后的模块仅取决于最小的TVM运行时,部署在Raspberry Pi或移动设备上时仅需300KB左右。

Performance

NNVM编译器仍在积极开发中,可以期待会有更多的改进,已经开始看到可喜的结果。对性能进行了基准测试,在两种典型的硬件配置上,与Apache MXNet进行了比较:Raspberry PI上的ARM CPU和AWS上的Nvidia GPU。尽管这两款芯片在架构上存在根本差异,可以使用相同的基础架构,只需要更改每种硬件的调度即可。

Nvidia GPU

GPU基准和调度,将NNVM编译器与Apache MXNet与CUDA8和cuDNN7作为Nvidia K80的后端进行了比较。这是一个非常强的基准,因为Apache MXNet会打开自动调整功能以从CuDNN中选择最佳内核。还使用了MXNet中优化的深度智能内核来优化MobileNet工作负载。

 

 

 可以看出,NNVM编译器生成的代码胜过K80上的Apache MXNet。这些改进归因于联合图级别和内核级别的优化。值得注意的是,NNVM编译器无需依赖CuDNN等外部库,即可自行生成所有优化的GPU内核。

Raspberry Pi 3b

Rasberry Pi编译堆栈,将NNVM编译器与带有OpenBLAS和NNPack的Apache MXNet进行了比较。探索了使MXNet发挥最佳性能的设置:为3x3卷积打开了NNPACK中的Winograd卷积,启用了多线程,并禁用了其他调度程序线程(因此,所有线程都被NNPack使用)。

 

 

 可以看出,在ResNet18上,NNVM编译器生成的代码快两倍。MobileNet上的差距,现有CPU DNN库中缺乏深度卷积。NNVM编译器利用直接生成有效的ARM代码的优势。

posted @ 2021-04-18 07:09  吴建明wujianming  阅读(840)  评论(0编辑  收藏  举报