https://blog.tensorflowcn.cn/2022/10/integrating-arm-virtual-hardware-with-tensorflow-lite-micro-continuous-integration-infrastructure.html
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglEEkfOwhq-pl53rVdcsChMuUF5laWHPqrBqSkZX5XEJF8zUwyn6lH_TDrr_L7mZRwC7T9f6BUuD3kTD4fTXSxI5Gbyi4TLG2HJH9PsaSEtx57yes15-iZzCAycjOM1sERg7kNb-95YLsRRRpe0ZYBAqKI9D6Ruh1ZGw51a8S0QxyJd4Ns1P8EIELh/s1600/Tensorflow-ARM-virtual-hardware-02.png
Arm 的 Matthias Hertel 和 Annie Tallund 的客座文章
微控制器为我们周围的世界提供动力。它们具有低内存资源和对能效的高要求。同时,预计它们将实时执行高级机器学习干扰。在嵌入式空间,无数工程师正在努力解决这一挑战。功能强大的基于 Arm Cortex-M 的微控制器是一个专用平台,针对运行节能 ML 进行了优化。Arm 和 TensorFlow Lite Micro (TFLM) 团队有着长期的合作关系,旨在实现 在各种 Arm 微控制器上优化 ML 模型的推理。
此外,凭借 CMSIS-Pack 等成熟技术,TFLM 库已准备好运行在 10000 多个不同的 Cortex-M 微控制器设备 上,几乎无需集成工作。将这两者结合起来提供了多种平台和配置。在本文中,我们将描述我们如何与 TFLM 团队合作,将 Arm 虚拟硬件 (AVH) 用作 TFLM 项目开源持续集成 (CI) 框架的一部分,以验证许多基于 Arm 的处理器与 TFLM。这使开发人员能够在 Arm 知识产权 (IP) 上测试他们的项目,而无需维护硬件的额外复杂性。
Arm 虚拟硬件 - 所有 Cortex-M 微控制器的模型
Arm 虚拟硬件 (AVH) 是一种新的方法,用于托管可远程访问的 Arm IP 模型。在 ML 上下文中,它提供了一个无需实际硬件即可测试模型的平台。以下 Arm M 型号处理器目前可通过 AVH 获得
Arm Corstone 是一种以硅 IP 子系统形式存在的另一种虚拟化技术,帮助开发人员验证和集成他们的设备。Corstone 框架为许多现代 Cortex-M 微控制器奠定了基础。AVH 支持多种平台,包括 Corstone-300、Corstone-310 和 Corstone-1000。支持平台的完整列表可以找到 这里。
通过 Arm 虚拟硬件,这些构建块以 Amazon 机器映像 (AMI) 的形式提供在 Amazon Web Services (AWS) 市场中,并在本地通过 Keil MDK-Professional 提供。
|
从开发人员到云端的 Arm 虚拟硬件端到端工作流程。 |
GitHub Actions 和 Arm 虚拟硬件
GitHub Actions 为包括 TensorFlow Lite Micro 在内的开源项目提供了一个流行的 CI 解决方案。AVH 技术可以 与 GitHub Actions 运行器集成,它可以用于在不同的 Arm 平台上运行测试,作为本机编译的代码,而无需硬件可用。
让我们看看它是如何完成的!
通过 GitHub Actions 工作流程定义 AVH 用例
概述
在过去的一年中,我们已经使在 GitHub Actions 中设置 Arm IP 验证成为可能。我们将引导您完成将 TFLM 与其集成的步骤。对于使用 GitHub Actions 的其他开源项目,也可以重复相同的过程。
GitHub 工作流程 文件(例如 TFLM 存储库中的 Corstone-300 工作流程)可用于在安装了 Arm IP 的 AWS EC2 实例上运行代码。此工作流程使用 Corstone-300 作为目标构建 TFLM 项目,并使用 GCC 和 armclang 运行单元测试,通过分层过程直接在 GitHub UI 中显示结果,如下所示。
工作流程包含一个或多个作业,它们指向包含步骤的文件。步骤在单独的文件中定义(cortex_m_corstone_300_avh.yml)。在我们的示例中,这些步骤将指向测试脚本(test_cortex_m_corstone_300.sh),该脚本使用 Arm 提供的 API(AVH 客户端)发送到 AWS 实例,然后在该实例上相应地执行。该脚本将发送回输出,该输出由 AVH 客户端获取,并在 GitHub Actions UI 中显示。
根据用例的性质,这可能发生一次或多次,这完全取决于定义的作业和步骤的数量。在 Corstone-300 案例中,我们使用一个作业,其步骤只运行一个测试脚本。但这并不是限制,如上图流程图所示。
将 GitHub Actions 运行器连接到运行 AVH 的 AWS EC2 实例
让我们看看 AVH 客户端如何连接到我们的 AWS EC2 实例。AVH 客户端是一个基于 Python 的工具,使访问 AVH 服务更加容易。它设置了一个安装了虚拟硬件目标 (VHT) 的 VM。该客户端可以从
pypi.org 使用 pip 安装到运行 Python 的任何环境中。从那里它可以将任何编译和测试作业卸载到 Arm 虚拟硬件。对于我们的 Corstone-300 示例,它通过将
pip install 添加到工作流程文件中安装在 GitHub Actions 运行器上。
- name: Install AVH Client for Python run: | pip install git+https://github.com/ARM-software/[email protected] |
AWS 凭据被配置为允许 AVH 客户端连接到 AWS EC2 实例,尽管还有其他几种方法可以对 AWS 服务进行身份验证。其中包括将 AWS 密钥对添加到 GitHub 秘密中,或使用允许的 GitHub 存储库来协调预定义的角色,如这里所示。
- name: 配置 AWS 凭据 uses: aws-actions/configure-aws-credentials@v1 with: role-to-assume: arn:aws:iam::720528183931:role/Proj-vht-assume-role aws-region: eu-west-1 |
定义和执行工作负载
最后,让我们看看如何使用 AVH 客户端执行工作负载本身。在此示例中,AVH 工作负载在 YAML 文件中进行描述,我们在 GitHub 工作流文件中指向该文件。
- name: 在 AWS 上的 Arm 虚拟 硬件 上执行测试套件 run: | avhclient -b aws execute --specfile ./tensorflow/lite/micro/tools/github/arm_virtual_hardware/cortex_m_generic_avh.yml |
在这里,我们定义了一个要执行的步骤列表。这些步骤将指向要传输的文件清单,例如 TFLM 存储库本身。此外,我们定义了要使用这些文件执行的代码,这可以通过我们之前提供的脚本来完成。
steps: - run: | git clone https://github.com/tensorflow/tflite-micro.git mv ./tflite-micro/TensorFlow/ . TensorFlow/lite/micro/tools/ci_build/test_cortex_m_corstone_300.sh armclang &> ./corstone300.log |
接下来,我们设置一个文件列表,将这些文件复制回 GitHub Actions 运行器。对于 TFLM 单元测试,完整的命令行日志将写入一个文件 corstone300.log,该文件将返回到 GitHub Actions 运行器以分析测试运行结果
- name: 从 Arm 虚拟 硬件 获取结果 from run: | cat ./tensorflow/lite/micro/tools/github/arm_virtual_hardware/cortex_m_generic.log |
您可以在
Arm 虚拟硬件客户端 GitHub 存储库和
入门指南中找到有关 avhclient 及其用法的详细说明。
通过添加更多硬件目标来扩展工具箱
使用 AVH,可以轻松地将测试扩展到所有可用的 Arm 平台。您还可以通过使用 AWS 等云服务进行托管,并并行生成任意数量的 AVH 实例,从而避免对整体 CI 工作流执行时间造成负面影响。
像 Corstone-310 这样的虚拟硬件目标展示了即使在芯片可用之前如何进行软件验证。这将使经过充分测试的软件堆栈从第一天起就可用于新的 Cortex-M 设备,并且我们计划扩展支持范围。Corstone-1000 的引入将扩展已测试架构的范围,进入 Cortex-A 应用处理器的领域,包括
Cortex-A32、
Cortex-A35、
Cortex-A53.
总结
总结一下:通过提供一个工作流文件、一个用例文件和一个工作负载(在本例中是一个测试脚本),我们已经能够在 Corstone-300 上运行所有 TFLM 单元测试,并将努力将其扩展到所有可用的 AVH 目标。
得益于 AVH 集成,使用虚拟硬件目标的 CI 流程开辟了新的可能性。选择合适的架构、集成和验证从未如此简单。我们相信这是让嵌入式 ML 更易于访问的重要一步,并且它将为未来的应用铺平道路。
感谢您的阅读!
致谢
我们要感谢 Arm 的多位同事对该项目的贡献,包括 Samuel Peligrinello Caipers、Fredrik Knutsson 和 Måns Nilsson。
我们还要感谢 Google 的 Advait Jain 和 Berkeley Design Technology, Inc. 的 John Withers,他们使用 GitHub Actions 架构了一个持续集成系统,该系统使本文中描述的 Arm 虚拟硬件集成成为可能。