【ATU Book-i.MX 系列 - ML】手把手教你玩 AI - 掌握 NXP i.MX93 用 Vela 工具打造卓越应用

一、概述

近年来,电脑视觉(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是套相当值得学习应用的开发工具 !

二、安装 Vela 工具

由于 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 工具

三、使用 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 !!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值