圈圈虫 · 2021年08月31日

Tengine 支持 NPU 第4篇-NVDLA

NVDLA(NVIDIA Deep Learning Accelerator),是英伟达开源的深度学习加速器的软硬件参考方案,通过其模块化架构,NVDLA 具有可扩展性和高度可配置性的特点,实现降低深度学习加速器的设计门槛。让更多行业能够快速的将 AI 加速能力融合进自己的 AI SoC 中。

背景

其实 Tengine 开源项目在去年(2020年)初步完成了一系列边缘AI计算平台的适配之后,就计划实现一套开源的 AI SoC 的 Turnkey Solution。因为在近一年的开发过程中,感受到 算法、框架、芯片 三大模块的开发工程师的信息墙太厚了。当时 Tengine 的

@沙拉酱

同学已经完成了 NVDLA 的初步探索:

只可惜

@沙拉酱

“创业未半,而中道跑路”……

现状

一晃半年过去(2021年7月中旬),某天发现一个神奇的开源项目,某位同学独自一人将 NVDLA 移植到了 Xilinx 的 Zynq 平台:

跟作者

@LeiWang1999

初步交流后得知,虽然完成了移植,但是还是存在以下问题:

  • NVDLA 原生的工具链只支持远古的 Caffe 的模型;
  • NVDLA 需要将 FP32 模型量化到 Int8,原生工具操作过于复杂;
  • NVDLA 支持的算子有限,目前很多主流的网络无法运行,例如 YOLO 系列。

正好以上三点,当前的 Tengine 框架可以完美的解决,毕竟 Tengine 的特点就包括

  • 支持主流训练框架生成的网络模型转换;
  • 提供端到端的 PTQ (离线量化)工具;
  • 具备非常人性化的自动切图功能。

结果

经过

@LeiWang1999

同学一个月的不懈努力(肝)以及 Tengine 小伙伴的友情协助超乎预期的完成了 Tengine + NVDLA 的 Turnkey Solution,实现了以下功能:

  • 在 Xilinx Zynq UltraScale+ ZCU102 完成 Tengine + NVDLA 移植;
  • 基于 Tengine 新增 NVDLA 后端代码 opendla;
  • 支持 ResNet18、YOLOX-Nano-ReLU 模型;
  • 支持 Batchnorm、Concat、Convolution、Deconvolution、Eltwise、FC、Pooling、ReLU、Scale、Split 算子。

运行结果初探

分类模型,ResNet18:

$ ./tm_classification_opendla -m /root/Tengine/models/resnet18-cifar10-nosoftmax-relu_int8.tmfile -i /root/Tengine/images/cat.jpg -g 32,32 -s 1,1,1
Mean value not specified, use default   104.0, 116.7, 122.7
tengine-lite library version: 1.4-dev
NVDLA time: 0.012502 seconds

model file : /root/Tengine/models/resnet18-cifar10-nosoftmax-relu_int8.tmfile
image file : /root/Tengine/images/cat.jpg
img_h, img_w, scale[3], mean[3] : 32 32 , 1.000 1.000 1.000, 104.0 116.7 122.7
Repeat 1 times, thread 1, avg time 12.62 ms, max_time 12.62 ms, min_time 12.62 ms
--------------------------------------
10.087049, 3
3.833079, 2
3.026115, 5
2.420892, 4
-0.403482, 0
--------------------------------------

检测模型,YOLOX-Nano-ReLU

YOLOX 是今年国内非常棒的一个目标检测工程,这里要特别感谢旷世的大佬们为了迁就 NVDLA 周末加班 Finetune 提供 YOLOX-Nano-Relu 版本。他们会在后续的版本的更新相关模型。

$ ./tm_yolox_opendla -m /root/Tengine/models/yolox_nano_relu_int8.tmfile -i /root/Tengine/images/dog.jpg -r 1
tengine-lite library version: 1.4-dev
Repeat 1 times, thread 1, avg time 1138.80 ms, max_time 1138.80 ms, min_time 1138.80 ms
--------------------------------------
detection num: 3
 2:  70%, [ 463,   80,  676,  163], car
16:  52%, [ 122,  220,  315,  517], dog
 1:  48%, [ 180,  181,  564,  430], bicycle

总结

Tengine 推理框架经过近一年的锤炼,已经提供了一套相对完善、易用的后端(GPU、NPU)适配模块。因此这次同 NVDLA 的适配基本上由

@LeiWang1999

独自一人完成,根本不给

@圈圈虫

下场写代码的机会。

不给 虫叔 下场机会

想写代码了……

原文:知乎
作者:圈圈虫

相关文章

我是圈圈虫,一个热爱技术的中年大叔。快加入 OPEN AI LAB 开发者技术 QQ 群(829565581)来找我吧!溜了~~
入群秘令:CNN

更多Tengine相关内容请关注Tengine-边缘AI推理框架专栏。
推荐阅读
关注数
3393
内容数
68
Tengine是一款轻量级模块化高性能的神经网络推理引擎 ;欢迎体验Tengine,[链接] 《Tengine开发者入门资料包》[链接]
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息