交叉编译使用的深度学习代码手臂计算库
在承载MATLAB的计算机上®会话,你可以生成深度学习源代码,并编译它来创建一个库或可执行文件,运行在目标ARM上®硬件设备。在一个平台上编译源代码以创建用于另一个平台的二进制代码称为交叉编译.该工作流仅支持Linux操作系统万博1manbetx®主机平台和目标设备采用armv7(32位)或armv8(64位)ARM架构。
使用此工作流在没有硬件支持包的ARM设备上部署深度学习代码。万博1manbetx
请注意
本帮助主题中的示例使用的ARM Compute库版本可能不是代码生成支持的最新版本。万博1manbetx有关受支万博1manbetx持的库版本以及有关设置环境变量的信息,请参见用MATLAB编码器进行深度学习的先决条件.
先决条件
这些是交叉编译工作流特定的先决条件。有关一般先决条件,请参见用MATLAB编码器进行深度学习的先决条件.
目标设备必须为armv7(32位)或armv8(64位)的ARM架构。要验证您的设备的架构,请在设备的终端上运行此命令:
拱
您必须在主计算机上安装Linaro AArch32或AArch64工具链。
对于armv7目标,安装GNU/GCC
g++ -arm-linux-gnueabihf
主机上的工具链。对于armv8目标,安装GNU/GCC
g++ -aarch64-linux-gnu
主机上的工具链。
以在主机上安装Linaro AArch64工具链为例,在终端上执行如下命令:
Sudo apt-get install g++-aarch64-linux-gnu
在MATLAB命令行中,设置环境变量
LINARO_TOOLCHAIN_AARCH32
或LINARO_TOOLCHAIN_AARCH64
用于工具链二进制文件的路径。每个MATLAB会话必须设置一次路径。假设工具链已安装在该位置
工作
在主机中。对于armv7 target,执行如下命令:
setenv (“LINARO_TOOLCHAIN_AARCH32”,“/ usr / bin”)
对于armv8 target,执行如下命令:
setenv (“LINARO_TOOLCHAIN_AARCH64”,“/ usr / bin”)
在主机上交叉编译ARM Compute库:
为ARM计算库克隆Git™存储库,并检查您需要的版本。例如,要检出v19.05,在主机终端上运行这些命令:
git克隆https://github.com/Arm-software/ComputeLibrary.git cd computeliary git标签-l git checkout v19.05
在主机上安装scons。例如,在主机终端上执行如下命令:
Sudo apt-get安装scons
使用scons在主机上交叉编译ARM计算库。例如,要构建在armv8架构上运行的库,在主机终端运行以下命令:
scons Werror=0 -j8 debug=0 neon=1 opencl=0 os=linux arch=arm64-v8a openmp=1 cppthreads=1 examples=0 assert =0 build=cross_compile
在MATLAB命令行中,设置环境变量
ARM_COMPUTELIB
为ARM计算库的路径。每个MATLAB会话必须设置一次路径。假设ARM Compute库安装在该位置
/桌面/ ComputeLibrary /home/$(用户)
.在MATLAB命令行中执行以下命令:setenv (“ARM_COMPUTELIB”,“/ home / $(用户)/桌面/ ComputeLibrary ')
包含库文件的文件夹,例如
libarm_compute.so
应该命名为自由
.如果文件夹已命名构建
,重命名为自由
.
生成和部署深度学习代码
在宿主计算机上交叉编译深度学习代码,然后将代码部署到目标ARM硬件上,有两种可能的工作流程。下面是两个工作流的摘要。有关演示这两个工作流的示例,请参见交叉编译ARM Neon目标的深度学习代码.
在主机上,为深度学习代码生成静态或动态库。遵循以下步骤:
在主机上,使用
codegen
命令生成和构建深度学习代码以创建静态或动态库。将生成的库、ARM Compute库文件、makefile和其他支持文件复制到目标硬件。万博1manbetx
在目标上编译复制的makefile以创建可执行文件。
在目标硬件上运行生成的可执行文件。
在主机上,为深度学习代码生成可执行文件。遵循以下步骤:
在主机上,使用
codegen
命令生成和构建深度学习代码以创建可执行文件。将生成的可执行文件、ARM计算库文件和其他支持文件复制到目标硬件。万博1manbetx
在目标硬件上运行可执行文件。