使用 Vela 编译器开发 Ethos-U NPU 流程导引
文章目录
Vela 编译器简介
Ethos-U Vela 是 Arm开发的一款软件工具,可将 TensorFlow Lite(TensorFlow Lite for Microcontroller 是 TensorFlow LIte的一个子集)模型编译为可在 Ethos-U NPU上运行的优化版本。Vela 以 TensorFlow Lite模型为输入,应用包括内存优化和层融合技术在内的优化手段,编译生成专门针对 Ethos-U 架构优化的二进制文件。这一优化的二进制文件最大限度地利用了 Ethos-U NPU 的硬件特性,以高效执行机器学习工作负载。

优化后的模型包含 TensorFlow Lite 专门设计的算子,可通过 Ethos-U NPU加速。模型中无法加速的部分保持不变,而是使用适当的内核在主机处理器(如 Cortex‑M 系列 CPU)上运行。
Ethos-U Vela 将会尝试多种不同的编译策略,并对每种策略应用了成本函数。然后,Vela 为每个受支持的 操作符 或 操作符组 选择最优的执行调用。Vela 与 TensorFlow Lite (量化)位精度一致,因此,使用 Vela 编译器优化神经网络时,不会损失精度。
Vela 编译器可以报告预估性能,但仅是近似估计。软件开发人员应考虑将机器学习推理顾问(Machine Learning Inference Advisor,另一个 ML 开发工具)与经过验证的高性能模型结合使用,以获得更准确的性能数据。
Vela 编译器执行各种内存优化,以减少固定存储(Flash)和运行时(SRAM)的内存需求。这些优化包括以下内容:
- 压缩模型中的所有权重,可以减少固定存储内存的使用。
- 通过将一组连续的算子的特征图(FM, Feature Map)拆分为多个分块(Stripe),从而减少运行时的内存使用。一个分块可以是特征图的全宽或部分宽度,也可以是特征图的全高或部分高度。然后,每次载入一个分块依次加载所有算子,以避免一次性载入巨大的计算量以及对应的内存使用需求。
模型中可优化和加速的部分被专门识别出来,并转换为 TensorFlow Lite 组件中的特定算子。这些算子随后被编译成命令流,由 Ethos-U NPU 执行。
最后,Vela 将优化后的模型输出为 TFLM 模型(仍然是 *.tflite文件),并生成性能评估报告。该报告提供了内存使用和推理时间等统计数据。
Vela 编译器提供了可配置的选项,使开发者能够指定嵌入式系统配置的各个方面,例如:Ethos-U NPU 的版本型号、内存类型和内存大小。此外,还有配置选项用于控制在编译过程中执行的优化类型。
至 于Vela 本身,是一个Python环境的库,除了必要的基础软件外(C语言运行时环境和Python运行时环境),可以通过Python安装组件库的方式,安装 Vela 工具:
pip3 install ethos-u-vela
在Python的命令行环境中使用 Vela:
- 输入文件是
*.tflite,其中包含了将要编译的神经网络信息。 - 输出文件是
*_vela.tflite文件,仍是一个*.tflite文件,但是文件名中加了个_vela的后缀。以及一个*.csv文件,其中描述了预估模型性能的信息。 - 预估模型性能的摘要报告也会通过命令行终端输出。
$ vela my_network.tflite
Network summary for my_network
Accelerator configuration Ethos_U55_256
System configuration internal-default
Memory mode internal-default
Accelerator clock 500 MHz
Design peak SRAM bandwidth 4.00 GB/s
Design peak Off-chip Flash bandwidth 0.50 GB/s
Total SRAM used 0.95 KiB
Total Off-chip Flash used 106.98 KiB
CPU operators = 0 (0.0%)
NPU operators = 44 (100.0%)
Average SRAM bandwidth 0.04 GB/s
Input SRAM bandwidth 0.01 MB/batch
Weight SRAM bandwidth 0.00 MB/batch
Output SRAM bandwidth 0.00 MB/batch
Total SRAM bandwidth 0.01 MB/batch
Total SRAM bandwidth per input 0.01 MB/inference (batch size 1)
Average Off-chip Flash bandwidth 0.46 GB/s
Input Off-chip Flash bandwidth 0.01 MB/batch
Weight Off-chip Flash bandwidth 0.09 MB/batch
Output Off-chip Flash bandwidth 0.00 MB/batch
Total Off-chip Flash bandwidth 0.10 MB/batch
Total Off-chip Flash bandwidth per input 0.10 MB/inference (batch size 1)
Neural network macs 86952 MACs/batch
此处特别注意,报告中的周期和带宽数字并不是实际性能数据的准确表示,也不应与使用不同设置或配置的其他编译结果进行比较。实际上,报告的数据仅供编译器做出优化决策,仅仅为 Vela 自己做参考。若要获得准确的性能数据,仍要在具体的硬件平台上运行网络并进行性能分析。<

最低0.47元/天 解锁文章
1629

被折叠的 条评论
为什么被折叠?



