环境搭建:Ubuntu配置、Python虚拟环境、PyTorch安装与Android Studio
说实话,模型移植这件事,很多人一上来就急着写代码、调模型。但我个人的经验是——环境没搭好,后面全是坑。我在早期做MobileViT落地时,就因为在NDK版本上栽过跟头,浪费了整整两天。所以这一章,咱们把地基打牢。
核心目标:在一台干净的Ubuntu机器上,配齐从模型训练到端侧部署所需的全部工具链。
2.1 Ubuntu基础环境配置
我习惯用Ubuntu 20.04 LTS,稳定、兼容性好。如果你用的是22.04,也没问题,但要注意CUDA的版本匹配。
首先,更新系统包:
sudo apt update && sudo apt upgrade -y
sudo apt install build-essential cmake git wget curl vim -y
这里有个小细节——build-essential包含了gcc、g++等编译工具,后面编译Android NDK的native代码时会用到。我曾经遇到过有人漏装这个,结果编译OpenCV时报了一堆莫名其妙的错。
我的习惯:装完系统后,先装一个htop和neofetch,方便监控资源、查看系统信息。虽然跟模型移植无关,但排查问题时很有用。
2.2 Python虚拟环境管理
为什么要用虚拟环境?说白了,就是防止不同项目之间的包冲突。我见过太多人把包装到系统Python里,最后搞到连pip都用不了。
我个人推荐conda,尤其是做深度学习的朋友。它不仅能管理Python版本,还能管理CUDA相关的包。
# 安装Miniconda
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
# 创建虚拟环境
conda create -n mobilevit python=3.8 -y
conda activate mobilevit
嗯,这里要注意——Python版本我选3.8,因为PyTorch 1.12对3.8支持最好。你如果非要用3.10,也不是不行,但有些老库可能不兼容。
避坑指南:我曾经在Python 3.10上装onnxruntime,结果发现某些算子不支持。后来老老实实退回3.8。所以,别追新,稳定第一。
2.3 PyTorch安装与验证
PyTorch的安装,核心是选对CUDA版本。我建议先查一下你的显卡驱动支持的最高CUDA版本:
nvidia-smi
# 看右上角的 "CUDA Version: 11.7"
然后去PyTorch官网选对应的安装命令。以CUDA 11.7为例:
pip install torch==1.13.1+cu117 torchvision==0.14.1+cu117 --extra-index-url https://download.pytorch.org/whl/cu117
装完后,一定要验证一下:
python -c "import torch; print(torch.__version__); print(torch.cuda.is_available())"
如果输出True,恭喜你,GPU环境通了。如果输出False,别慌——先检查驱动,再检查CUDA版本是否匹配。我遇到过最奇葩的一次,是有人装了两套CUDA,系统路径乱了。
我的建议:如果你只是做模型移植,不涉及训练,其实CPU版本的PyTorch也够用。但为了后面转ONNX时的调试方便,还是建议装GPU版。
2.4 Android Studio与NDK配置
这部分是很多人的噩梦。Android Studio本身不难装,难的是NDK版本的选择和CMake的配置。
2.4.1 安装Android Studio
去官网下载Linux版,解压后运行./studio.sh就行。我习惯把它放到/opt/目录下:
sudo mv android-studio /opt/
cd /opt/android-studio/bin
./studio.sh
第一次启动会引导你安装SDK。我建议把SDK路径设到一个好记的地方,比如~/Android/Sdk。
2.4.2 NDK版本选择
这里有个关键点——不是越新越好。MobileViT模型移植时,我推荐使用NDK r23c。为什么?因为r23c对C++17支持好,而且兼容大部分ONNX Runtime的版本。
在Android Studio里,通过SDK Manager安装NDK:
- 打开 SDK Manager → SDK Tools 选项卡
- 勾选 NDK (Side by side)
- 选择 23.1.7779620(对应r23c)
我曾经踩过的坑:用NDK r25编译ONNX Runtime时,链接阶段报undefined reference错误。查了两天,最后发现是NDK版本太高,某些符号被废弃了。换成r23c,一次通过。
2.4.3 CMake与工具链配置
Android Studio自带CMake,但版本可能比较老。我建议手动装一个更新的:
sudo apt install cmake
cmake --version # 确保版本 >= 3.18
然后在项目的build.gradle里指定NDK路径:
android {
ndkVersion "23.1.7779620"
defaultConfig {
externalNativeBuild {
cmake {
cppFlags "-std=c++17 -O2"
abiFilters "arm64-v8a", "armeabi-v7a"
}
}
}
}
这里abiFilters我只留了arm64-v8a和armeabi-v7a。x86的模拟器用不到,去掉能减少编译时间。
2.5 整体环境结构图
下面这张图,是我自己整理的环境依赖关系。你照着搭,基本不会漏东西:
2.6 验证环境是否就绪
所有东西装完后,我习惯跑一个快速验证脚本。你可以在终端里依次执行:
# 1. 检查Python
python --version # 应输出 Python 3.8.x
# 2. 检查PyTorch
python -c "import torch; print('PyTorch:', torch.__version__)"
# 3. 检查NDK
ls ~/Android/Sdk/ndk/23.1.7779620/
# 4. 检查CMake
cmake --version # 应 >= 3.18
如果全部通过,恭喜你——环境搭建完成。接下来就可以正式开始MobileViT的模型移植了。
最后说一句:环境搭建这件事,看起来琐碎,但值得你花时间一次搞定。我见过太多人因为环境问题,在模型移植的中途卡住,最后不得不从头再来。嗯,别走那条弯路。