编译MindSpore Lite
本章节介绍如何快速编译出MindSpore Lite,其包含的模块如下:
模块 |
支持平台 |
说明 |
---|---|---|
converter |
Linux |
模型转换工具 |
runtime |
Linux、Android |
模型推理框架 |
benchmark |
Linux、Android |
基准测试工具 |
timeprofiler |
Linux、Android |
性能分析工具 |
imageprocess |
Linux、Android |
图像处理库 |
Linux环境编译
环境要求
系统环境:Linux x86_64,推荐使用Ubuntu 18.04.02LTS
runtime、benchmark、timeprofiler编译依赖
CMake >= 3.14.1
GCC >= 7.3.0
Android_NDK >= r20
Git >= 2.28.0
converter编译依赖
当安装完依赖项Android_NDK后,需配置环境变量:
export ANDROID_NDK={$NDK_PATH}/android-ndk-r20b
。编译脚本中会执行
git clone
获取第三方依赖库的代码,请提前确保git的网络设置正确可用。
编译选项
MindSpore Lite提供编译脚本build.sh
用于一键式编译,位于MindSpore根目录下,该脚本可用于MindSpore训练及推理的编译。下面对MindSpore Lite的编译选项进行说明。
选项 |
参数说明 |
取值范围 |
是否必选 |
---|---|---|---|
-I |
选择适用架构,编译MindSpore Lite此选项必选 |
arm64、arm32、x86_64 |
是 |
-d |
设置该参数,则编译Debug版本,否则编译Release版本 |
无 |
否 |
-i |
设置该参数,则进行增量编译,否则进行全量编译 |
无 |
否 |
-j[n] |
设定编译时所用的线程数,否则默认设定为8线程 |
Integer |
否 |
-e |
选择除CPU之外的其他内置算子类型,仅在ARM架构下适用,当前仅支持GPU |
GPU |
否 |
-h |
显示编译帮助信息 |
无 |
否 |
-n |
指定编译轻量级图片处理模块 |
lite_cv |
否 |
在
-I
参数变动时,如-I x86_64
变为-I arm64
,添加-i
参数进行增量编译不生效。
编译示例
首先,在进行编译之前,需从MindSpore代码仓下载源码。
git clone https://gitee.com/mindspore/mindspore.git -b r1.0
然后,在源码根目录下执行如下命令,可编译不同版本的MindSpore Lite。
编译x86_64架构Debug版本。
bash build.sh -I x86_64 -d
编译x86_64架构Release版本,同时设定线程数。
bash build.sh -I x86_64 -j32
增量编译ARM64架构Release版本,同时设定线程数。
bash build.sh -I arm64 -i -j32
编译ARM64架构Release版本,同时编译内置的GPU算子。
bash build.sh -I arm64 -e gpu
编译ARM64带图像预处理模块。
bash build.sh -I arm64 -n lite_cv
编译输出
编译完成后,进入mindspore/output/
目录,可查看编译后生成的文件。文件分为三部分:
mindspore-lite-{version}-converter-{os}.tar.gz
:包含模型转换工具converter。mindspore-lite-{version}-runtime-{os}-{device}.tar.gz
:包含模型推理框架runtime、基准测试工具benchmark和性能分析工具timeprofiler。mindspore-lite-{version}-minddata-{os}-{device}.tar.gz
:包含图像处理库imageprocess。
version:输出件版本号,与所编译的分支代码对应的版本一致。
device:当前分为cpu(内置CPU算子)和gpu(内置CPU和GPU算子)。
os:输出件应部署的操作系统。
执行解压缩命令,获取编译后的输出件:
tar -xvf mindspore-lite-{version}-converter-{os}.tar.gz
tar -xvf mindspore-lite-{version}-runtime-{os}-{device}.tar.gz
tar -xvf mindspore-lite-{version}-minddata-{os}-{device}.tar.gz
模型转换工具converter目录结构说明
转换工具仅在-I x86_64
编译选项下获得,内容包括以下几部分:
|
├── mindspore-lite-{version}-converter-{os}
│ └── converter # 模型转换工具
│ └── third_party # 第三方库头文件和库
│ ├── protobuf # Protobuf的动态库
├── flatbuffers # Flatbuffers的动态库
模型推理框架runtime及其他工具目录结构说明
推理框架可在-I x86_64
、-I arm64
和-I arm32
编译选项下获得,内容包括以下几部分:
当编译选项为
-I x86_64
时:| ├── mindspore-lite-{version}-runtime-x86-cpu │ └── benchmark # 基准测试工具 │ └── lib # 推理框架动态库 │ ├── libmindspore-lite.so # MindSpore Lite推理框架的动态库 │ └── third_party # 第三方库头文件和库 │ ├── flatbuffers # FlatBuffers头文件 │ └── include # 推理框架头文件 │ └── time_profiler # 模型网络层耗时分析工具
当编译选项为
-I arm64
时:| ├── mindspore-lite-{version}-runtime-arm64-cpu │ └── benchmark # 基准测试工具 │ └── lib # 推理框架动态库 │ ├── libmindspore-lite.so # MindSpore Lite推理框架的动态库 │ ├── libmindspore-lite-fp16.so # MindSpore Lite Float16算子性能优化库 │ ├── libmindspore-lite-optimize.so # MindSpore Lite量化算子性能优化库 │ └── third_party # 第三方库头文件和库 │ ├── flatbuffers # FlatBuffers头文件 │ └── include # 推理框架头文件 │ └── time_profiler # 模型网络层耗时分析工具
当编译选项为
-I arm32
时:| ├── mindspore-lite-{version}-runtime-arm32-cpu │ └── benchmark # 基准测试工具 │ └── lib # 推理框架动态库 │ ├── libmindspore-lite.so # MindSpore Lite推理框架的动态库 │ └── third_party # 第三方库头文件和库 │ ├── flatbuffers # FlatBuffers头文件 │ └── include # 推理框架头文件 │ └── time_profiler # 模型网络层耗时分析工具
libmindspore-lite-optimize.so
仅在runtime-arm64的输出包中存在,仅在ARMv8.2及以上版本且支持dotprod指令的CPU上使用的性能优化库。
libmindspore-lite-fp16.so
仅在runtime-arm64的输出包中存在,仅在ARMv8.2及以上版本且支持fp16的CPU上使用的性能优化库。编译ARM64默认可获得arm64-cpu的推理框架输出件,若添加
-e gpu
则获得arm64-gpu的推理框架输出件,此时包名为mindspore-lite-{version}-runtime-arm64-gpu.tar.gz
,编译ARM32同理。运行converter、benchmark或time_profiler目录下的工具前,都需配置环境变量,将MindSpore Lite和Protobuf的动态库所在的路径配置到系统搜索动态库的路径中。以0.7.0-beta版本下编译为例:配置converter:
export LD_LIBRARY_PATH=./output/mindspore-lite-0.7.0-converter-ubuntu/third_party/protobuf/lib:./output/mindspore-lite-0.7.0-converter-ubuntu/third_party/flatbuffers/lib:${LD_LIBRARY_PATH}
;配置benchmark和timeprofiler:export LD_LIBRARY_PATH=./output/mindspore-lite-0.7.0-runtime-x86-cpu/lib:${LD_LIBRARY_PATH}
。
图像处理库目录结构说明
图像处理库在-I arm64 -n lite_cv
编译选项下获得,内容包括以下几部分:
|
├── mindspore-lite-{version}-minddata-{os}-{device}
│ └── benchmark # 基准测试工具
│ └── include # 头文件(此处只展示和图像处理相关的文件)
│ ├── lite_cv # 图像处理库头文件
│ ├── image_process.h # 图像处理函数头文件
│ ├── lite_mat.h # 图像数据类结构头文件
│ └── lib # 动态库(此处只展示和图像处理相关的文件)
│ ├── libminddata-lite.so # 图像处理动态库
│ └── third_party # 第三方库头文件和库
│ ├── flatbuffers # Flatbuffers的动态库
│ └── time_profiler # 模型网络层耗时分析工具