编译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环境编译

环境要求

  • 当安装完依赖项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包
    
  1. 编译ARM64默认可获得cpu/gpu/npu的推理框架输出件,若添加-e gpu则获得cpu/gpu的推理框架输出件,ARM32仅支持CPU。

  2. 运行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环境编译

环境要求

  • 系统环境:Windows 7,Windows 10;64位。

  • 编译依赖

编译脚本中会执行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进行端侧训练。