编译MindSpore Lite
Windows
Linux
Android
环境准备
中级
高级
本章节介绍如何快速编译出MindSpore Lite。
推理版本包含模块:
模块 |
支持平台 |
说明 |
---|---|---|
converter |
Linux, Windows |
模型转换工具 |
runtime(cpp、java) |
Linux, Windows, Android |
模型推理框架(Windows平台不支持java版runtime) |
benchmark |
Linux, Windows, Android |
基准测试工具 |
cropper |
Linux |
libmindspore-lite.a静态库裁剪工具 |
minddata |
Linux, Android |
图像处理库 |
训练版本包含模块:
模块 |
支持平台 |
说明 |
---|---|---|
converter |
Linux |
模型转换工具 |
runtime(cpp) |
Linux, Android |
模型训练框架(暂不支持java) |
benchmark |
Linux, Android |
基准测试工具 |
cropper |
Linux |
libmindspore-lite.a静态库裁剪工具 |
minddata |
Linux, Android |
图像处理库 |
benchmark_train |
Linux, Android |
性能测试和精度校验工具 |
Linux环境编译
环境要求
系统环境:Linux x86_64,推荐使用Ubuntu 18.04.02LTS
runtime(cpp)编译依赖
CMake >= 3.18.3
GCC >= 7.3.0
Android_NDK >= r20
Git >= 2.28.0
converter编译依赖
runtime(java)编译依赖
当安装完依赖项
Android_NDK
后,需配置环境变量:export ANDROID_NDK=${NDK_PATH}/android-ndk-r20b
。编译脚本中会执行
git clone
获取第三方依赖库的代码,请提前确保git的网络设置正确可用。当安装完依赖项Gradle后,需将其安装路径增加到PATH当中:
export PATH=${GRADLE_PATH}/bin:$PATH
。通过
Android command line tools
安装Android SDK,首先需要创建一个新目录,并将其路径配置到环境变量${ANDROID_SDK_ROOT}
中,然后通过sdkmanager
创建SDK:./sdkmanager --sdk_root=${ANDROID_SDK_ROOT} "cmdline-tools;latest"
,最后通过${ANDROID_SDK_ROOT}
目录下的sdkmanager
接受许可证:yes | ./sdkmanager --licenses
。编译AAR需要依赖Android SDK Build-Tools、Android SDK Platform-Tools等Android SDK相关组件,如果环境中的Android SDK不存在相关组件,编译时会自动下载所需依赖。
编译NPU算子的时候需要下载DDK V500.010,并将压缩包解压后的目录设置为环境变量
${HWHIAI_DDK}
。
编译选项
MindSpore Lite提供编译脚本build.sh
用于一键式编译,位于MindSpore根目录下,该脚本可用于MindSpore训练及推理的编译。下面对MindSpore Lite的编译选项进行说明。
选项 |
参数说明 |
取值范围 |
是否必选 |
---|---|---|---|
-I |
选择适用架构,若编译MindSpore Lite c++版本,则此选项必选 |
arm64、arm32、x86_64 |
否 |
-d |
设置该参数,则编译Debug版本,否则编译Release版本 |
无 |
否 |
-i |
设置该参数,则进行增量编译,否则进行全量编译 |
无 |
否 |
-j[n] |
设定编译时所用的线程数,否则默认设定为8线程 |
Integer |
否 |
-e |
编译某种类型的内置算子,仅在ARM架构下适用,否则默认全部编译 |
cpu、gpu、npu |
否 |
-h |
显示编译帮助信息 |
无 |
否 |
-n |
指定编译轻量级图片处理模块 |
lite_cv |
否 |
-A |
指定编译语言,默认cpp。设置为java时,则编译AAR包 |
cpp、java |
否 |
-C |
设置该参数,则编译模型转换工具,默认为on |
on、off |
否 |
-o |
设置该参数,则编译基准测试工具、静态库裁剪工具,默认为on |
on、off |
否 |
-t |
设置该参数,则编译测试用例,默认为off |
on、off |
否 |
-T |
是否编译训练版本工具,默认为off |
on、off |
否 |
在
-I
参数变动时,如-I x86_64
变为-I arm64
,添加-i
参数进行增量编译不生效。编译AAR包时,必须添加
-A java
参数,且无需添加-I
参数,默认同时编译内置的CPU和GPU算子。开启编译选项
-T
只生成训练版本。任何
-e
编译选项,CPU都会编译进去。
编译示例
首先,在进行编译之前,需从MindSpore代码仓下载源码。
git clone https://gitee.com/mindspore/mindspore.git -b r1.1
然后,在源码根目录下执行如下命令,可编译不同版本的MindSpore Lite。
编译x86_64架构Debug版本。
bash build.sh -I x86_64 -d
编译x86_64架构Release版本,同时设定线程数。
bash build.sh -I x86_64 -j32
编译x86_64架构Release版本,同时编译测试用例。
bash build.sh -I x86_64 -t on
增量编译ARM64架构Release版本,同时设定线程数。
bash build.sh -I arm64 -i -j32
编译ARM64架构Release版本,只编译内置的CPU算子。
bash build.sh -I arm64 -e cpu
编译ARM64架构Release版本,同时编译内置的CPU和GPU算子。
bash build.sh -I arm64 -e gpu
编译ARM64架构Release版本,同时编译内置的CPU和NPU算子。
bash build.sh -I arm64 -e npu
编译ARM64带图像预处理模块。
bash build.sh -I arm64 -n lite_cv
编译MindSpore Lite AAR,同时编译内置的CPU和GPU算子。
bash build.sh -A java
编译MindSpore Lite AAR,只编译内置的CPU算子。
bash build.sh -A java -e cpu
编译x86_64架构Release版本,编译模型转换、基准测试和库裁剪工具。
bash build.sh -I x86_64
编译x86_64架构Release版本,模型转换、基准测试、库裁剪工具和端侧运行时 (Runtime) 训练版本工具。
bash build.sh -I x86_64 -T on
端侧推理框架编译输出
执行编译指令后,会在mindspore/output/
目录中生成如下文件:
mindspore-lite-{version}-converter-{os}-{arch}.tar.gz
:模型转换工具。mindspore-lite-{version}-inference-{os}-{arch}.tar.gz
:包含模型推理框架runtime、基准测试工具benchmark、库裁剪工具cropper。mindspore-lite-maven-{version}.zip
:包含模型推理框架runtime(java)的AAR。
version: 输出件版本号,与所编译的分支代码对应的版本一致。
os: 输出件应部署的操作系统。
arch: 输出件应部署的系统架构。
执行解压缩命令,获取编译后的输出件:
tar -xvf mindspore-lite-{version}-converter-{os}-{arch}.tar.gz
tar -xvf mindspore-lite-{version}-inference-{os}-{arch}.tar.gz
unzip mindspore-lite-maven-{version}.zip
模型转换工具converter目录结构说明
仅在-I x86_64
编译选项下获得(推理和训练的目录结构相同)内容如下:
│
├── mindspore-lite-{version}-converter-{os}-{arch}
│ └── converter # 模型转换工具
│ ├── converter_lite # 可执行程序
│ └── lib # 转换工具依赖的动态库
│ ├── libmindspore_gvar.so # 存储某些全局变量的动态库
│ └── third_party # 第三方库头文件和库
│ ├── glog # Glog的动态库
Runtime及其他工具目录结构说明
推理框架可在-I x86_64
、-I arm64
、-I arm32
和-A java
编译选项下获得,内容如下:
当编译选项为
-I x86_64
时:│ ├── mindspore-lite-{version}-inference-linux-x64 │ └── benchmark # 基准测试工具 │ └── cropper # 库裁剪工具 │ ├── cropper # 库裁剪工具可执行文件 │ ├── cropper_mapping_cpu.cfg # 裁剪cpu库所需的配置文件 │ └── include # 推理框架头文件 │ └── lib # 推理框架库 │ ├── libmindspore-lite.a # MindSpore Lite推理框架的静态库 │ ├── libmindspore-lite.so # MindSpore Lite推理框架的动态库 │ └── minddata # 图像处理动态库 │ └── include # 头文件 │ └── lite_cv # 图像处理库头文件 │ ├── image_process.h # 图像处理函数头文件 │ ├── lite_mat.h # 图像数据类结构头文件 │ └── lib # 图像处理动态库 │ ├── libminddata-lite.so # 图像处理动态库文件
当编译选项为
-I arm64
或-I arm32
时:│ ├── mindspore-lite-{version}-inference-android-{arch} │ └── benchmark # 基准测试工具 │ └── include # 推理框架头文件 │ └── lib # 推理框架库 │ ├── libmindspore-lite.a # MindSpore Lite推理框架的静态库 │ ├── libmindspore-lite.so # MindSpore Lite推理框架的动态库 │ └── minddata # 图像处理动态库 │ └── include # 头文件 │ └── lite_cv # 图像处理库头文件 │ ├── image_process.h # 图像处理函数头文件 │ ├── lite_mat.h # 图像数据类结构头文件 │ └── lib # 图像处理动态库 │ ├── libminddata-lite.so # 图像处理动态库文件
当编译选项为
-A java
时:│ ├── mindspore-lite-maven-{version} │ └── mindspore │ └── mindspore-lite │ └── {version} │ ├── mindspore-lite-{version}.aar # MindSpore Lite推理框架aar包
编译ARM64默认可获得cpu/gpu/npu的推理框架输出件,若添加
-e gpu
则获得cpu/gpu的推理框架输出件,ARM32仅支持CPU。运行converter、benchmark目录下的工具前,都需配置环境变量,将MindSpore Lite的动态库所在的路径配置到系统搜索动态库的路径中。
配置converter:
export LD_LIBRARY_PATH=./output/mindspore-lite-{version}-converter-{os}-{arch}/lib:./output/mindspore-lite-{version}-converter-{os}-{arch}/third_party/glog/lib:${LD_LIBRARY_PATH}
配置benchmark:
export LD_LIBRARY_PATH=./output/mindspore-lite-{version}-inference-{os}-{arch}/lib:${LD_LIBRARY_PATH}
端侧训练框架编译输出
如果添加了-T on
编译选项,会生成端侧训练转换工具和对应Runtime工具,如下:
mindspore-lite-{version}-train-converter-{os}-{arch}.tar.gz
:模型转换工具,仅支持MindIR模型文件。
mindspore-lite-{version}-train-{os}-{arch}.tar.gz
:模型训练框架runtime。
version: 输出件版本号,与所编译的分支代码对应的版本一致。
os: 输出件应部署的操作系统。
arch: 输出件应部署的系统架构。
执行解压缩命令,获取编译后的输出件:
tar -xvf mindspore-lite-{version}-train-converter-{os}-{arch}.tar.gz
tar -xvf mindspore-lite-{version}-train-{os}-{arch}.tar.gz
训练模型转换工具converter目录结构说明
仅在-I x86_64
编译选项下获得内容如下:
│
├── mindspore-lite-{version}-train-converter-linux-x64
│ └── converter # 模型转换工具
│ ├── converter_lite # 可执行程序
│ └── lib # 转换工具依赖的动态库
│ ├── libmindspore_gvar.so # 存储某些全局变量的动态库
│ └── minddata # 图像处理动态库
│ ├── include # 头文件
│ └── third_party # 第三方库头文件和库
│ ├── glog # Glog的动态库
训练Runtime及其他工具目录结构说明
训练框架可在-I x86_64
、-I arm64
、-I arm32
编译选项下获得对应不同硬件平台的版本,内容如下:
当编译选项为
-I x86_64
时:│ ├── mindspore-lite-{version}-train-linux-x64 │ └── benchmark # 基准测试工具 │ └── cropper # 库裁剪工具 │ ├── cropper # 库裁剪工具可执行文件 │ ├── cropper_mapping_cpu.cfg # 裁剪cpu库所需的配置文件 │ └── include # 训练框架头文件 │ └── lib # 训练框架库 │ ├── libmindspore-lite.a # MindSpore Lite训练框架的静态库 │ ├── libmindspore-lite.so # MindSpore Lite训练框架的动态库 │ └── minddata # 图像处理动态库 │ └── include # 头文件 │ └── lite_cv # 图像处理库头文件 │ ├── image_process.h # 图像处理函数头文件 │ ├── lite_mat.h # 图像数据类结构头文件 │ └── lib # 图像处理动态库 │ ├── libminddata-lite.so # 图像处理动态库文件 │ └── benchmark_train │ ├── benchmark_train # 训练模型性能与精度调测工具
当编译选项为
-I arm64
或-I arm32
时:│ ├── mindspore-lite-{version}-train-android-{arch} │ └── include # 训练框架头文件 │ └── lib # 训练框架库 │ ├── libmindspore-lite.a # MindSpore Lite训练框架的静态库 │ ├── libmindspore-lite.so # MindSpore Lite训练框架的动态库 │ └── minddata # 图像处理动态库 │ └── include # 头文件 │ └── lite_cv # 图像处理库头文件 │ ├── image_process.h # 图像处理函数头文件 │ ├── lite_mat.h # 图像数据类结构头文件 │ └── lib # 图像处理动态库 │ ├── libminddata-lite.so # 图像处理动态库文件 │ └── benchmark_train │ ├── benchmark_train # 训练模型性能与精度调测工具
运行converter、benchmark_train目录下的工具前,都需配置环境变量,将MindSpore Lite的动态库所在的路径配置到系统搜索动态库的路径中。
配置converter:
export LD_LIBRARY_PATH=./output/mindspore-lite-{version}-train-converter-{os}-{arch}/lib:./output/mindspore-lite-{version}-train-converter-{os}-{arch}/third_party/glog/lib:${LD_LIBRARY_PATH}
配置benchmark_train:
export LD_LIBRARY_PATH=./output/mindspore-lite-{version}-train-{os}-{arch}/lib:${LD_LIBRARY_PATH}
Windows环境编译
环境要求
编译脚本中会执行
git clone
获取第三方依赖库的代码,请提前确保git的网络设置正确可用。
编译选项
MindSpore Lite提供编译脚本build.bat用于一键式编译,位于MindSpore根目录下,该脚本可用于MindSpore训练及推理的编译。下面对MindSpore Lite的编译选项进行说明。
参数 |
参数说明 |
是否必选 |
---|---|---|
lite |
设置该参数,则对MindSpore Lite工程进行编译 |
是 |
[n] |
设定编译时所用的线程数,否则默认设定为6线程 |
否 |
编译示例
首先,使用git工具,从MindSpore代码仓下载源码。
git clone https://gitee.com/mindspore/mindspore.git -b r1.1
然后,使用cmd工具在源码根目录下,执行如下命令即可编译MindSpore Lite。
以默认线程数(6线程)编译Windows版本。
call build.bat lite
以指定线程数8编译Windows版本。
call build.bat lite 8
端侧推理框架编译输出
编译完成后,进入mindspore/output/
目录,可查看编译后生成的文件。文件分为以下几种:
mindspore-lite-{version}-converter-win-x64.zip
:包含模型转换工具converter。mindspore-lite-{version}-inference-win-x64.zip
:包含模型推理框架runtime、基准测试工具benchmark。
version:输出件版本号,与所编译的分支代码对应的版本一致。
执行解压缩命令,获取编译后的输出件:
unzip mindspore-lite-{version}-converter-win-x64.zip
unzip mindspore-lite-{version}-inference-win-x64.zip
模型转换工具converter目录结构说明
转换工具的内容包括以下几部分:
│
├── mindspore-lite-{version}-converter-win-x64
│ └── converter # 模型转换工具
│ ├── converter_lite.exe # 可执行程序
│ ├── libglog.dll # Glog的动态库
│ ├── libmindspore_gvar.dll # 存储某些全局变量的动态库
│ ├── libgcc_s_seh-1.dll # MinGW动态库
│ ├── libssp-0.dll # MinGW动态库
│ ├── libstdc++-6.dll # MinGW动态库
│ ├── libwinpthread-1.dll # MinGW动态库
基准测试工具benchmark目录结构说明
基准测试工具的内容包括以下几部分:
│
├── mindspore-lite-{version}-inference-win-x64
│ └── benchmark # 基准测试工具
│ ├── benchmark.exe # 可执行程序
│ ├── libmindspore-lite.a # MindSpore Lite推理框架的静态库
│ ├── libmindspore-lite.dll # MindSpore Lite推理框架的动态库
│ ├── libmindspore-lite.dll.a # MindSpore Lite推理框架的动态库的链接文件
│ ├── libgcc_s_seh-1.dll # MinGW动态库
│ ├── libssp-0.dll # MinGW动态库
│ ├── libstdc++-6.dll # MinGW动态库
│ ├── libwinpthread-1.dll # MinGW动态库
│ └── include # 推理框架头文件
暂不支持在Windows进行端侧训练。