啥都吃的豆芽 · 2020年10月21日

移植TFLite-micro应用程序到Arm Cortex-M55处理器

image.png

Pareena Verma
2020年5月14日

ARM Cortex-M55处理器是第一个采用ARMv8.1-M架构的处理器,该架构包括ARM Helium技术(也称为M-profile矢量扩展(MVE))的实现。Helium技术可在下一代嵌入式设备上实现更高水平的机器学习和信号处理。

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

image.png

在此处了解如何将CMSIS-DSP库移植到Cortex-M55:如何将Arm Cortex-M55处理器与开源CMSIS库一起使用

在本文中,我们将详细说明将TensorFlow Lite的微控制器应用程序构建和移植到Arm Cortex-M55快速和循环模型系统的过程。Arm快速模型是Arm IP在功能上准确的程序员视图模型。我们使用Arm Cortex-M55快速模型系统来调试,运行和验证已构建的ML应用程序。然后,我们将在Arm Cortex-M55循环模型系统上运行经过验证的ML应用程序,以测量准确的系统性能。手臂循环模型直接从Arm RTL构建,并提供完整的循环精度。

设置本地开发环境

首先,从github克隆项目存储库:

$git clone https://github.com/ARM-software/Tool-Solutions.git
$cd Tool-Solutions/docker/tflite-micro-models

tflite-micro-models项目包含构建在M55快速和循环模型虚拟平台上运行的Tensorflow Lite for Microcontrollers示例所需的一切。以下是项目中包含的内容的列表:

  • TFLite_micro_IPSS_Support –此目录包含我们需要向TensorFlow Lite提供的与自定义目标有关的所有系统信息-M55快速和循环模型系统。
  • 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 Compiler 6.14的脚本。我们使用 Arm Compiler 作为工具链来构建TensorFlow Lite for Microcontroller示例。
  • build_tflite_micro_test.sh-用于针对自定义M55虚拟平台构建TensorFlow Lite for Microcontroller示例的脚本
  • Dockerfile –包含用于组装此项目的Docker映像的所有命令。
  • build.sh –用于构建docker映像的脚本
  • run.sh –运行docker容器的脚本

我们正在为项目使用基于 Docker的开发环境。它使创建一个具有所有依赖项的已知良好开发环境变得更加容易。

首先,下载适用于Linux的Arm Compiler 6.14。您可以在此处直接从Arm Developer 或通过运行 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 Micro示例应用程序。

构建TensorFlow Lite Micro示例应用程序

TensorFlow Lite for Microcontrollers附带了几个示例。使用TensorFlow Lite for Microcontrollers,您可以为Keil,Make和Mbed开发环境生成独立项目。在此示例中,我们使用Make生成项目。

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

CMSIS-NN 是高效的神经网络内核的集合,这些内核可以最大化性能,并最小化Cortex-M处理器内核上神经网络的内存占用。对Helium技术(M-Profile Vector扩展)的内核支持已添加到CMSIS-NN库。

要构建针对Cortex-M55系统的示例应用程序,请使用 build_tflite_micro_test.sh 脚本。您要构建的示例应用程序作为参数传递给此脚本。以下选项是:

  • hello_world
  • magic_wand
  • micro_speech
  • network_tester
  • person_detection

如果您是第一次使用TensorFlow Lite for Microcontrollers框架,那么 hello world 是了解基础知识和学习完整的端到端工作流程的经典开始。

在本文中,我们将把微型语音示例移植 到Cortex-M55快速和循环模型系统。此示例运行22kB TensorFlow Lite模型并使用很少的内存(大约10kB的RAM)。该模型可以从样本语音数据中识别两个关键字,是和否。

要在容器中构建micro_speech_test可执行文件,请使用:

$ ./build_tflite_micro_test.sh -t micro_speech

生成的可执行文件“ micro_speech_test”被复制到Cortex-M55 / software / exe目录中。要了解此测试的功能,您可以在此处检查源代码 。它实质上是创建一个解释器,获取TensorFlow Lite模型的句柄,然后使用模型和一些示例输入来运行解释器。

现在,我们准备在Cortex-M55快速和循环模型系统上运行micro_speech_test可执行文件。要访问这些系统,请在此处与我们联系 。

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

ARM Fast Model是ARM CPU和系统IP的快速、功能精确的程序员视图模型。在任何硬件可用之前,您就可以使用Fast型号开发针对ARM IP的软件,非常适合在Cortex-M55上进行开发。

用于微控制器的TensorFlow Lite可执行文件“MICRO_SPICE_TEST”在一个简单的M55快速模型系统上运行,如下所述。

// 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<AMBAPV> amba_pv_m;
}

这是在此M55快速模型系统上运行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快速模型入门的更多信息,请参考此处的快速入门

您还可以 通过对TFLite_micro_IPSS_Support中特定于系统的代码进行少量修改,将这些示例移植到 Arm Cortex-M55 FVP(固定虚拟平台)上。

利用Arm快速模型,这种类型的工作流程可用于在硬件可用之前验证平台上的神经网络行为。为了从仿真中获得并分析周期精确的性能指标,例如网络执行所需的时间,使用了Arm Cortex-M55周期模型系统。

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

ARM周期模型是ARM IP的100%功能和周期精确模型,直接从RTL编译而来。

Cortex-M55周期型号在ARM IP交换上提供。我们使用这个CPU模型建立了一个简单的Cortex-M55周期模型系统,并建立了系统互连和内存的周期模型。通过将M55周期模型系统的内存映射与快速模型系统的内存映射相匹配,我们可以在周期模型系统上运行相同的microSpeech_test可执行文件。

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

总结

Arm编译器中对Cortex-M55的支持以及CMSIS-NN库与TensorFlow Lite for Microcontrollers的紧密集成,使得将ML工作负载移植到新的Cortex-M设备的过程变得快捷,易于使用。˚F urthermore,ARM快速模型和周期模型的用于Cortex-M55的可用性使得早期的软件带来向上,验证和性能分析与ML工作量任何硬件设备可用之前。

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