编译

查看源文件

本章节介绍如何快速编译出MindSpore Lite,其包含的模块如下:

模块

支持平台

说明

converter

Linux

模型转换工具

runtime

Linux、Android

模型推理框架

benchmark

Linux、Android

基准测试工具

time_profiler

Linux、Android

性能分析工具

Linux环境编译

环境要求

  • 当安装完依赖项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

显示编译帮助信息

-I参数变动时,如-I x86_64变为-I arm64,添加-i参数进行增量编译不生效。

编译示例

首先,在进行编译之前,需从MindSpore代码仓下载源码。

git clone https://gitee.com/mindspore/mindspore.git

然后,在源码根目录下执行如下命令,可编译不同版本的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
    

编译输出

编译完成后,进入mindspore/output/目录,可查看编译后生成的文件。文件分为两部分:

  • mindspore-lite-{version}-converter-{os}.tar.gz:包含模型转换工具converter。

  • mindspore-lite-{version}-runtime-{os}-{device}.tar.gz:包含模型推理框架runtime、基准测试工具benchmark和性能分析工具time_profiler。

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

模型转换工具converter目录结构说明

转换工具仅在-I x86_64编译选项下获得,内容包括以下几部分:

|
├── mindspore-lite-{version}-converter-{os} 
│   └── converter # 模型转换工具
│   └── third_party # 第三方库头文件和库
│       ├── protobuf # Protobuf的动态库

模型推理框架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_profile # 模型网络层耗时分析工具
    
    
  • 当编译选项为-I arm64时:

    |
    ├── mindspore-lite-{version}-runtime-arm64-cpu
    │   └── benchmark # 基准测试工具
    │   └── lib # 推理框架动态库
    │       ├── libmindspore-lite.so # MindSpore Lite推理框架的动态库
    │       ├── liboptimize.so # MindSpore Lite算子性能优化库  
    │   └── third_party # 第三方库头文件和库
    │       ├── flatbuffers # FlatBuffers头文件
    │   └── include # 推理框架头文件  
    │   └── time_profile # 模型网络层耗时分析工具
      
    
  • 当编译选项为-I arm32时:

    |
    ├── mindspore-lite-{version}-runtime-arm64-cpu
    │   └── benchmark # 基准测试工具
    │   └── lib # 推理框架动态库
    │       ├── libmindspore-lite.so # MindSpore Lite推理框架的动态库
    │   └── third_party # 第三方库头文件和库
    │       ├── flatbuffers # FlatBuffers头文件
    │   └── include # 推理框架头文件  
    │   └── time_profile # 模型网络层耗时分析工具
      
    
  1. liboptimize.so仅在runtime-arm64的输出包中存在,仅在ARMv8.2和支持fp16特性的CPU上使用。

  2. 编译ARM64默认可获得arm64-cpu的推理框架输出件,若添加-e gpu则获得arm64-gpu的推理框架输出件,此时包名为mindspore-lite-{version}-runtime-arm64-gpu.tar.gz,编译ARM32同理。

  3. 运行converter、benchmark或time_profile目录下的工具前,都需配置环境变量,将MindSpore Lite和Protobuf的动态库所在的路径配置到系统搜索动态库的路径中。以0.7.0-beta版本下编译为例:配置converter:export LD_LIBRARY_PATH=./output/mindspore-lite-0.7.0-converter-ubuntu/third_party/protobuf/lib:${LD_LIBRARY_PATH};配置benchmark和timeprofiler:export LD_LIBRARY_PATH=./output/mindspore-lite-0.7.0-runtime-x86-cpu/lib:${LD_LIBRARY_PATH}