1. 课程导论与开发环境搭建

各位同学好,我是你们这门课的主讲。在正式开始之前,我想先聊聊——为什么我们要花一整章来讲环境搭建?

说实话,我见过太多人栽在第一步。项目做到一半发现编译器版本不对,或者板子连不上,最后排查两天发现是 SSH 配置少了个参数。这种坑,我踩过不止一次。所以这一章,咱们把地基打牢。

1.1 嵌入式AI:到底在做什么?

嵌入式AI,说白了就是把深度学习模型塞进一个资源受限的硬件里,让它能实时跑推理。你想想看,云端跑一个 ResNet 可能只要几十毫秒,但在一个功耗只有几瓦的板子上,同样的模型可能得跑几秒——这中间的差距,就是我们要解决的问题。

我个人习惯把嵌入式AI部署拆成三个环节:

  • 模型训练:在 PC 上用 PyTorch/TensorFlow 训好模型
  • 模型转换与优化:把模型转成目标硬件能吃的格式(比如 RKNN、TensorRT),顺便做量化、剪枝
  • 推理框架移植:把推理引擎(比如 NCNN、MNN、Tengine)交叉编译到板子上,再写应用层代码调用

这门课主要聚焦在后两个环节。训练部分我们默认你已经会了,不会也没关系——我会在课程里给一些现成的模型做演示。

核心认知:嵌入式AI不是"把模型跑起来"就完事了,而是"在功耗、算力、内存的三角约束下,跑得又快又稳"。

1.2 目标硬件选型:RK3588 vs Jetson Orin

选硬件这件事,我建议你根据项目需求来,别盲目追高。下面这张表是我在实际项目中总结的对比:

维度 RK3588 Jetson Orin NX
NPU算力 6 TOPS (INT8) 70 TOPS (INT8)
CPU 4×A76 + 4×A55 8×Cortex-A78AE
内存 LPDDR4X 最大32GB LPDDR5 最大16GB
功耗 约10W(典型) 15W-25W(可配置)
推理框架支持 RKNN Toolkit(闭源) TensorRT(闭源)
价格 约¥800-1500(核心板) 约¥3000-5000(模组)
生态成熟度 国内社区活跃,文档偏中文 NVIDIA官方支持,英文文档为主

我个人建议:如果你做的是轻量级视觉应用(比如人脸检测、车牌识别),RK3588 性价比很高。但如果你要做多路视频分析或者大模型推理,Jetson Orin 的算力优势就体现出来了。

我的经验:曾经有个项目,客户非要拿 RK3588 跑 YOLOv8s 的 FP16 版本,结果帧率只有 8fps。后来换成 INT8 量化,直接飙到 30fps。所以选硬件之前,先想清楚你的模型精度和速度的平衡点在哪。

1.3 交叉编译工具链安装

交叉编译,说白了就是在你的 x86 电脑上编译出能在 ARM 板子上运行的二进制文件。为什么不能直接在板子上编译?因为板子的 CPU 太弱了,编译一个 OpenCV 可能要两个小时——你受得了吗?反正我受不了。

下面以 RK3588 为例,演示工具链的安装步骤:

  1. 下载交叉编译器:从 Rockchip 官方 GitHub 获取 gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu
  2. 解压到指定目录:tar -xvf gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.xz -C /opt/
  3. 配置环境变量:将工具链路径加入 ~/.bashrc
export PATH=/opt/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin:$PATH
export CC=aarch64-none-linux-gnu-gcc
export CXX=aarch64-none-linux-gnu-g++
  1. 验证安装:运行 aarch64-none-linux-gnu-gcc --version,看到版本信息即成功

注意:我曾经遇到过一个问题——用 Ubuntu 20.04 自带的 gcc 交叉编译出来的程序,在板子上跑的时候报 "Floating point exception"。后来发现是工具链的 glibc 版本和板子上的不匹配。所以建议你尽量用板子厂商提供的工具链,别自己从 Linaro 随便下。

对于 Jetson Orin,情况稍有不同。NVIDIA 提供的是 SDK Manager,它会帮你安装交叉编译环境以及 TensorRT、CUDA 等依赖。我个人习惯在 x86 主机上装一个 Ubuntu 20.04 的 Docker 镜像,然后在里面跑 SDK Manager,这样不会污染宿主机环境。

1.4 SSH 与文件传输配置

板子买回来,第一件事就是连上它。SSH 是最常用的方式。我建议你按以下步骤来:

  1. 给板子刷系统:RK3588 用 RKDevTool 烧录,Jetson Orin 用 SDK Manager 刷机
  2. 获取板子 IP:通过串口或路由器后台查看
  3. 开启 SSH 服务:板子默认一般会开,如果没有,执行 sudo systemctl start ssh
  4. 配置免密登录:生成密钥对,把公钥拷贝到板子上
# 在主机上执行
ssh-keygen -t rsa -b 4096
ssh-copy-id root@<板子IP>

文件传输我推荐用 rsync,而不是 scp。为什么?因为 rsync 支持断点续传和增量同步。你想想看,如果你编译了一个 500MB 的库,传到一半网络断了——用 scp 就得重来,用 rsync 只需要补传剩下的部分。

# 同步本地目录到板子
rsync -avz --progress ./build/ root@<板子IP>:/home/root/app/

小技巧:我习惯在 ~/.ssh/config 里配置板子的别名,这样就不用每次输 IP 了:

Host rk3588
    HostName 192.168.1.100
    User root
    Port 22
    IdentityFile ~/.ssh/id_rsa

之后直接 ssh rk3588 就能连上,省事不少。

1.5 本章知识体系总览

下面这张图把本章的核心逻辑串起来了。你可以把它当作一个路线图,后续每章都会在这个框架里展开。

嵌入式AI部署知识体系总览 嵌入式AI部署知识体系总览 训练好的模型 目标硬件选型 RK3588 + RKNN Jetson Orin + TensorRT 交叉编译工具链 + SSH 可运行的推理程序 模型转换与量化 推理框架移植 应用层代码

从这张图你可以看到,整个部署流程是一条清晰的链路:模型 → 硬件选型 → 环境搭建 → 可运行程序。后续章节会沿着这条链路,逐个环节深入。

1.6 本章小结

这一章我们做了三件事:

  • 理清了嵌入式AI的完整链路——不只是"跑模型",而是从选型到部署的全流程
  • 对比了 RK3588 和 Jetson Orin 的差异——选型不是看参数,而是看你的场景
  • 搭建了交叉编译环境和 SSH 传输——这是后续所有实验的基础