赞
踩
近年来,电脑视觉(Computer Vision) 领域迎来了重大改革,从过去一个一个从像素处理(Pixel) 的方式,已经转变成由“大数据(Big Data)”来统计出所谓“模组(Model) ”的 深度学习(Deep Learning) 应用方式。更何况是颠覆人类想像的生成式 AI ( Generative AI ) 与 ChatGPT 、可说是 人工智能(Artificial Intelligence) 的时代已经全面来临,让周边的设备智能化已经不是遥不可及的梦想 !! 然而,过去无数学者、研究员、工程师致力研发的系统,现今仅须透过一些简单的方法就能轻松实现,并配合恩智浦 NXP 搭载 神经网路处理器(Neural Processing Unit, NPU) 的 i.MX 93 平台,即可快速实现成终端产品!! 此文章将专注于 Arm 针对 Ethos-U NPU 所设计的开发工具进行深入介绍 !!
如何建立 NXP 嵌入式系统的开发环境, 读者可以阅读此 【ATU Book - i.MX8系列 - OS】NXP i.MX Linux BSP 开发环境架设 来快速布署恩智浦 NXP i.MX9 系列的开发环境,透过此博文或 ATU 一部小编的系列博文,即可轻松实现任何有关 i.MX9 的环境架设 !! 或是想要更快速进入到 NXP 平台的实作中,可以至官方网站下载官方发行的 Linux 映像档(Image)。
Note : 目前作者测试的版本为 BSP L6.1.55_2.2.0
Embedded Linux for i.MX Applications Processors | NXP Semiconductors
Arm Vela Tool 使用示意图
由于 Arm Ethos-U 系列的 NPU 设计于 8 位元 或 16 位元资料型态,因此建议用户先透过 Tensorflow 所提供的量化方式,或是 NXP 的 eIQ toolkit 进行模组量化与转换,并于产生出 tflite 档案后。即可搭配 Arm vela 工具,特别针对 Ethos-U 的 NPU 进行最佳化配置,举例 : 以 尺寸大小 或是 性能方面 来进行最佳化配置,或是自行撰写配置档。故给予相当自由的操作方式,让开发者有更多的应用手段。此外,能够显示模组的计算图、运算元、排程、效能等等重要开发资讯! 因此 vela tool是套相当值得学习应用的开发工具 !
由于 Yocto BSP 已内建 Vela 工具,因此这里将介绍如何安装至个人 PC 上 (Linux),帮助开发者加速开发
(1) 从 github 下载套件
$ git clone https://github.com/nxp-imx/ethos-u-vela.git
(2) 安装 vela tool
- $ cd ethos-u-vela
- $ git checkout lf-6.6.3_1.0.0
- $ pip3 install .
如上操作,即可使用 vela 工具。
专门用于 Arm Ethos-U NPU 的开发工具,可以提供数种优化方式,能够帮助开发者更有效的应用模组。
1. 基本讯息
(1) vela tool版本资讯 :
$ vela --version
(2) vela api版本资讯 :
$ vela --api-version
(3) 运算元(operator) 清单 :
$ vela --supported-ops-report
(4) Config 资讯 :
$ vela --list-config-files
(5) 设定输出的资料夹 :
$ vela <model>.tflite --output-dir=<Folder>
输出的模组与档案,将会导入该资料夹
(6) 产生 debug 的档案:
$ vela <model>.tflite --output-dir=<Folder> --enable-debug-db
将会产出 *_debug.xml 档案 ,并允许追踪从输入网路图到输出命令流的最佳化。
(7) 显示模组操作时所定义的系统设定值与记忆体模式
$ vela <model>.tflite --verbose-config
2. 显示讯息
(1) 显示模组的架构图或运算图(Graph)
$ vela <model>.tflite --verbose-graph
Note : 同时,列出透过 vela 工具优化后的架构图或是计算图。
(2) 显示每个 张量(Tensor) 讯息
$ vela <model>.tflite --verbose-graph
(3) 显示每个 运算元(Operator) 的权重参数与资料型态
$ vela <model>.tflite --verbose-graph
(4) 显示 运算子(Operator) 讯息
$ vela <model>.tflite --verbose-operators
(5) 显示 运算子(Operations) 讯息 – 使用 NPU / CPU 的讯息
$ vela <model>.tflite --show-cpu-operations
(6) 显示 效能(Peromance) 讯息
$ vela <model>.tflite --verbose-performance
(7) 显示 程式段落(Progress) 讯息
$ vela <model>.tflite --verbose-progress
(8) 显示 排程(Schedule) 讯息
$ vela <model>.tflite --verbose-schedule
(9) 显示 程式段落(Progress) 讯息
$ vela <model>.tflite --verbose-progress
(10) 显示 计算编译器执行操作的时间
$ vela <model>.tflite --timing
(11) 显示 NPU 与 CPU 各别输出/输入的张量(Tensor) 摘要资讯
$ vela <model>.tflite --show-subgraph-io-summary
3. 编译设定
(1) 对于 尺寸(Size) 进行模组最佳化
$ vela <model>.tflite --optimise Size
(2) 对于 性能(Performance) 进行模组最佳化
$ vela <model>.tflite --optimise Performance
(3) 对于 性能(Performance) 进行模组最佳化 – 快取(Cache) 限制
$ vela <model>.tflite --optimise Performance --arena-cache-size 3000
Note : 限制快取(Cache) 的使用量
(4) 对于 张量(Tensor) 选择 CPU / NPU 的分配算法 [ Greedy, LinearAlloc, HillClimb ]
$ vela <model>.tflite --tensor-allocator=LinearAlloc
(5) 对于 NPU 核心操作间,区块依赖延迟最大值 [ 0, 1, 2, 3 ]
$ vela <model>.tflite --max-block-dependency 0
Note : 数值越低、延迟越长
(6) 设置递回限制
$ vela <model>.tflite --recursion-limit 2000
(7) 设置 HillClimb 最大迭代次数
$ vela <model>.tflite --hillclimb-max-iterations 1000
(8) 进行设置 ini 档案来实现模组最佳化
$ vela <model>.tflite --config <file>.ini
可参考此档案 Vela.ini
(9) 设置 系统配置(System Config)
$ vela <model>.tflite --config <file>.ini --system-config Ethos_U65_Client_Server
官网资讯 : 点选
(10) 设置 记忆体配置(System Config)
$ vela <model>.tflite --config <file>.ini --memory-mode Dedicated_Sram
官网资讯 : 点选
在 Ethos-U65 NPU 的设计里面,有三种记忆体架构
a. TCM (Tightly Coupled Memory )
容量大小为 256KB ( 128KB + 128KB ),其用途作为 Cortex-M 传输资料时使用。
b. OCRAM ( On-Chip RAM )
容量大小为 640KB,其中 256 KB 分配给 ATF 机制,用于 Cortex-A 传输资料时使用,其馀 384 KB 则保留给予 NPU 作为权重暂存使用
c. DRAM
容量大小为 2GB,用于Cortex-A和Cortex-M之间的 DMA 机制。
主要使用两种记忆体模式
a. Sram_Only 模式
不使用 DRAM,模型数据和 TensorArena 记忆体都分配在 OCRAM 中。
$ vela <model>.tflite --config <file>.ini --system-config Ethos_U65_High_End --memory-mode Sram_Only
b. Dedicated_Sram 模式
模型数据和 TensorArena分配在DRAM 中,OCRAM 用作 NPU 缓存。
$ vela <model>.tflite --config <file>.ini --system-config Ethos_U65_High_End --memory-mode Dedicated_Sram
近年无数学者、研究员与业者致力于研究物件侦测相关的应用,如前篇文章仅需要利用简单几个步骤就完成一个简单的‘ YOLOv5 物件识别 ’,且仅需短短几个小时即可训练出模型,相比与过去实在天壤之别。因此如何部属至各个硬体平台端就是‘落地的关键指标之一’ ; 本篇文章以‘NXP i.MX 93’作为实现边缘运算的装置,并介绍一套很重要的开发工具‘ vela 工具 ’能够帮助开发者获得一些模组优化后的数据与程序处理方式。但比较可惜的事情,虽然此工具有提供许多的优化方式,但仍有些功能无法实现于 i.MX93 上。因此仍推荐以 vela 性能(Performance) 作为主要的优化手段 ! 事不宜迟,赶紧使用 i.MX93 打造属于自己的 AI 装置吧 !
[1] i.MX 8 Series Applications Processors Multicore Arm® Cortex® Processors
[2] NXP Document - i.MX Yocto Project User's Guide.pdf
[3] Welcome to the Yocto Project Documentation
[4] NXP Document - i.MX Linux Release Note
[5] NXP Document - i.MX Machine Learning User's Guide
[6] Roboflow
[7] Ultralytics
[8] Arm Ethos-U65
[9] Arm Vela tool
如有任何相关 Machine Learning 技术问题,欢迎至博文底下留言提问 !!
接下来还会分享更多 Machine Learning的技术文章 !!敬请期待 【ATU Book-i.MX系列 - ML】 !!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。