网罗开发 (小红书、快手、视频号同名)

  大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等方向。在移动端开发、鸿蒙开发、物联网、嵌入式、云原生、开源等领域有深厚造诣。

图书作者:《ESP32-C3 物联网工程开发实战》
图书作者:《SwiftUI 入门,进阶与实战》
超级个体:COC上海社区主理人
特约讲师:大学讲师,谷歌亚马逊分享嘉宾
科技博主:华为HDE/HDG

我的博客内容涵盖广泛,主要分享技术教程、Bug解决方案、开发工具使用、前沿科技资讯、产品评测与使用体验。我特别关注云服务产品评测、AI 产品对比、开发板性能测试以及技术报告,同时也会提供产品优缺点分析、横向对比,并分享技术沙龙与行业大会的参会体验。我的目标是为读者提供有深度、有实用价值的技术洞察与分析。

展菲:您的前沿技术领航员
👋 大家好,我是展菲!
📱 全网搜索“展菲”,即可纵览我在各大平台的知识足迹。
📣 公众号“Swift社区”,每周定时推送干货满满的技术长文,从新兴框架的剖析到运维实战的复盘,助您技术进阶之路畅通无阻。
💬 微信端添加好友“fzhanfei”,与我直接交流,不管是项目瓶颈的求助,还是行业趋势的探讨,随时畅所欲言。
📅 最新动态:2025 年 3 月 17 日
快来加入技术社区,一起挖掘技术的无限潜能,携手迈向数字化新征程!


前言

最近在做鸿蒙 AI 应用开发的时候,需要用到 MindSpore Lite 的模型转换工具。官方提供的预编译版本虽然方便,但有时候我们需要自定义一些功能,或者想要了解底层的实现细节,这时候就需要从源码编译了。

刚开始编译的时候,遇到了不少问题:环境配置不对、依赖版本不匹配、编译参数设置错误等等。折腾了好几天才把环境配好,成功编译出转换工具。今天我们就来聊聊 MindSpore Lite 源码编译的环境要求和详细步骤,以及在实际开发中可能遇到的问题和解决方案。

为什么需要从源码编译

在实际开发中,我们通常有几种方式获取 MindSpore Lite 的转换工具:

使用预编译版本:这是最简单的方式,直接下载官方提供的预编译工具,解压就能用。但这种方式有个问题,就是功能是固定的,无法自定义。

从源码编译:虽然过程复杂一些,但可以自定义功能,比如添加新的算子支持、修改转换逻辑等。而且从源码编译还能帮助我们更好地理解 MindSpore Lite 的工作原理。

什么时候需要从源码编译

  1. 需要支持新的模型格式或算子
  2. 需要修改转换逻辑
  3. 需要调试转换过程中的问题
  4. 想要了解底层实现细节

环境要求详解

编译 MindSpore Lite 转换工具对环境有一定要求,让我们详细看看每个要求:

操作系统要求

推荐系统:Linux x86_64(推荐 Ubuntu 18.04.02LTS)

MindSpore Lite 的编译主要在 Linux 环境下进行,虽然理论上其他 Linux 发行版也可以,但 Ubuntu 18.04.02LTS 是官方测试最多的版本,兼容性最好。

为什么选择 Ubuntu 18.04.02LTS

  1. 官方主要在这个版本上测试
  2. 依赖库的版本比较稳定
  3. 社区支持好,遇到问题容易找到解决方案

如果你用的是其他 Linux 发行版,比如 CentOS、Debian 等,理论上也可以,但可能需要调整一些依赖库的安装方式。

检查系统版本

# 查看系统版本
cat /etc/os-release

# 查看系统架构
uname -m

确保是 x86_64 架构,如果是 ARM 架构,编译过程可能会有所不同。

GCC 编译器要求

要求:GCC ≥ 7.3.0

GCC 是编译 C/C++ 代码的编译器,MindSpore Lite 需要较新版本的 GCC 来支持 C++17 特性。

检查 GCC 版本

gcc --version

如果版本不够,需要升级 GCC

在 Ubuntu 上,可以通过以下方式安装新版本的 GCC:

# 添加 PPA 源
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update

# 安装 GCC 7 或更高版本
sudo apt-get install gcc-7 g++-7

# 设置默认版本(可选)
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 60
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 60

验证安装

gcc --version
g++ --version

CMake 构建工具要求

要求:CMake ≥ 3.18.3

CMake 是跨平台的构建工具,MindSpore Lite 使用 CMake 来管理编译过程。

检查 CMake 版本

cmake --version

如果版本不够,需要升级 CMake

在 Ubuntu 上,可以通过以下方式安装新版本的 CMake:

# 下载 CMake
wget https://github.com/Kitware/CMake/releases/download/v3.18.3/cmake-3.18.3-Linux-x86_64.tar.gz

# 解压
tar -xzf cmake-3.18.3-Linux-x86_64.tar.gz

# 移动到系统目录
sudo mv cmake-3.18.3-Linux-x86_64 /opt/cmake

# 添加到 PATH(添加到 ~/.bashrc 或 ~/.zshrc)
export PATH=/opt/cmake/bin:$PATH

# 重新加载配置
source ~/.bashrc

验证安装

cmake --version

Git 版本控制工具要求

要求:Git ≥ 2.28.0

Git 用来获取 MindSpore Lite 的源码。

检查 Git 版本

git --version

如果版本不够,需要升级 Git

在 Ubuntu 上,可以通过以下方式安装新版本的 Git:

# 添加 PPA 源
sudo add-apt-repository ppa:git-core/ppa
sudo apt-get update

# 安装最新版本的 Git
sudo apt-get install git

其他依赖工具

除了上面这些主要工具,还需要一些其他的依赖:

基础开发工具

sudo apt-get update
sudo apt-get install -y build-essential
sudo apt-get install -y libssl-dev
sudo apt-get install -y libffi-dev
sudo apt-get install -y python3-dev
sudo apt-get install -y python3-pip

这些工具在编译过程中可能会用到,建议提前安装好。

编译步骤详解

环境配置好后,就可以开始编译了。让我们一步步来看:

第一步:获取源码

首先需要获取 MindSpore Lite 的源码:

# 克隆 MindSpore 仓库
git clone https://gitee.com/mindspore/mindspore.git

# 进入源码目录
cd mindspore

如果网络不好,也可以使用镜像源:

# 使用 Gitee 镜像
git clone https://gitee.com/mindspore/mindspore.git

选择合适的分支

# 查看所有分支
git branch -a

# 切换到稳定版本(根据实际需求选择)
git checkout r2.0  # 或其他稳定版本

建议使用稳定版本,而不是最新的开发版本,因为开发版本可能不够稳定。

第二步:进入编译目录

获取源码后,需要进入编译目录:

cd mindspore/mindspore/lite

这个目录包含了 MindSpore Lite 的源码和编译脚本。

第三步:配置 PyTorch 转换支持(可选)

如果你需要支持 PyTorch 模型的转换,需要先配置相关环境变量:

设置环境变量

# 启用 PyTorch 模型转换
export MSLITE_ENABLE_CONVERT_PYTORCH_MODEL=on

# 设置 PyTorch 库路径(根据实际安装路径调整)
export LIB_TORCH_PATH=/path/to/libtorch

# 设置库搜索路径
export LD_LIBRARY_PATH=$LIB_TORCH_PATH/lib:$LD_LIBRARY_PATH

下载 PyTorch C++ 库

如果还没有安装 PyTorch C++ 库,需要先下载:

# 创建目录
mkdir -p ~/libtorch
cd ~/libtorch

# 下载 PyTorch C++ 库(根据你的系统选择对应版本)
wget https://download.pytorch.org/libtorch/cpu/libtorch-cxx11-abi-shared-with-deps-2.0.0%2Bcpu.zip

# 解压
unzip libtorch-cxx11-abi-shared-with-deps-2.0.0+cpu.zip

# 设置环境变量
export LIB_TORCH_PATH=~/libtorch/libtorch
export LD_LIBRARY_PATH=$LIB_TORCH_PATH/lib:$LD_LIBRARY_PATH

验证环境变量

echo $MSLITE_ENABLE_CONVERT_PYTORCH_MODEL
echo $LIB_TORCH_PATH
echo $LD_LIBRARY_PATH

确保环境变量设置正确,否则编译时可能会报错。

第四步:执行编译

环境配置好后,就可以执行编译了:

# 执行编译脚本
bash build.sh -I x86_64 -j 8

编译参数说明

  • -I x86_64:指定目标平台为 x86_64
  • -j 8:使用 8 个并行任务编译,可以根据你的 CPU 核心数调整

如果你的 CPU 核心数较多,可以增加 -j 后面的数字,比如 -j 16,这样可以加快编译速度。

编译过程

编译过程可能需要一些时间,具体取决于你的机器配置。编译过程中会输出很多日志,如果遇到错误,可以根据错误信息来排查问题。

常见编译错误

  1. 依赖库缺失:如果提示缺少某个库,需要安装对应的开发包
  2. 版本不匹配:如果提示版本不对,需要升级或降级相关工具
  3. 内存不足:如果编译过程中内存不足,可以减少 -j 参数的值

第五步:查找编译产物

编译完成后,编译产物会在 output/ 目录下:

# 查看编译产物
ls -la output/

转换工具位置

转换工具位于 output/tools/converter/converter/ 目录下:

# 查看转换工具
ls -la output/tools/converter/converter/

# 测试转换工具
./output/tools/converter/converter/converter_lite --help

如果能看到帮助信息,说明编译成功了。

实际应用场景

让我们看看几个实际应用场景,了解如何在实际项目中使用编译好的转换工具:

场景一:转换 TensorFlow 模型

如果你有一个 TensorFlow 模型需要转换为 MindSpore Lite 格式:

# 使用转换工具转换模型
./output/tools/converter/converter/converter_lite \
    --fmk=TFLITE \
    --modelFile=model.tflite \
    --outputFile=model

这个命令会将 TensorFlow Lite 模型转换为 MindSpore Lite 格式。

场景二:转换 ONNX 模型

如果你有一个 ONNX 模型:

./output/tools/converter/converter/converter_lite \
    --fmk=ONNX \
    --modelFile=model.onnx \
    --outputFile=model

场景三:转换 PyTorch 模型

如果你配置了 PyTorch 支持,可以转换 PyTorch 模型:

./output/tools/converter/converter/converter_lite \
    --fmk=PYTORCH \
    --modelFile=model.pt \
    --outputFile=model

场景四:自定义转换选项

转换工具还支持很多自定义选项:

./output/tools/converter/converter/converter_lite \
    --fmk=TFLITE \
    --modelFile=model.tflite \
    --outputFile=model \
    --configFile=config.txt \
    --weightFile=weight.bin

可以通过配置文件来设置更多的转换选项。

常见问题排查

在实际编译过程中,可能会遇到各种问题,让我们看看常见的问题和解决方案:

问题一:编译时提示缺少依赖库

错误信息error: cannot find -lxxx

解决方案

# 安装缺失的开发库
sudo apt-get install libxxx-dev

# 或者通过包管理器搜索
apt-cache search xxx

问题二:CMake 版本不够

错误信息CMake 3.18.3 or higher is required

解决方案:按照前面的步骤升级 CMake 到 3.18.3 或更高版本。

问题三:GCC 版本不够

错误信息error: 'xxx' is not a member of 'std'

解决方案:升级 GCC 到 7.3.0 或更高版本。

问题四:PyTorch 库找不到

错误信息error: cannot find libtorch

解决方案

  1. 检查 LIB_TORCH_PATH 环境变量是否正确设置
  2. 检查 LD_LIBRARY_PATH 是否包含 PyTorch 库路径
  3. 确认 PyTorch 库文件确实存在

问题五:编译时间过长

解决方案

  1. 增加并行编译任务数:-j 16 或更高
  2. 使用更快的机器或云服务器
  3. 只编译需要的组件,而不是全部编译

总结

编译 MindSpore Lite 转换工具虽然过程复杂一些,但掌握了方法后其实也不难。关键是要把环境配置好,然后按照步骤一步步来。

关键点总结:

  1. 环境要求要满足:Linux x86_64、GCC ≥ 7.3.0、CMake ≥ 3.18.3、Git ≥ 2.28.0
  2. 源码获取要正确:使用官方仓库或镜像,选择稳定版本
  3. 环境变量要设置:如果需要 PyTorch 支持,要正确设置相关环境变量
  4. 编译参数要合理:根据机器配置调整并行任务数
  5. 问题排查要耐心:遇到错误要仔细看日志,按错误信息排查

最佳实践:

  1. 使用 Ubuntu 18.04.02LTS,兼容性最好
  2. 提前安装所有依赖,避免编译过程中中断
  3. 使用稳定版本的源码,而不是最新的开发版本
  4. 编译前检查所有环境变量是否正确设置
  5. 保存编译日志,方便后续排查问题
Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐