4. 开发环境搭建:硬件平台选型与SDK部署
好,咱们进入实战环节的第一步——搭环境。说实话,很多同学觉得搭环境就是装个软件、解压个包,没什么技术含量。但我得说,这一步要是没走稳,后面调试的时候能让你怀疑人生。我自己就吃过这个亏,所以今天把这部分掰开揉碎了讲清楚。
4.1 硬件平台选型:RK3588 vs BM1684
先聊聊硬件选型。目前市面上主流的边缘AI芯片,瑞芯微RK3588和算能BM1684是绕不开的两个选择。我个人的习惯是,先看项目需求,再定芯片,千万别反过来。
| 对比项 | RK3588 | BM1684 |
|---|---|---|
| NPU算力 | 6 TOPS (INT8) | 17.6 TOPS (INT8) |
| CPU架构 | 4×Cortex-A76 + 4×Cortex-A55 | 8×Cortex-A53 |
| 内存支持 | LPDDR4/LPDDR5,最大32GB | LPDDR4,最大12GB |
| 典型功耗 | 约8W | 约15W |
| 开发工具链 | RKNN Toolkit | BMNNSDK / TPU-MLIR |
| 适用场景 | 轻量级AI + 多媒体处理 | 中高算力AI推理 |
简单说下我的看法。RK3588的优势在于CPU性能强,A76大核跑通用计算很猛,而且集成了GPU、VPU,适合做带显示或视频处理的AI应用。BM1684呢,NPU算力是它的杀手锏,17.6 TOPS在边缘端算是很能打的了,但CPU部分偏弱,A53跑复杂逻辑会吃力。
4.2 交叉编译工具链安装
交叉编译,说白了就是在你的x86电脑上编译出能在ARM芯片上跑的程序。嗯,这里要注意,工具链版本一定要和芯片匹配,否则编译出来的程序跑不起来。
4.2.1 RK3588交叉编译工具链
瑞芯微官方提供了基于GCC的交叉编译工具链。我个人习惯用aarch64-linux-gnu这个版本,因为RK3588是64位ARMv8架构。
# 下载工具链(以Ubuntu 20.04为例)
wget https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz
# 解压到指定目录
tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz -C /opt/
# 配置环境变量
export PATH=/opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin:$PATH
# 验证安装
aarch64-linux-gnu-gcc --version
4.2.2 BM1684交叉编译工具链
算能这边,官方推荐使用gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu。注意,BM1684虽然是64位,但它的系统环境对工具链版本有要求,太新或太旧都可能出问题。
# 下载算能官方工具链
wget https://sophon-file.sophon.cn/sophon-prod-s3/drive/23/03/07/13/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu.tar.xz
# 解压
tar -xvf gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu.tar.xz -C /opt/
# 设置环境变量(建议写入~/.bashrc)
export PATH=/opt/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin:$PATH
# 测试
aarch64-none-linux-gnu-gcc --version
你想想看,工具链装好后,怎么验证它能不能用?我一般写个简单的hello world,交叉编译后放到板子上跑一下。这一步虽然简单,但能提前暴露很多问题。
4.3 SDK部署
SDK部署是重头戏。说白了,就是把芯片厂商提供的开发包放到你的开发环境里,让它能正常编译和链接。
4.3.1 RK3588 SDK部署(RKNN Toolkit)
瑞芯微的AI开发主要依赖RKNN Toolkit。这个工具负责把训练好的模型(比如PyTorch、TensorFlow)转换成RK3588能跑的.rknn格式。
# 安装RKNN Toolkit(Python环境)
pip install rknn-toolkit2 -i https://pypi.douban.com/simple/
# 验证安装
python -c "from rknn.api import RKNN; print('RKNN Toolkit installed successfully')"
# 下载RK3588的NPU驱动和固件(放到板子上)
# 在板子上执行:
sudo dpkg -i rknpu-driver_*.deb
4.3.2 BM1684 SDK部署(BMNNSDK)
算能的SDK叫BMNNSDK,它包含了模型转换工具、运行时库、示例代码等。我个人习惯把SDK放在/opt/sophon/目录下,方便管理。
# 下载BMNNSDK(约2GB,耐心等待)
wget https://sophon-file.sophon.cn/sophon-prod-s3/drive/23/03/07/13/BMNNSDK2.7.0.tar.gz
# 解压到/opt
sudo tar -xzvf BMNNSDK2.7.0.tar.gz -C /opt/
sudo mv /opt/BMNNSDK2.7.0 /opt/sophon
# 设置环境变量
export BMNNSDK_HOME=/opt/sophon
export PATH=$BMNNSDK_HOME/bin:$PATH
export LD_LIBRARY_PATH=$BMNNSDK_HOME/lib:$LD_LIBRARY_PATH
# 验证
bm_version
这里有个小技巧。SDK里的示例代码一定要跑一遍,哪怕只是编译通过。我在项目中遇到过,SDK版本更新后,某些API的调用方式变了,但文档没及时更新。跑一遍示例能帮你确认当前版本的实际用法。
4.4 环境验证:跑通第一个AI程序
环境搭好了,总得验证一下。我习惯用官方提供的分类模型来测试,比如MobileNet。这样能快速确认NPU、CPU、内存、工具链是否都正常工作。
# RK3588上跑MobileNet示例
cd /path/to/rknn-toolkit2/examples/mobilenet
python test.py
# 如果输出类似以下内容,说明环境OK:
# --- TOP 5 ---
# 0: 286, 0.89209
# 1: 285, 0.05127
# ...
好了,环境搭建这部分就到这里。说白了,硬件选型看需求,工具链安装看架构,SDK部署看版本。这三样都对了,后面的开发才能顺风顺水。下一章咱们开始写第一个异构计算程序,到时候见。