10

Khorina · 2020年05月29日

如何将用于微控制器应用的 TensorFlow Lite 移植到Arm Cortex-M55 处理器

image.png

Arm Cortex-M55 处理器是第一个运用 Armv8.1-M 架构的处理器,其中包括 Arm Helium技术(也称为 M 型矢量扩展 (MVE))的实现。Arm Helium技术提高了下一代嵌入式设备上机器学习和信号处理的水平。

MCU 开发人员已经使用开源库,如 CMSIS-DSP、CMSIS-NN 和 ML 框架(如微控制器的 TensorFlow Lite)将机器学习应用程序移植到 Arm Cortex-M 设备中。适用于MCU的 TensorFlow Lite 是为用于内存占用空间非常小的处理器上运行机器学习模型而设计的。CMSIS-DSP 和 CMSIS-NN 库已经添加了对 Cortex-M55 的支持,这使得将 ML 应用程序移植到 Cortex-M55中变得更加容易,因为开发人员可以使用他们熟悉的库和神经网络框架。

image.png

了解如何将 CMSIS-DSP 库移植到 Cortex-M55请参考此处
在本文中,我们将详细介绍如何将用于MCU应用的 TensorFlow Lite 构建和移植到 Arm Cortex-M55 快速和循环模型(Fast and Cycle Model)系统中去。Arm Fast and Cycle Model是功能上精确的程序员 Arm IP 视图模型。我们使用 Arm Cortex-M55 Fast and Cycle Model系统来调试、运行和验证我们构建的 ML 应用程序。然后我们将在 Arm Cortex-M55 Fast and Cycle Model系统上运行经过验证的 ML 应用程序,以精准的测量系统性能。Arm Cycle Models直接从Arm RTL 构建,并提供完整的循环精度。

要了解有关Arm Fast Models 和 Cycle Models的更多信息,请参阅以下链接:
https://developer.arm.com/tools-and-software/simulation-models/fast-models
https://developer.arm.com/tools-and-software/simulation-models/cycle-models

设置本地开发环境

 从克隆github项目存储库开始:

$cd Tool-Solutions/docker/tflite-micro-models

tflite-微型模型(tflite-micro-models)项目包含在M55 Fast and Cycle
Model虚拟平台上构建有关MCU用例的Tensorflow Lite的所有信息。下面是项目中包含的内容列表:

  • TFLite\_micro\_IPSS\_Support – 此目录包含我们需要向 TensorFlow Lite 提供的有关自定义目标的所有系统信息 及M55 Fast and Cycle Model 系统.
  • download\_tflow\_cmsis.sh – 用于克隆TensorFlow和CMSIS存储库并将TFLite\_micro\_IPSS\_Support软件包复制到TensorFlow存储库的适当位置的脚本            - TensorFlow 存储库从这里克隆:https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/micro.

       - CMSIS 存储库从这了克隆:https://github.com/ARM-software/CMSIS\_5.git

  • get-ac6.sh –用于下载 Linux 系统上 Arm编译器 6.14 的脚本。我们使用Arm编译器作为工具链来构建适用于MCU示例的 TensorFlow Lite。
  • build\_tflite\_micro\_test.sh – 针对自定义 M55 虚拟平台构建适用于MCU示例的 TensorFlow Lite的脚本
  • Dockerfile – 包含用于为此项目组装 Docker 镜像的所有指令。
  • build.sh – 建立Docker 镜像的脚本
  • run.sh – 运行Docker 容器的脚本

我们使用基于 Docker 的开发环境使创建一个包中涵盖所有依赖项的已知良好开发环境变得更加容易。
首先,下载用于 Linux 系统上的 Arm编译器 6.14。您可以在此处直接下载。
也可以通过运行get-ac6.sh文件下载

$ ./get-ac6.sh

然后,通过运行build.sh文件或使用以下指令为此项目生成 Docker 镜像:

$ docker build -t tflite-micro-models -f Dockerfile .

接下来,通过运行run.sh文件或使用以下命令启动 docker 容器

$ docker run --network host -it tflite-micro-models /bin/bash

现在可以在 Docker 容器中构建 TensorFlow Lite 微型示例应用程序。

构建TensorFlow Lite微型示例应用程序



针对MCU的TensorFlow Lite附带了几个示例。借助于此,你可以为 Keil、Make 和 Mbed 开发环境生成独立项目。在本文中,我们使用 Make 生成项目。

这些应用程序可以使用 TFLite Micro 中的参考内核(ensorflow/lite/micro/kernels)或利用 CMSIS-NN 库的优化内核tensorflow/lite/micro/kernels/cmsis-nn)构建。引用内核不包含任何特定于平台的优化。我们使用优化的 CMSIS-NN 内核构建应用程序。

CMSIS-NN 是一组高效的神经网络内核,可最大限度地提高 Cortex-M 处理器内核的性能并最大限度地减少神经网络的内存占用。对 Arm Helium技术的内核(MVE)的支持已添加到 CMSIS-NN 库中。

要构建针对 Cortex-M55 系统的示例应用程序,请使用 build\_tflite\_micro\_test.sh 脚本。要构建的示例应用程序作为参数传递给此脚本,包括以下选项:

  • hello\_world
  • magic\_wand
  • micro\_speech
  • network\_tester
  • person\_detection

如果您首次为MCU框架使用 TensorFlow Lite,hello world 是了解基础知识并了解完整端到端工作流程的好开端。

在本文中,我们将micro speech 示例移植到 Cortex-M55 Fast and
Cycle Model系统。此示例运行了 22kB TensorFlow Lite 模型,并且使用很少的内存(大约 占用10kB RAM)。该模型可以从示例语音数据中识别两个关键字,是和否。

在容器使用中生成micro\_speech\_test可执行文件:

$ ./build_tflite_micro_test.sh -t micro_speech

生成的可执行"micro\_speech\_test"被复制到 Cortex-M55/软件/exe 目录中。要了解此测试的作用,可以在此处检查源代码。

它实质上创建了一个解释器用来获取 TensorFlow Lite 模型的句柄,然后使用模型和一些示例输入来运行这个解释器。

现在,我们已准备好在 Cortex-M55 Fast and Cycle Model系统上运行micro\_speech\_test可执行文件。要访问这些系统,请联系我们。

在Arm Fast Model 系统上运行 TensorFlow Lite 应用程序

Arm Fast Models是程序员的快速、功能精确的Arm CPU 和系统 IP 视图模型。您可以在任何硬件可用之前使用Fast Models开发针对 Arm IP 的软件,它非常适用于 Cortex-M55 的开发。

适用于MCU的 TensorFlow Lite 可执行的"micro\_speech\_test"可以在M55
Fast Model系统上运行:

// This file was generated by System Generator Canvas

// --------------------------------------------------

component m55

{

    composition

    {

      ramdevice : RAMDevice("size"=0x100000000);

      pvbus2ambapv : PVBus2AMBAPV();

      BusDecoder : PVBusDecoder();

      armm55ct : ARMCortexM55CT("MVE"=2, "CFGDTCMSZ"=0xf, "CFGITCMSZ"=0xf);

      Clock1Hz : MasterClock();

      Clock100MHz : ClockDivider("mul"=100000000);

    }

    connection

    {

      Clock100MHz.clk_out => armm55ct.clk_in;

      Clock1Hz.clk_out => Clock100MHz.clk_in;

      armm55ct.pvbus_m => BusDecoder.pvbus_s;

      pvbus2ambapv.amba_pv_m => self.amba_pv_m;

      BusDecoder.pvbus_m_range[0x0..0x9fffffff] => ramdevice.pvbus;

      BusDecoder.pvbus_m_range[0xa8000000..0xa8001000] => pvbus2ambapv.pvbus_s;

    }

    master port amba_pv_m;

}



以下是在此 M55 Fast Model系统上运行micro\_speech\_test的输出:

Fast Models [11.10.22 (Mar 11 2020)]

Copyright 2000-2020 ARM Limited.

All Rights Reserved.

 

Testing TestInvoke

Ran successfully

 

1/1 tests passed

~~~ALL TESTS PASSED~~~

 

simulation is complete

 

Info: /OSCI/SystemC: Simulation stopped by user.

这个输出意味着经过训练的微语音 TensorFlow 模型已成功加载到 Cortex-M55 的目标上,一些示例输入通过该目标运行并得到了预期的输出。

要了解有关Arm Fast Models入门的详细信息,请参阅此处的快速入门网址

您还可以通过在 TFLite\_micro\_IPSS\_Support 中对特定于系统的代码进行细微修改,将这些示例移植到 Arm Cortex-M55 FVP(固定虚拟平台)中去。

这种类型的工作流利用 Arm Fast Models在硬件可用之前验证平台上的神经网络行为非常有用。使用 Arm Cortex-M55 Cycle Model系统可以从仿真中获取和分析循环准确的性能指标(如网络执行时间)。

测量系统性能并在Arm Cycle Model系统上获得准确推理周期计数

Arm Cycle Models是直接用 RTL 编译的具备100% 功能性和循环精确性的Arm IP 模型。

Cortex-M55\_Cycle Model 在Arm IP Exchange中可用。我们用这个GPU模型建立了一个简单的 Cortex-M55 Cycle Model系统,除此之外还建立了系统互连和内存的Cycle Models。通过将 M55 Cycle Model系统与Fast Mode模型系统的内存映射匹配,我们可以在Cycle Model系统上运行相同的micro\_speech\_test可执行文件。

在 M55 循环模型系统上运行micro\_speech\_test可执行文件,可以为整个应用程序提供精准的周期计数。我们使用周期精确的仿真结果来测量系统关键性能指标,如内存带宽利用率。我们还可以在 TensorFlow Lite 应用程序中插入软件标记,以测量在 TensorFlow Lite 模型上运行推理的周期计数。

总结

在 Arm 编译器中对 Cortex-M55 的支持以及 CMSIS-NN 库与适用于MCU的 TensorFlow Lite 的紧密集成,将使 ML 工作负载移植到新的 Cortex-M 设备的过程既快速又易于使用。此外,Cortex-M55.

Arm Fast Model Cycle Model的出现可以使ML 工作负载所有硬件可用之前对其进行早期软件启动、验证和性能分析。

作者:Pareena Verma
翻译:Khorina
原文链接:https://community.arm.com/developer/tools-software/tools/b/tools-software-ides-blog/posts/port-tensorflow-lite-for-cortex-m55

推荐阅读
关注数
23567
内容数
1019
Arm相关的技术博客,提供最新Arm技术干货,欢迎关注
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息