目录
文章目录
- @[toc]
- 一、实验背景
- 1. 嵌入式软件开发的基本流程
- 2. Arm 虚拟硬件镜像产品简介
- 二、实验目标
- 三、实验步骤简介
- 四、实验前准备
- 1. 订阅使用 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例
- 1.1 百度智能云账号准备
- 1.1.1(可选)注册百度智能云账号
- 1.1.2 登录百度智能云平台
- 1.1.3 完成实名认证(个人用户)
- 1.2 (新用户)购买使用 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例
- 1.2 (非新用户)购买使用 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例
- 1.2.1 订阅百度智能云云市场 Arm 虚拟硬件镜像
- 1.2.2 配置购买百度智能云云服务器 BCC 实例
- a. 基本配置
- b. 网络和带宽
- c. 登录凭证
- d. 购买信息
- e. 其他配置
- f. 确认订单
- 1.3 查看已购买的使用 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例
- 1.3.1 查看实例列表
- 1.3.2 查看实例详情
- 2. 登录使用 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例
- 2.1 浏览器窗口登录(通过 VNC 登录)
- 2.2 查看 Arm 虚拟硬件镜像预装软件清单
- 五、实验步骤指导
- 1. 克隆实验代码
- 1.1 了解实验项目技术栈
- 1.2 更新 CMSIS Toolbox 工具
- 1.3 安装项目依赖的 CMSIS Packs 软件包
- 1.4 安装项目依赖的环境和 Python 软件包
- 2. 数据预处理
- 2.1 测试数据预处理
- 2.2 数据标签预处理
- 3. 模型编译和部署
- 3.1 TensorFlow -> ONNX -> TVM 编译 -> Cortex-M55
- 3.2 TensorFlow -> TFLite -> TVM 编译 -> Cortex-M55
- 六、实验思考
- 七、参考文档
文章目录
- @[toc]
- 一、实验背景
- 1. 嵌入式软件开发的基本流程
- 2. Arm 虚拟硬件镜像产品简介
- 二、实验目标
- 三、实验步骤简介
- 四、实验前准备
- 1. 订阅使用 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例
- 1.1 百度智能云账号准备
- 1.1.1(可选)注册百度智能云账号
- 1.1.2 登录百度智能云平台
- 1.1.3 完成实名认证(个人用户)
- 1.2 (新用户)购买使用 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例
- 1.2 (非新用户)购买使用 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例
- 1.2.1 订阅百度智能云云市场 Arm 虚拟硬件镜像
- 1.2.2 配置购买百度智能云云服务器 BCC 实例
- a. 基本配置
- b. 网络和带宽
- c. 登录凭证
- d. 购买信息
- e. 其他配置
- f. 确认订单
- 1.3 查看已购买的使用 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例
- 1.3.1 查看实例列表
- 1.3.2 查看实例详情
- 2. 登录使用 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例
- 2.1 浏览器窗口登录(通过 VNC 登录)
- 2.2 查看 Arm 虚拟硬件镜像预装软件清单
- 五、实验步骤指导
- 1. 克隆实验代码
- 1.1 了解实验项目技术栈
- 1.2 更新 CMSIS Toolbox 工具
- 1.3 安装项目依赖的 CMSIS Packs 软件包
- 1.4 安装项目依赖的环境和 Python 软件包
- 2. 数据预处理
- 2.1 测试数据预处理
- 2.2 数据标签预处理
- 3. 模型编译和部署
- 3.1 TensorFlow -> ONNX -> TVM 编译 -> Cortex-M55
- 3.2 TensorFlow -> TFLite -> TVM 编译 -> Cortex-M55
- 六、实验思考
- 七、参考文档
本实验过程中所显示的优惠价格及费用报销等相关信息仅在【Arm AI 开发体验创造营】体验活动过程中有效,逾期无效,请根据实时价格自行购买和体验。同时,感谢本次体验活动 Arm 导师 Liliya 对于本博客的指导。
详见活动地址
一、实验背景
1. 嵌入式软件开发的基本流程
在常规的嵌入式软件开发中,通常需要在用于开发的电脑主机上提前把应用程序编译好,生成可在嵌入式芯片上运行的文件代码,再通过相应的烧录调试工具,把该代码烧录至开发板中,才能查看验证所编写应用程序的正确性。
传统的嵌入式开发流程中,往往需要用到物理开发板才能进行相应的软件开发。但是,没有拿到物理开发板或对于一些新推出的处理器产品(例如:Arm® Cortex®-M55,Cortex-M85, Ethos™-U 系列 NPU 等)市场上硬件的资源较为稀缺且需要较长的时间才能获取到物理开发板的情况下,是否有办法在相应的平台上进行软件开发呢?
答案自然是有的,这就是我们本期实验手册要给大家介绍的一个非常强大的开发工具:Arm 虚拟硬件(Arm Virtual Hardware)。
2. Arm 虚拟硬件镜像产品简介
Arm 虚拟硬件(Arm Virtual Hardware)提供了一个 Ubuntu Linux 镜像,包括用于物联网、机器学习和嵌入式应用程序的 Arm 开发工具:例如,Arm 编译器、 FVP 模型和其他针对 Cortex-M 系列处理器的开发工具帮助开发者快速入门。Arm 虚拟硬件限时免费提供用于评估用途,例如,评估 CI/CD、MLOps 和 DevOps 工作流中的自动化测试工作流等。订阅访问和使用此版本的 Arm 虚拟硬件,您需同意产品最终用户许可协议中与免费测试版许可相关的条款和协议。
Arm 虚拟硬件产品的技术概览示意图如下所示。开发者也可访问 Arm 虚拟硬件产品介绍页和产品技术文档了解更多关于 Arm 虚拟硬件产品知识。
图1. Arm 虚拟硬件产品概览
二、实验目标
- 了解 Arm 虚拟硬件产品的功能及核心优势。
- 熟悉 Arm 虚拟硬件云服务器 BCC 实例的订阅流程及 Arm 虚拟硬件镜像内的主要组件。
- 掌握如何使用 Arm 虚拟硬件云服务器 BCC 实例进行嵌入式软件的开发(例如:机器学习、物联网应用等)并熟悉其基本的开发流程,包括:如何搭建开发环境、编译构建应用代码、运行调试工程代码等步骤。
三、实验步骤简介
本实验将展示如何使用百度智能云云市场上的 Arm 虚拟硬件镜像开发一个心电疾病分类的算法。更详细的实验项目介绍资料请参考本手册第五章《实验步骤指导》中的内容。
本实验主要包括以下几个核心步骤,并在接下来的章节中提供更全面的操作指南:
1. 了解 Arm 虚拟硬件产品的功能及核心优势
- 访问 Arm 虚拟硬件产品介绍网站或 Arm 公司 官网了解 Arm 虚拟硬件产品信息。
- 微信搜索并关注 “Arm 社区” 微信公众号(二维码见文末),回复 “AVH” 即可获取更全面的关于 Arm 虚拟硬件产品的最新资讯和技术指南博客。
2. 订阅使用 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例
- (可选地)注册百度智能云账号并完成个人实名验证。
- 订阅指定的使用 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例。
- 登录所购买的云服务器 BCC 实例并熟悉 Arm 虚拟硬件镜像环境。
3. 完成实验项目的开发与测试
- 克隆本实验项目代码到 BCC 实例中。
- 安装本实验项目所依赖的 CMSIS Packs 软件包。
- 编译构建本实验项目的应用程序,生成相应的可执行文件。
- 使用 Arm 虚拟硬件镜像中的 Cortex-M55 的虚拟硬件 FVP 模型执行所构建的心电疾病分类应用。
4. 验证实验运行结果
- 应用程序代码运行过程中,查看实验结果与预期结果是否一致。
四、实验前准备
本章节将重点介绍如何订阅使用 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例。这一步骤是我们后续进行实验项目开发和测试的必要准备,为我们后续实验项目的体验提供了基础的开发环境和工具。
1. 订阅使用 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例
Arm 虚拟硬件镜像目前已经在百度智能云云市场上线,具体的订阅步骤可以参考如下。
1.1 百度智能云账号准备
若您已经拥有百度智能云的账号并完成了个人实名验证可忽略部分步骤并直接登录百度智能云平台即可。可选步骤仅面向从未使用过百度智能云的新用户或拥有百度智能云账号(云账号或百度账号)却未完成实名制认证的用户。
1.1.1(可选)注册百度智能云账号
访问百度智能云登录/注册页面注册【云账号】(可选地,也可注册和使用【百度账号】登录)。具体注册流程请根据百度智能云账户注册页面的提示操作并完成注册即可。
1.1.2 登录百度智能云平台
访问百度智能云平台登录页面,根据所注册的账号类型输入相应的账号和密码登录(推荐使用【云账号】,【云账号】的登录示意图如下图所示)。
图2. 百度智能云平台登录界面
1.1.3 完成实名认证(个人用户)
成功登录后,点击用户头像(位于页面右上角)会自动跳转至【用户中心】界面(或手动选择下拉菜单中的【用户中心】按钮进行跳转)。【用户中心】页面,请参考图 3-6 中的步骤完成个人实名认证(可选地,若为企业用户也可进行企业认证)。
图3. 实名认证入口
图4. 选择实名认证方式
图5. 信息录入并完成实名认证
图6. 认证成功提示
请根据自身是否为新用户的情况,二选一完成 1.2 章节。若未购买过百度智能云的任何一款云服务器产品,包括:从未注册过百度智能云账号的用户、以及已注册过百度智能云账号但未有发生过购买行为的用户,即为新用户,可享受优惠购买价格。
1.2 (新用户)购买使用 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例
访问百度智能云云服务器新品推荐页面。如下图所示,即为我们需要配置购买的百度智能云云服务器 BCC 实例。
图6. 认证成功提示
点击【立即购买】按钮,将会自动跳转至如下图所示的订单购买页面。请注意页面底端的【地域】和【云市场镜像】两个选项以及右上角的订单金额。
- 【地域】:仅可选择【广州】(推荐)、【北京】、【苏州】此 3 个地域中任意一个。
- 【云市场镜像】:确保其为 Arm 虚拟硬件(Arm Virtual Hardware,AVH)。
- 【订单金额】:由于云服务器 BCC 实例的基础设施配置默认且相同,因此订单价格应与图示价格应一致。
图8. 确认订单明细及价格
点击【下一步】后,将会自动跳转至如下图所示的订单确认页面。请再次核对此页面所示的云服务器 BCC 实例的各个配置选项以及订单价格。
图9. 订单确认页面
点击【去支付】后,将会跳转至如下图所示的订单支付页面。可根据自己的情况选择支付方式并完成支付。支付完成后,将会显示实例开通成功的提示。开通成功后,即可根据 1.3 章节中的内容进行后续的操作。
图10. 订单支付页面
图11. 实例开通成功提示
1.2 (非新用户)购买使用 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例
1.2.1 订阅百度智能云云市场 Arm 虚拟硬件镜像
访问百度智能云云市场主页,产品搜索框输入 “Arm虚拟硬件” 即可进入 Arm 虚拟硬件产品详情页面(也可直接点击链接跳转)。
图12. 百度智能云云市场 Arm 虚拟硬件产品简介
请仔细阅读产品详情页面的产品信息以及相关服务协议(例如:《商品服务协议》和《云市场服务协议》),确认无误后勾选【同意】框并点击【立即购买】并进入到百度智能云云服务器 BCC 实例购买配置页面。
图13. Arm 虚拟硬件产品订阅页面
1.2.2 配置购买百度智能云云服务器 BCC 实例
百度智能云云服务器 BCC 实例的配置与购买示意图如下所示,请仔细阅读下文中配置步骤 a-f 中的注意事项。
图14. 百度智能云云服务器 BCC 实例配置页面
a. 基本配置
-
付费及地域
- 【计费方式】默认为“包年包月”方式,请勿更改。目前【云市场镜像】仅支持“包年包月”模式,若调整为其他模式会导致无法订阅使用云市场的 Arm 虚拟硬件镜像服务。
- 【当前地域】可选择“华北-北京”、“华南-广州”以及“华东-苏州”(可参考图 15 中选择当前地域为 “华南-广州”)。请勿选择除上述 3 个选项之外的地域。具体原因为:目前百度智能云云市场上线发布的 Arm 虚拟硬件镜像仅可运行于采用 Arm 架构的服务器实例上,仅在上述 3 个地区有提供。
图15. 付费及地域配置参考示意图
-
配置
- 【实例配置】中【架构】请选择 “ARM计算”(原因如前文所述)。
- 【实例规格】可参考图 16 中选择 “bcc.gr1.c1m4”(即 1 核、4GB 内存)。
- 【镜像类型】请选择【云市场镜像】中的 “Arm虚拟硬件(Arm Virtual Hardware)”。请注意:
- 若从云市场 Arm 虚拟硬件产品详情页进入,此项默认会自动匹配,无需手动配置。
- 若从云服务器 BCC 实例创建入口直接进入,请手动搜索选择【云市场镜像】中的 “Arm 虚拟硬件(Arm Virtual Hardware)”。
图16. 实例配置参考示意图
图17. 镜像类型参考示意图
图18. (可选)手动选择镜像类型操作示意图
-
存储
- 【系统盘】类型及是否添加额外存储盘会影响实例价格。参考下图,存储配置【系统盘】可选择 “通用型SSD、40GB”,以及不添加其他存储盘。此项无特殊要求,可根据用户所实际开发项目的工作负荷大小进行配置。
图19. 存储配置参考示意图
- 【系统盘】类型及是否添加额外存储盘会影响实例价格。参考下图,存储配置【系统盘】可选择 “通用型SSD、40GB”,以及不添加其他存储盘。此项无特殊要求,可根据用户所实际开发项目的工作负荷大小进行配置。
b. 网络和带宽
-
网络
- 【私有网络】保持默认配置即可(【网络类型】和【安全组】不进行改动)。
- 【公网访问】保持默认配置即可(【公网带宽】的不同配置模式会造成购买实例时较大的价格差异。参考下图,本实验中推荐保持默认即可,即:【公网带宽】采用 “包年包月计算” 模式并且【带宽峰值】为 “1Mbps”)。
图20. 网络配置参考示意图
c. 登录凭证
-
登录凭证
- 如下图所示,请选择 【创建后设置】。
- 初始登录用户名为 “ubuntu",密码统一为 “avh”。首次登录后请注意及时更改密码为自定义的密码,确保所使用镜像的安全性。受镜像内工具组件的许可证约束,目前仅支持使用 “ubuntu” 作为用户名进行登录和后续开发,请勿使用其他(例如:root)。
图21. 登录凭证配置参考示意图
d. 购买信息
参考下图,保持默认配置即可。可选地,根据自己的需求进行【购买数量】和【购买时长】的自定义选择。
图22. 购买信息配置参考示意图
e. 其他配置
保持默认即可,或可选地参考以下说明进行自定义配置。
-
【部署集】、【标签】、【资源分组】建议保持默认配置。
-
【系统信息】中【实例名称】和【主机名】可保持空白(即由系统随机生成)。
- (特别地,用于本次创造营活动报销)创建实例的过程中将【实例名称】和【主机名】定义为 “arm-用户的百度智能云 ID ” 的格式(如何找到用户自己的百度智能云 ID 请参考图 29 所示)。
- (特别地,用于本次创造营活动报销)可选地,在实例创建完成后进行修改,参考后续步骤中的提示。
图23. 其他配置参考示意图
f. 确认订单
- 订单确认
配置完成后,点击下方蓝色的【确认购买】按钮即可进入订单确认页面。该页面可再次确认所购买的云服务器 BCC 实例的各项信息(主要包括:BCC、系统盘、EIP、MKT、快照链容量以及代金劵选择等方面)。- 请注意,创建实例过程中不同的配置选项会造成价格差异。本实验中的参考配置下的实例价格如下图所示。阅读并勾选同意对应条款后点击页面底部的蓝色【提交订单】按钮即可跳转至订单支付页面。
图24. 订单确认页面参考示意图
- 订单支付
订单支付界面可再次查看和确认所订购的云产品服务及其价格,确认无误后可选择支付方式。目前可选的支付方式包括:【账户余额支付】、【支付宝支付】、【微信支付】或其他支持的支付方式。确认无误后,点击页面底部的蓝色【确认支付】按钮即可完成支付。
图25. 订单支付页面参考示意图
- 实例开通
支付完成后,请耐心等待实例开通过程。当页面提示如下图所示,即表示实例已经成功开通。
图26. 实例开通成功提示
1.3 查看已购买的使用 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例
1.3.1 查看实例列表
实例创建完成后,可以点击图 26 中的【管理控制台】按钮直接跳转到实例列表页面。需要注意的是,请确保跳转后页面上方【控制台总览】旁的地区和在 1.2 节中创建实例时所配置的 【当前地域】 一致,否则可能出现实例不存在或不显示的情况。若不一致,请手动切换为创建实例时所配置的地域(例如,图 15 中所选择的为“华南-广州”,此处选择同为“华南-广州”)。
若确保一致仍未显示,请耐心等待 1-2 分钟,实例可能仍处于创建和初始化过程中。
图27. 实例列表详情页面
1.3.2 查看实例详情
实例列表页面,点击蓝色的实例名称即可跳转至实例详情页面。此页面可以再次查看所创建实例的详细信息,并请重点关注以下几个关键信息:
图28. 实例详情页面
-
实例名称和主机名
如 1.2 章节中所描述,若在创建实例的过程中未自定义实例名称和主机名(即保持空白),则此两项信息将由系统随机生成。为便于活动报销,请参考下面图所示的步骤将其修改为 “arm-用户的百度智能云账户ID” 的格式。若已经在创建实例的过程中完成了规定格式的自定义,请忽略下面的步骤。- a. 请访问【用户中心】页面获取自己的百度智能云账户ID。
图29. 获取百度智能云账户ID
- b. 图 28 所示的实例详情页面点击【实例名称】旁的【修改】按钮修改实例名称并点击【确认】完成修改。
图30. 修改实例名称
图31. 修改格式示意图
- c. 图 28 所示的实例详情页面点击【主机名】称旁的【修改】按钮修改主机名并点击【确认】完成修改。
图32. 修改主机名
图33. 修改格式示意图
- d. 主机名修改后,实例将会自动重启。请耐心等待实例完成自动重启。重启完成后,实例【状态】将会由 “重启中” 变化为 “运行中”。
图34. 实例重启中示意图
图35. 实例重启完成示意图
-
状态:确认实例状态处于 “运行中”。
-
公网 IP:用于 SSH(Secure Shell Protocol)等远程登录操作。
-
实例规格:确认是否与订阅时选择的一致,参考示例中为 bcc.gr1.c1m4。
-
镜像信息和镜像类型:确认是否与订阅时选择的一致,即 Arm虚拟硬件(Arm Virtual Hardware)(试用版) 和云市场镜像。
2. 登录使用 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例
百度智能云云服务器 BCC 实例提供了多种方式供开发者连接登录。如需深入了解,请参考百度智能云云平台帮助文档《登录 Linux 实例》。
强烈推荐有基础的开发者使用 SSH 远程登录方法连接所创建的使用 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例(例如,终端使用命令 ssh ubuntu@公网 IP
,密码为avh
),具体连接方法可参考博客《 Arm 虚拟硬件实践专题一:产品订阅指南(百度智能云版)》,开发体验会更加稳定和流畅。可选地,可参考 2.1 章节所描述的 《浏览器窗口通过 VNC 登录》的方式连接实例。
2.1 浏览器窗口登录(通过 VNC 登录)
本小节将介绍一种更为简单的百度智能云云服务器 BCC 实例的登录方式供开发者参考和使用。如下图所示,点击实例列表详情页面所创建的使用 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例(确保实例【状态】为 “运行中” )右侧蓝色的【远程登录】按钮。弹出的窗口选项选择【通过 VNC 登录】,点击后页面即刻跳转至浏览器窗口登录页面如图 38 所示。完全启动后(即不再有新的启动日志滚动),输入登录用户名ubuntu
和登录密码avh
( Linux 命令行默认不显示密码)。
图36. 实例列表详情页面【远程登录】选项
图37. 【远程登录】方式选择页面
图38. 浏览器窗口 VNC 登录页面
登录过程中,正确地输入用户名和密码后,页面将会弹出和最终用户许可协议相关的提示信息。请您仔细阅读该提示中提及的网页链接中所展示的EULA文件,确认无误后请输入Y/yes/YES
等表示您确认同意遵守相应的最终用户许可协议。输入后按下回车,用户即可成功连接登录到所创建的使用 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例中。如图所示,当页面信息提示ubuntu@arm-百度智能云ID:~$
等信息则代表您已经成功地作为ubuntu
的用户身份登录到实例中(请确保用户名ubuntu
正确,非root
或其他自定义的用户名)。
图39. 登录过程提示
(可选)登录后可在该页面手动输入 ls
命令可查看当前目录下的文件列表。
图40. 查看当前登录目录下文件列表
另外,请重点了解下面的 2 个小贴士,熟悉如何通过浏览器 VNC 登录页面完成实例的重启操作或输入/复制粘贴已有的命令(利于后续项目代码的输入)。
- 重启实例:如下图所示,实验过程中若需要重启实例,请点击页面右上角的【发送Ctrl+Alt+Del】按钮。实例将立刻重启,重启完成后根据与上面步骤同样的方法输入登录账户名
ubuntu
和密码avh
再次登录即可。
图41. 快捷重启实例
- 输入命令/复制粘贴命令:由于网页直接输入代码或存在不稳定因素,若需稳定的输入命令或直接复制/粘贴已有的命令,请参考以下操作进行。点击页面右上角的【复制命令输入】按钮,输入已经复制的命令内容或手动输入相关命令后点击蓝色的【确认】按钮即可回到命令行输入页面。此处可以发现,所输入/复制粘贴的命令已经填充至命令行处,点击键盘上的回车按钮即可执行命令。
图42. 输入/复制粘贴命令方法示意图
图43. 执行已输入的命令
2.2 查看 Arm 虚拟硬件镜像预装软件清单
目前,Arm 虚拟硬件镜像预装的 Arm 相关软件工具清单可以通过以下两种方式查看:
- 云市场 Arm 虚拟硬件产品详情页的规格参数介绍中的 “集成服务组件及版本” 信息。
- 登录使用 Arm虚拟硬件镜像的百度智能云云服务器 BCC 实例后(默认登录目录为
/home/ubuntu
),运行以下命令将自动显示当前版本的 Arm 虚拟硬件镜像安装的 Arm 软件工具清单及其版本信息。同时,运行该命令后,当前目录下(/home/ubuntu
)会自动生成文本文件tool-inventory.txt
记录了所显示的工具清单和版本信息。
参考执行命令如下(该命令实则执行了位于 /home/ubuntu
目录下的 tool-inventory.sh
脚本文件):
./tool-inventory.sh
可参考的输出结果如下所示:
Arm Compiler information:
Product:
Component: Arm Compiler for Embedded 6.18
Tool: armclang [5e4cbf00]
Target: arm-arm-none-eabi
GNU Compiler information:
arm-none-eabi-gcc (GNU Toolchain for the Arm Architecture 11.2-2022.02 (arm-11.16)) 11.2.1 20220111
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
CMSIS build information:
cbuild: Build Invocation 1.2.0 (C) 2022 ARM
Usage:
cbuild <project.cprj> [flags]
Flags:
-c, --clean Remove intermediate and output directories
-d, --debug Enable debug messages
-g, --generator string Select build system generator (default "Ninja")
-h, --help Print usage
-i, --intdir string Set directory for intermediate files
-j, --jobs int Number of job slots for parallel execution
-l, --log string Save output messages in a log file
-o, --outdir string Set directory for output files
-p, --packs Download missing software packs with cpackget
-q, --quiet Suppress output messages except build invocations
-r, --rebuild Remove intermediate and output directories and rebuild
-s, --schema Check *.cprj file against CPRJ.xsd schema
-t, --target string Optional CMake target name
-u, --update string Generate *.cprj file for reproducing current build
-v, --version Print version
Arm Virtual Hardware Targets information:
FVP_Corstone_SSE-300 information:
Fast Models [11.22.38 (Oct 27 2023)]
Copyright 2000-2023 ARM Limited.
All Rights Reserved.
Info: /OSCI/SystemC: Simulation stopped by user.
FVP_Corstone_SSE-300_Ethos-U55 information:
Fast Models [11.22.38 (Oct 27 2023)]
Copyright 2000-2023 ARM Limited.
All Rights Reserved.
Info: /OSCI/SystemC: Simulation stopped by user.
FVP_Corstone_SSE-300_Ethos-U65 information:
Fast Models [11.22.38 (Oct 27 2023)]
Copyright 2000-2023 ARM Limited.
All Rights Reserved.
Info: /OSCI/SystemC: Simulation stopped by user.
FVP_Corstone_SSE-310 information:
Fast Models [11.22.38 (Oct 27 2023)]
Copyright 2000-2023 ARM Limited.
All Rights Reserved.
Info: /OSCI/SystemC: Simulation stopped by user.
FVP_Corstone_SSE-310_Ethos-U65 information:
Fast Models [11.22.38 (Oct 27 2023)]
Copyright 2000-2023 ARM Limited.
All Rights Reserved.
Info: /OSCI/SystemC: Simulation stopped by user.
FVP_MPS2_Cortex-M0 information:
Fast Models [11.22.38 (Oct 27 2023)]
Copyright 2000-2023 ARM Limited.
All Rights Reserved.
Info: /OSCI/SystemC: Simulation stopped by user.
FVP_MPS2_Cortex-M0plus information:
Fast Models [11.22.38 (Oct 27 2023)]
Copyright 2000-2023 ARM Limited.
All Rights Reserved.
Info: /OSCI/SystemC: Simulation stopped by user.
FVP_MPS2_Cortex-M23 information:
Fast Models [11.22.38 (Oct 27 2023)]
Copyright 2000-2023 ARM Limited.
All Rights Reserved.
Info: /OSCI/SystemC: Simulation stopped by user.
FVP_MPS2_Cortex-M3 information:
Fast Models [11.22.38 (Oct 27 2023)]
Copyright 2000-2023 ARM Limited.
All Rights Reserved.
Info: /OSCI/SystemC: Simulation stopped by user.
FVP_MPS2_Cortex-M33 information:
Fast Models [11.22.38 (Oct 27 2023)]
Copyright 2000-2023 ARM Limited.
All Rights Reserved.
Info: /OSCI/SystemC: Simulation stopped by user.
FVP_MPS2_Cortex-M35P information:
Fast Models [11.22.38 (Oct 27 2023)]
Copyright 2000-2023 ARM Limited.
All Rights Reserved.
Info: /OSCI/SystemC: Simulation stopped by user.
FVP_MPS2_Cortex-M4 information:
Fast Models [11.22.38 (Oct 27 2023)]
Copyright 2000-2023 ARM Limited.
All Rights Reserved.
Info: /OSCI/SystemC: Simulation stopped by user.
FVP_MPS2_Cortex-M55 information:
Fast Models [11.22.38 (Oct 27 2023)]
Copyright 2000-2023 ARM Limited.
All Rights Reserved.
Info: /OSCI/SystemC: Simulation stopped by user.
FVP_MPS2_Cortex-M55_ADA information:
Fast Models [11.22.38 (Oct 27 2023)]
Copyright 2000-2023 ARM Limited.
All Rights Reserved.
Info: /OSCI/SystemC: Simulation stopped by user.
FVP_MPS2_Cortex-M7 information:
Fast Models [11.22.38 (Oct 27 2023)]
Copyright 2000-2023 ARM Limited.
All Rights Reserved.
Info: /OSCI/SystemC: Simulation stopped by user.
FVP_MPS2_Cortex-M85 information:
Fast Models [11.22.38 (Oct 27 2023)]
Copyright 2000-2023 ARM Limited.
All Rights Reserved.
Info: /OSCI/SystemC: Simulation stopped by user.
特别地,请注意查看以下两项核心组件的相关信息:
-
Arm Compiler for Embedded 工具许可证有效期
请注意,若运行tool-inventory.sh
显示组件信息的过程中(注意起始的几行信息),出现下面所示的错误提示信息(红色error
报错),请运行armlm inspect
命令检查 Arm Compiler for Embedded 工具的许可证有效期。若有效期信息显示正常(即在有效期时间内),则可忽略并继续进行后续步骤。Arm Compiler information: error: Your cached license information has expired and could not be refreshed error: Check your network connection and restart armclang error: https://lm.arm.com/200 Product: Component: Arm Compiler for Embedded 6.18 Tool: armclang [5e4cbf00]
可参考的工具许可证有效期提示信息如下,当前日期在工具许可证有效期限内,故表明该许可证有效期正常。
ubuntu@ip:~$ armlm inspect Keil MDK Community (non-commercial free of charge) Product code: KEMDK-COM0 Order Id: Community License valid until: 2033-05-31 Local cache expires: 6 days and 23 hours
若有效期提示信息异常(如下所示),请尝试重新启动实例(手动关机重启或参考图 41 所示快捷方式)再次运行
armlm inspect
命令检查 Arm Compiler for Embedded 工具的许可证有效期。若多次尝试仍然异常,请参考本手册第七章《实验问题解答》中的问题 2。ubuntu@ip:~$ armlm inspect Keil MDK Community (non-commercial free of charge) Product code: KEMDK-COM0 Order Id: Community Local cache expired on: 2024-03-28
-
Arm 固定虚拟平台(Fixed Virtual Platform,FVP)模型
Arm 固定虚拟平台 FVP 模型为软件开发人员提供了基于 Arm 架构的 SoC 的准确模型。若想查看当前镜像内所支持的 Arm FVP 模型的清单,请运行ls /opt/VHT/bin/FVP_*
命令。ubuntu@ip:~$ ls /opt/VHT/bin/FVP_* /opt/VHT/bin/FVP_Corstone_SSE-300 /opt/VHT/bin/FVP_MPS2_Cortex-M3 /opt/VHT/bin/FVP_Corstone_SSE-300_Ethos-U55 /opt/VHT/bin/FVP_MPS2_Cortex-M33 /opt/VHT/bin/FVP_Corstone_SSE-300_Ethos-U65 /opt/VHT/bin/FVP_MPS2_Cortex-M35P /opt/VHT/bin/FVP_Corstone_SSE-310 /opt/VHT/bin/FVP_MPS2_Cortex-M4 /opt/VHT/bin/FVP_Corstone_SSE-310_Ethos-U65 /opt/VHT/bin/FVP_MPS2_Cortex-M55 /opt/VHT/bin/FVP_MPS2_Cortex-M0 /opt/VHT/bin/FVP_MPS2_Cortex-M55_ADA /opt/VHT/bin/FVP_MPS2_Cortex-M0plus /opt/VHT/bin/FVP_MPS2_Cortex-M7 /opt/VHT/bin/FVP_MPS2_Cortex-M23 /opt/VHT/bin/FVP_MPS2_Cortex-M85
五、实验步骤指导
通过实验步骤四,我们已经成功地创建并登录了使用 Arm 虚拟硬件镜像的百度智能云云服务器 BCC 实例。本章节我们将通过一个具体的应用案例,带领大家更深入地体验如何使用 Arm 虚拟硬件镜像环境进行嵌入式软件开发的全流程。
1. 克隆实验代码
首先我们需要将实验代码克隆(下载)至 BCC 服务器实例中,便于后续使用 Arm 虚拟硬件镜像环境中的软件开发工具进行进一步的开发调试。
本实验代码的仓库地址为:https://github.com/codehgq/ECG_classification_AVH.git 。通过以下命令可以将代码仓库中的代码克隆下载至服务器中。
mkdir ECG_classification
cd ECG_classification
git clone https://github.com/codehgq/ECG_classification_AVH.git
若下载速度较慢或下载不成功,可考虑在 ECG_classification
目录下使用以下代码下载。
git clone https://github.moeyy.xyz/https://github.com/codehgq/ECG_classification_AVH.git
代码克隆(下载)完成后,参考如下命令查看已克隆的实验工程目录(示例如下)。
ubuntu@heda3:~$ cd ECG_classification
ubuntu@heda3:~/ECG_classification$ ls
ECG_classification+PaddleClasM55.cbuild.yml ECG_classification.cbuild-pack.yml RTE packs.txt
ECG_classification+PaddleClasM55.cprj ECG_classification.cproject.yml convert_ECGData.py rename_onnx_model.py
ECG_classification+PaddleClasM55.uvprojx ECG_classification.csolution.yml convert_labels.py save
ECG_classification+PaddleClasM85.cbuild.yml ECG_classification.uvoptx data trainData
ECG_classification+PaddleClasM85.cprj ECG_classification.uvprojx include vcpkg-configuration.json
ECG_classification.cbuild-idx.yml README.md main.c sct
1.1 了解实验项目技术栈
通过上述步骤,我们已经成功地将实验项目代码克隆(下载)到了 BCC 服务器实例中。在正式地进行实验项目体验之前,我们首先需要了解本实验项目的一些技术原理和相应的工程代码实现,便于我们更好地理解整个实验项目。本实验的心电疾病分类算法的流程示意图如下所示。
图44. 软件算法流程图
- 从流程图中可以看出,完成心电疾病分类的过程,需经过:心电数据的读取加载、数据点预处理(1x3600维数)、数据的标准化、CNN模型推理、输出预测的1x7维度的概率矩阵等步骤。
- 同时,我们将采用两种不同的编译方式对训练好的推理模型进行编译使其可以运行在 Cortex-M55 处理器上,并使用 Arm 虚拟硬件镜像中 Cortex-M55 处理器的虚拟硬件 FVP 模型验证这两种不同的编译方式是否会对应用最后的推理结果造成影响。
在了解该心电疾病分类算法的功能和主要步骤的基础上,进一步地,请开发者仔细阅读实验项目的帮助文档 README.md(在实验项目根目录下),有助于更深入理解本实验项目的工程代码实现。
图45. 帮助文档
1.2 更新 CMSIS Toolbox 工具
完成实验代码的克隆(下载)后,因为本项目搭建所使用的 CMSIS Toolbox 工具版本与 Arm 虚拟硬件镜像中内置的工具版本不同,因此开发者可以考虑手动地将 CMSIS Toolbox 工具进行升级。参考以下命令进行工具的更新。GitHub 资源下载速度受限,请耐心等待下载完成。
wget "https://github.com/Open-CMSIS-Pack/cmsis-toolbox/releases/download/2.2.1/cmsis-toolbox-linux-arm64.tar.gz"
tar -vxf cmsis-toolbox-linux-arm64.tar.gz
rm cmsis-toolbox-linux-arm64.tar.gz
sudo rm -rf /opt/ctools/
sudo mv cmsis-toolbox-linux-arm64/ /opt/ctools
1.3 安装项目依赖的 CMSIS Packs 软件包
在构建应用之前,我们仍需要手动安装一些实验项目所依赖的软件包。本项目的开发采用了 Open-CMSIS-Pack 项目的标准形式,我们可以使用 Arm 虚拟硬件镜像中的 CMSIS-Toolbox 工具包里的 cbuild 工具来构建本实验项目。需要注意的是,正常情况下,运行 cbuild
命令在构建工程的过程中会自动下载项目所依赖的 CMSIS Packs 软件包。但由于国内外网络环境的差异,部分 CMSIS Packs 软件包资源的下载速度较慢导致无法自动下载成功。本文提供以下几种方式安装所需要的 CMSIS Packs 软件包。
小贴士,若查看当前工程所需要安装或缺失的 CMSIS Packs 软件包可以使用 csolution 工具。例如,输入以下命令可以查看当前项目所需要的 CMSIS Packs 软件包。-m
参数指定列举未安装的软件包,当前项目缺失 6 个相关软件包。因此我们需要将它们安装上后,才可以进行项目应用的构建。
ubuntu@ip:~/ECG_classification/ECG_classification_AVH$ csolution list packs ECG_classification.csolution.yml -m
ARM::CMSIS@5.9.0
ARM::CMSIS-DSP@1.15.0
ARM::CMSIS-NN@4.1.0
ARM::V2M_MPS3_SSE_300_BSP@1.4.0
ARM::V2M_MPS3_SSE_310_BSP@1.3.0
Keil::ARM_Compiler@1.7.2
-
方法一:通过 CMSIS Packs 软件包下载网址逐个手动下载,并上传至所创建的 Arm 虚拟硬件镜像中。例如:使用
scp -r ARM.CMSIS.5.9.0.pack ubuntu@ip:/home/ubuntu
命令将该软件包从主机上上传至云端的 Arm 虚拟硬件镜像中的目录/home/ubuntu
下面。然后切换至该目录下后使用cpackget add ARM.CMSIS.5.9.0.pack
命令完成安装。一个简单的安装示例如下所示:ubuntu@instance-9w8dognp:~$ cpackget add ARM.CMSIS.5.9.0.pack I: Adding pack "ARM.CMSIS.5.9.0.pack" I: Extracting files to /home/ubuntu/packs/ARM/CMSIS/5.9.0... I: 100% |████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| (8642/8642, 8219 it/s)
参考下面命令逐个将缺失的软件包安装完毕(需先将相应的 CMSIS Pack 软件包提前下载并上传至所创建的 Arm 虚拟硬件镜像中)。
cpackget add ARM.CMSIS.5.9.0.pack cpackget add ARM::CMSIS-DSP@1.15.0 cpackget add ARM::CMSIS-NN@4.1.0 cpackget add ARM::V2M_MPS3_SSE_300_BSP@1.4.0 cpackget add ARM::V2M_MPS3_SSE_310_BSP@1.3.0 cpackget add Keil::ARM_Compiler@1.7.2
-
方法二:使用其他博主提供的 CMSIS Pack 软件包的压缩包集合,可以参考以下命令在服务器中下载和安装相应的软件包。可选地,也可以本地主机下载,然后上传至相应的服务器对应位置中解压,完成相应 CMSIS Pack 软件包的安装。
wget https://Arm-workshop.bj.bcebos.com/packs.tar.bz2 sudo tar -xvjf packs.tar.bz2
1.4 安装项目依赖的环境和 Python 软件包
参考以下命令完成项目依赖的 Python 软件包的安装。若遇到因网速较慢导致下载失败的情况,可多次运行相应的命令进行下载操作直至成功安装。
echo 'export PATH=/home/ubuntu/.local/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
sudo apt install libhdf5-dev
pip install --upgrade pip
pip install opencv-python
pip install apache-tvm
pip install paddle2onnx
pip install onnx
pip install paddlepaddle==2.5.2
pip install scikit-learn
pip install tensorflow -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install tf2onnx
pip install pyserial==3.5 tflite=-2.1
2. 数据预处理
2.1 测试数据预处理
运行以下脚本处理心电图数据。具体处理过程请参考实验脚本 convert_ECGData.py。
python ./convert_ECGData.py ./data/TestX_eu_MLIII.csv
2.2 数据标签预处理
运行以下脚本处理心电图数据的标签。具体处理过程请参考实验脚本 convert_labels.py。
python convert_labels.py data/TestY_eu_MLIII.csv
3. 模型编译和部署
所使用的 TensorFlow 模型位于代码仓库的 save/CNN
目录下。本小节我们将使用两种方式将该模型编译成可以在目标 Cortex-M55 平台上运行的代码并在后序章节中比较不同编译方式部署效果的差异。
3.1 TensorFlow -> ONNX -> TVM 编译 -> Cortex-M55
-
模型转换
通过以下命令可以将 TensorFlow 模型转换成 ONNX 模型格式。转换完成之后,我们可以在目录 onnx 下发现转换完毕的 ONNX 格式的模型文件cnn_model.onnx
。感兴趣的同学可以使用 netron 工具查看该模型的结构信息。python -m tf2onnx.convert --saved-model save/CNN --output onnx/cnn_model.onnx
-
模型编译
转换完成后,使用下面的命令借助开源的深度学习编译器 TVM 将 ONNX 模型编译成为可以在 Cortex-M55 处理器上运行的代码,并将生成的代码进行解压。TVM_TARGET="cortex-m55" tvmc compile onnx/cnn_model.onnx \ --target=cmsis-nn,c \ --target-cmsis-nn-mcpu=$TVM_TARGET \ --target-c-mcpu=$TVM_TARGET \ --runtime=crt \ --executor=aot \ --executor-aot-interface-api=c \ --executor-aot-unpacked-api=1 \ --pass-config tir.usmp.enable=1 \ --pass-config tir.usmp.algorithm=hill_climb \ --pass-config tir.disable_storage_rewrite=1 \ --pass-config tir.disable_vectorize=1 \ --output-format=mlf \ --model-format=onnx \ --input-shapes input_1:[1,3600] \ --module-name=cls \ --output=cls.tar mkdir cls tar -xvf cls.tar -C ./cls
-
模型部署
模型只是机器学习应用的一部分,接下来我们将编译该心电图分类应用。运行下面两个命令的任一个均可以构建工程。
cbuild ECG_classification+PaddleClasM55.cprj # 可选 # cbuild ECG_classification.csolution.yml
当日志提示
info cbuild: build finished successfully!
即表明该应用已经成功构建,即可调用含有 Cortex-M55 的 FVP 模型平台执行应用查看运行结果。可参考使用如下命令以及运行效果的示意图。FVP_Corstone_SSE-300 -C cpu0.CFGDTCMSZ=15 -C cpu0.CFGITCMSZ=15 -C mps3_board.uart0.out_file=\"-\" -C mps3_board.uart0.shutdown_tag=\"EXITTHESIM\" -C mps3_board.visualisation.disable-visualisation=1 -C mps3_board.telnetterminal0.start_telnet=0 -C mps3_board.telnetterminal1.start_telnet=0 -C mps3_board.telnetterminal2.start_telnet=0 -C mps3_board.telnetterminal5.start_telnet=0 /home/ubuntu/ECG_classification_AVH/out/ECG_classification/PaddleClasM55/ECG_classification.axf --stat
其中,
FVP_Corstone_SSE-300
即为所使用的含有 Cortex-M55 处理器平台的 FVP 模型。ECG_classification.axf
为所构建的应用的可执行文件。--stat
指定打印运行信息。-C
指定 FVP 模型运行的具体参数。
图46. 运行效果示意图
3.2 TensorFlow -> TFLite -> TVM 编译 -> Cortex-M55
-
模型转换
通过以下命令可以将 TensorFlow 模型转换成 tflite 模型格式。转换完成之后,我们可以在目录 tfl 下发现转换完毕的 tflite 格式的模型文件ecgcls.tflite
。感兴趣的同学可以使用 netron 工具查看该模型的结构信息。mkdir tfl tflite_convert \ --saved_model_dir=/home/ubuntu/ECG_classification_AVH/save/CNN\ --output_file=/home/ubuntu/ECG_classification_AVH/tfl/ecgcls.tflite
-
模型编译
转换完成后,使用下面的命令借助开源的深度学习编译器 TVM 将 tflite 模型编译成为可以在 Cortex-M55 处理器上运行的代码,并将生成的代码进行解压。TVM_TARGET="cortex-m55" tvmc compile tfl/ecgcls.tflite \ --target=cmsis-nn,c \ --target-cmsis-nn-mcpu=$TVM_TARGET \ --target-c-mcpu=$TVM_TARGET \ --runtime=crt \ --executor=aot \ --executor-aot-interface-api=c \ --executor-aot-unpacked-api=1 \ --pass-config tir.usmp.enable=1 \ --pass-config tir.usmp.algorithm=hill_climb \ --pass-config tir.disable_storage_rewrite=1 \ --pass-config tir.disable_vectorize=1 \ --output-format=mlf \ --model-format=tflite \ --input-shapes serving_default_input_1:[1,3600] \ --module-name=cls \ --output=cls.tar mkdir cls tar -xvf cls.tar -C ./cls
-
模型部署
与前文类似,此处我们进行模型的部署和效果的验证。但是需要注意的是,因为节点的名称发生了改变,因此我们需要手动的修改 main.c 文件中相应输入节点的名称。如下图所示,需要将 main.c 中输入和输出名称修改如下图所示。
图47. main.c 修改示意图
运行结果示意图如下
图48. 运行效果示意图
六、实验思考
两种不同的模型编译方式运行的结果也有一定的差异,由运行结果图可知,TensorFlow 模型通过转换为 tflite 模型再经由 TVM 编译部署到 MCU 上运行效果更优。同时,也可以看出 Arm 虚拟硬件对于我们早期验证和比较算法的运行效果提供了一定的帮助优势。通过 Arm 虚拟硬件平台进行软件程序的验证是一个很好的选择,未来可以进一步尝试其它的虚拟硬件的部署。
七、参考文档
[1]. Arm 虚拟硬件产品简介
[2]. Arm 虚拟硬件帮助文档
[3]. Arm 虚拟硬件开发者资源
[4]. 【中文技术指南】Arm 虚拟硬件实践专题一:产品订阅指南(百度智能云版)
[5]. 【中文技术指南】Arm 虚拟硬件实践专题二:Arm 虚拟硬件 FVP 模型入门指南
[6]. 【中文视频直播课】加速AI开发,1小时快速入门Arm虚拟硬件
[7]. Arm 与 Paddle 共创模型库
[8]. TVM 社区 Arm 贡献案例
[9]. Arm 社区微信公众号