NVDLA(NVIDIA Deep Learning Accelerator),是英伟达开源的深度学习加速器的软硬件参考方案,通过其模块化架构,NVDLA 具有可扩展性和高度可配置性的特点,实现降低深度学习加速器的设计门槛。让更多行业能够快速的将 AI 加速能力融合进自己的 AI SoC 中。
背景
其实 Tengine 开源项目在去年(2020年)初步完成了一系列边缘AI计算平台的适配之后,就计划实现一套开源的 AI SoC 的 Turnkey Solution。因为在近一年的开发过程中,感受到 算法、框架、芯片 三大模块的开发工程师的信息墙太厚了。当时 Tengine 的
同学已经完成了 NVDLA 的初步探索:
只可惜
“创业未半,而中道跑路”……
现状
一晃半年过去(2021年7月中旬),某天发现一个神奇的开源项目,某位同学独自一人将 NVDLA 移植到了 Xilinx 的 Zynq 平台:
跟作者
初步交流后得知,虽然完成了移植,但是还是存在以下问题:
- NVDLA 原生的工具链只支持远古的 Caffe 的模型;
- NVDLA 需要将 FP32 模型量化到 Int8,原生工具操作过于复杂;
- NVDLA 支持的算子有限,目前很多主流的网络无法运行,例如 YOLO 系列。
正好以上三点,当前的 Tengine 框架可以完美的解决,毕竟 Tengine 的特点就包括
- 支持主流训练框架生成的网络模型转换;
- 提供端到端的 PTQ (离线量化)工具;
- 具备非常人性化的自动切图功能。
结果
经过
同学一个月的不懈努力(肝)以及 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 的适配基本上由
独自一人完成,根本不给
下场写代码的机会。
不给 虫叔 下场机会
想写代码了……
原文:知乎
作者:圈圈虫
相关文章
我是圈圈虫,一个热爱技术的中年大叔。快加入 OPEN AI LAB 开发者技术 QQ 群(829565581)来找我吧!溜了~~
入群秘令:CNN
更多Tengine相关内容请关注Tengine-边缘AI推理框架专栏。