1. 从"All in AI"到"把AI塞进板子":一个嵌入式老兵的观察
这两年"All in AI"的口号喊得震天响,大模型训练集群动辄上万张卡,云端推理的算力堆得让人麻木。但如果你是一个真正在板子上跑过代码的嵌入式工程师,你会发现一个很有意思的反差:真正让AI落地的最后一公里,恰恰不在云端,而在那些功耗只有几瓦、内存只有几个G、散热靠一块铝片的小盒子里。这就是边缘AI(Edge AI)正在发生的事。
我做了十多年嵌入式,从裸机寄存器一路写到Linux驱动,再到这两年折腾Jetson和Rockchip平台上的模型部署。说实话,最开始我也觉得"边缘AI"是个被资本炒起来的概念,直到我自己把YOLOv5塞进一块Jetson Nano、把量化后的模型跑在RK3588的NPU上,看着它在没有网络、没有云服务器的环境下实时识别出画面里的目标,我才意识到:这不是概念,这是嵌入式工程师下一个十年的饭碗所在。
这篇文章想聊的不是"AI有多火"这种废话,而是一个更具体的问题:当一个传统嵌入式工程师面对边缘AI这个新战场时,他的技术栈需要补什么、平台该怎么选、坑在哪里、路怎么走。我会围绕Jetson、Rockchip、Yocto这几条主线,把从环境搭建到模型部署的完整链路拆开讲,也会分享一些只有真正上手才会知道的细节。不管你是刚入行的嵌入式新人,还是写了多年驱动想转型的老兵,应该都能从里面找到对自己有用的东西。
先说结论:边缘AI不是让嵌入式工程师去学深度学习理论,而是让你把已有的硬件、系统、驱动能力,和"模型部署"这个新技能嫁接起来。嫁接点找对了,转型没那么难;找错了,就会陷入"什么都学一点、什么都不精"的尴尬。
2. 边缘AI到底在嵌入式里解决什么问题
2.1 云端推理的三个硬伤
很多人第一反应是:模型放云上跑不就行了,为什么要费劲塞到设备里?这个问题我被人问过无数次,答案其实就藏在三个词里:延迟、带宽、隐私。
先说延迟。一个工业质检场景,产线每秒流过好几个工件,摄像头拍到画面后如果要先上传云端、等推理结果、再传回来控制机械臂,这个往返哪怕只有200毫秒,产线也早就把次品放过去了。边缘推理把这段延迟压到几十毫秒甚至几毫秒,这是云端无论如何优化都追不上的物理距离决定的。
再说带宽。一路1080P视频流不压缩大概每秒1.5Gbps,一个工厂几十路摄像头,全往云上传,网络成本能把项目预算吃穿。边缘侧本地推理,只需要上传"结果"——比如"第3号工位检测到缺陷"这样几十字节的元数据,带宽压力瞬间降两个数量级。
最后是隐私和数据合规。医疗影像、人脸、生产配方这类数据,很多场景根本不允许出本地设备。边缘AI让数据"不出门",这在很多行业是硬性要求,不是可选项。
2.2 边缘设备和云端的能力差距有多大
理解了这个"为什么",还得清醒认识"能到什么程度"。边缘设备的算力和云端完全不是一个量级,我列个直观的对比:
| 维度 | 云端GPU服务器 | 典型边缘设备(Jetson Orin NX) | 低端边缘(RK3588) |
|---|---|---|---|
| 算力 | 数百 TFLOPS | 约100 TOPS(INT8) | 约6 TOPS(NPU) |
| 内存 | 数百GB | 8-16GB | 4-8GB |
| 功耗 | 数百瓦到数千瓦 | 10-25W | 3-8W |
| 散热 | 机房空调 | 散热片+小风扇 | 被动散热 |
| 成本 | 数万到数十万 | 千元级 | 百元到千元级 |
这张表说明一个核心事实:边缘AI的关键词不是"大",而是"够用且省"。你不可能在边缘跑一个千亿参数的模型,但你可以跑一个经过量化、剪枝、蒸馏后的小模型,在特定任务上达到可用的精度。这就是边缘AI工程师的核心价值——不是训练模型,而是把模型"瘦身"到能在资源受限的硬件上跑起来,还要跑得稳、跑得快。
2.3 嵌入式工程师的天然优势在哪
这里我要说一个可能有点反直觉的观点:做边缘AI部署,嵌入式工程师比纯算法工程师更有优势。
为什么?因为模型部署这件事,80%的坑不在算法本身,而在系统层。你得懂交叉编译、懂驱动、懂内存管理、懂散热和功耗、懂怎么让NPU的算子和你的模型对得上。一个只会调PyTorch的算法工程师,面对一块RK3588的板子,可能连系统都刷不进去,更别说让模型跑在NPU上了。而这些恰恰是嵌入式工程师的看家本领。
所以转型的路径其实很清楚:保留你的系统和硬件能力,补上"模型部署"这一块拼图。不需要你去推导反向传播,但你需要知道什么是量化、什么是算子融合、什么是推理框架。这个学习曲线,比从零学嵌入式要平缓得多。
3. Jetson和Rockchip:两条主流路线的选型逻辑
3.1 Jetson系列:生态成熟但成本偏高
NVIDIA的Jetson系列是边缘AI里绕不开的存在。从早期的Jetson Nano,到现在的Orin Nano、Orin NX、AGX Orin,产品线覆盖了从入门到高端的全场景。它的最大优势是生态:CUDA、TensorRT、DeepStream这一整套工具链,几乎让模型部署变成了"半自动化"的事。
我最早用的是Jetson Nano,4GB内存,跑YOLOv5需要先转成TensorRT引擎,帧率大概能到十几帧,做个小demo完全够用。后来换到Orin NX,算力直接上了一个台阶,跑更大的模型、做多路视频分析都不在话下。Jetson Orin Nano部署Qwen这类小语言模型现在也有人在做,虽然吃力,但确实能跑起来。
但Jetson的问题也很明显:贵,而且供货和生态绑定NVIDIA。一块Orin NX的核心板加底板,成本轻松上千甚至几千,对于量产项目来说,这个BOM成本很难压下来。另外Jetson的功耗和散热要求也不低,Orin系列满载十几瓦到几十瓦,被动散热基本压不住。
3.2 Rockchip RK3588:性价比之王但生态要自己趟
Rockchip这两年在边缘AI圈子里火得不行,尤其是RK3588/RK3588S这颗芯片。8核CPU(4个A76+4个A55)、6 TOPS的NPU、支持8K视频编解码,价格却只有Jetson同算力产品的几分之一。对于成本敏感的量产项目,RK3588几乎是首选。
但它的代价是生态不如Jetson成熟。RK3588的NPU用的是Rockchip自家的RKNN工具链,模型要先转成RKNN格式才能跑在NPU上。这个转换过程比TensorRT要折腾,算子支持没那么全,遇到不支持的算子就得回退到CPU,性能直接掉一大截。而且Rockchip的文档和社区支持,说实话,和NVIDIA比还是有差距的,很多问题得靠自己啃源码或者泡社区。
我个人的经验是:做原型验证、追求开发效率,选Jetson;做量产、追求成本,选Rockchip。这不是绝对的,但大方向是这样。如果你的项目对成本不敏感、对开发周期敏感,Jetson能让你少踩很多坑;如果你要出货几万台,那RK3588省下来的成本足够你养一个团队去趟生态的坑。
3.3 选型时容易被忽略的三个维度
除了算力和价格,选型时还有几个维度经常被忽略,但实际项目里很致命:
第一是视频编解码能力。边缘AI项目十有八九和摄像头打交道,芯片能同时解码几路视频流,直接决定了你能接几个摄像头。RK3588支持多路解码,这点比同价位的很多方案强。
第二是接口丰富度。MIPI CSI、PCIe、USB、千兆网、CAN,这些接口决定了你的板子能接什么外设。工业场景里CAN和RS485经常是刚需,选型时一定要看清楚。
第三是长期供货承诺。嵌入式项目生命周期动辄五到十年,芯片厂商的供货稳定性比什么都重要。这一点上,大厂的承诺通常更靠谱,选型时一定要问清楚。
4. Yocto在边缘AI项目里的真实价值
4.1 为什么边缘AI项目绕不开Yocto
很多做应用开发的工程师对Yocto有天然的恐惧,觉得它复杂、学习曲线陡。但如果你做的是边缘AI产品,尤其是要量产的,Yocto几乎是绕不开的。原因很简单:边缘AI设备需要一个精简、可控、可复现的系统镜像。
Ubuntu这类通用发行版什么都给你装好了,但也意味着体积大、启动慢、攻击面广。一个边缘AI盒子,可能只需要Python运行时、推理框架、几个驱动和你的应用,其他一概不要。Yocto的价值就在于,它能让你从源码级别精确控制镜像里有什么、没有什么,构建出来的镜像可能只有几百MB,启动几秒就进应用。
更重要的是可复现性。Yocto用配方(recipe)和层(layer)描述整个构建过程,同样的配置在任何一台机器上构建出来的镜像都是一致的。这对量产和后期维护太重要了——你不会遇到"在我机器上好好的,到产线上就不行"这种问题。
4.2 给Jetson和RK3588搭Yocto的差异
Jetson和RK3588在Yocto上的支持程度差别很大。
Jetson有NVIDIA官方维护的meta-tegra层,配合Yocto可以构建出带CUDA、TensorRT的镜像。但NVIDIA的BSP更新节奏和Yocto版本经常对不齐,你得花时间找匹配的版本组合。我踩过的坑是:某个Yocto版本配某个L4T版本,构建出来的镜像CUDA跑不起来,最后发现是内核模块版本不匹配。这种问题只能靠查release note和社区issue解决。
RK3588这边,Rockchip官方提供的是基于Buildroot的SDK,Yocto支持主要靠社区维护的meta-rockchip层。社区项目ubuntu rockchip这类也在做,但成熟度参差不齐。用Yocto构建RK3588镜像,NPU驱动和RKNN运行时的集成需要自己写配方,这部分工作量不小。
我的建议是:如果团队没有Yocto经验,先从Buildroot或者厂商提供的SDK入手,把产品跑通,再考虑迁移到Yocto。不要一上来就啃Yocto,容易在构建系统上耗光耐心。
4.3 一个精简镜像的构建思路
假设你要给一块RK3588板子构建一个只跑推理应用的Yocto镜像,思路大概是这样:
# 1. 准备基础环境 git clone git://git.yoctoproject.org/poky git clone https://github.com/JeffyCN/meta-rockchip.git # 2. 初始化构建环境 source poky/oe-init-build-env build # 3. 在bblayers.conf里加入meta-rockchip层 # 4. 在local.conf里指定机器类型 MACHINE = "rk3588-evb" # 5. 构建最小镜像 bitbake core-image-minimal这只是骨架,实际项目里你要往镜像里加Python、加RKNN运行时、加你的应用配方。关键是理解Yocto的"层"机制:把厂商BSP放一层、你的应用放一层、通用配置放一层,这样升级和维护的时候互不干扰。
提示:Yocto构建第一次会下载大量源码,网络环境不好的话建议提前配置好镜像源,否则可能卡在下载阶段几个小时。
5. 从模型到板子:部署链路的完整拆解
5.1 模型转换:最容易被低估的一步
很多人以为模型部署就是"把训练好的模型拷到板子上跑",实际上中间隔着一整套转换流程。以RK3588为例,PyTorch训练的模型要先导出成ONNX,再用RKNN-Toolkit2转成RKNN格式,最后才能在板子上加载。
这个转换过程有几个高频坑:
算子不支持。RKNN对算子的支持是有限的,某些自定义算子或者较新的算子它不认识,转换时会报错或者自动回退到CPU。回退到CPU意味着这部分计算不走NPU,性能直接崩。解决办法要么是改模型结构避开这些算子,要么是自己实现算子。
量化精度损失。为了在NPU上跑得快,模型通常要做INT8量化。量化会带来精度损失,有时候损失大到模型直接不可用。这时候要做量化感知训练(QAT),或者在量化时保留部分层为FP16。这个过程需要反复调,没有一劳永逸的方案。
输入输出格式对不上。训练时的输入是NCHW,部署时可能要转成NHWC;预处理和后处理的逻辑要和训练时严格一致,差一点结果就全错。我见过有人因为归一化参数写错,模型在板子上输出全是乱码。
5.2 Jetson上的TensorRT加速实战
Jetson这边相对省心,因为有TensorRT。流程是:ONNX模型 -> TensorRT引擎 -> 部署。TensorRT会自动做算子融合、精度校准、kernel优化,你基本只需要调几个参数。
import tensorrt as trt # 构建TensorRT引擎 logger = trt.Logger(trt.Logger.WARNING) builder = trt.Builder(logger) network = builder.create_network(1 << int(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH)) parser = trt.OnnxParser(network, logger) with open("model.onnx", "rb") as f: parser.parse(f.read()) config = builder.create_builder_config() config.set_memory_pool_limit(trt.MemoryPoolType.WORKSPACE, 1 << 30) # 开启FP16精度 config.set_flag(trt.BuilderFlag.FP16) engine = builder.build_serialized_network(network, config) with open("model.engine", "wb") as f: f.write(engine)这段代码看着简单,但实际调的时候,set_memory_pool_limit给多大、要不要开INT8、动态shape怎么配,都是要结合具体模型和板子反复试的。工作空间给太小,构建会失败;给太大,板子内存不够。我的经验是先从1GB试起,不够再加。
5.3 推理性能调优的几个实操点
模型跑起来只是第一步,跑得好才是本事。几个我实际用下来有效的调优点:
批处理(batch)要慎用。边缘场景通常是实时单帧推理,batch设大了反而增加延迟。除非你是做离线批量处理,否则batch=1往往是最优的。
预处理放到GPU/NPU上做。图像resize、归一化这些操作如果放在CPU上,很可能成为瓶颈。Jetson上可以用CUDA做预处理,RK3588上可以用RGA硬件加速,把CPU解放出来。
内存复用。推理框架通常会分配输入输出buffer,如果每帧都重新分配释放,开销很大。用固定buffer循环复用,能省下不少时间。
监控温度和频率。边缘设备散热条件差,跑久了容易降频。用tegrastats(Jetson)或者读sysfs节点(Rockchip)监控温度和频率,必要时加散热或者限制功耗。
6. 那些只有上手才会知道的坑
6.1 散热不是小事,是生死线
我第一个边缘AI项目就栽在散热上。板子放在一个密闭的金属盒子里,跑推理跑了半小时,帧率从30掉到8。拆开一测,芯片温度到了95度,触发了降频保护。后来加了导热硅胶垫把热量导到外壳,又开了几个散热孔,问题才解决。
这件事给我的教训是:边缘AI项目的散热设计要在选型阶段就考虑,不能等出了问题再补。被动散热能压住的功耗是有限的,超过5W基本就得考虑主动散热或者大面积散热片。而且环境温度也要算进去,夏天车间40度,你的散热余量得留够。
6.2 电源稳定性决定系统稳定性
边缘设备经常用在供电环境恶劣的地方,电压波动、浪涌都是常态。AI推理时芯片功耗会突然拉高,如果电源设计余量不够,轻则重启,重则烧板子。
我的做法是:电源设计至少留50%余量,关键位置加TVS和滤波电容。尤其是用PoE供电或者车载场景,电源质量直接决定产品能不能用。这一点在实验室里很难复现,但到了现场就是高频故障。
6.3 模型更新和OTA的坑
产品部署出去之后,模型要迭代怎么办?这就涉及到OTA升级。边缘AI设备的OTA比普通设备复杂,因为镜像大、模型文件大,而且升级过程中不能影响正在跑的业务。
我踩过的坑是:升级时直接覆盖模型文件,结果升级到一半断电,模型文件损坏,设备变砖。后来改成A/B分区方案,新版本写到备用分区,校验通过后再切换,才算稳了。模型文件也一样,先写临时文件、校验MD5、再原子替换,不能直接覆盖。
6.4 别忽视"八股文"背后的真功夫
热词里出现了"嵌入式八股文""嵌入式面试题"这些词,我想说一句:边缘AI岗位的面试,八股文只是敲门砖,真正拉开差距的是你有没有真正把一个模型从训练环境搬到板子上跑通。我面试过不少人,能把YOLO的原理讲得头头是道,但问他怎么把模型转成RKNN、遇到算子不支持怎么办,就答不上来了。
所以如果你在准备转型,别只刷题,找个便宜的开发板(比如RK3588的开发板现在几百块就能买到),自己动手把一个开源模型部署上去,把整个链路走一遍。这个过程里踩的坑,比看十篇文章都值钱。
7. 嵌入式工程师的转型路线图
7.1 技能补齐的优先级
如果你是一个传统嵌入式工程师,想往边缘AI方向转,我建议按这个优先级补技能:
第一优先级:推理框架和模型转换。这是边缘AI的核心技能,包括ONNX、TensorRT、RKNN、TFLite这些。不用全会,但至少要精通一个平台的全链路。
第二优先级:Python和基础深度学习概念。你不需要会训练模型,但要能看懂模型结构、理解量化、知道什么是算子。Python是部署脚本和工具链的通用语言,必须会。
第三优先级:系统集成和优化。这部分你本来就有优势,但要往AI场景延伸——比如怎么让推理和视频采集流水线并行、怎么用硬件加速器做预处理。
第四优先级:模型微调。这是进阶技能,当现成模型不满足需求时,你需要能基于开源模型做微调。这个可以放到后面学。
7.2 用开源项目练手的具体建议
热词里有"嵌入式开源项目",我推荐几个适合练手的:
- Jetson Nano + YOLOv5:最经典的入门组合,资料多,踩坑有人帮你踩过。
- RK3588 + RKNN模型库:Rockchip官方有模型库,可以拿来跑通NPU部署全流程。
- AirSLAM + Jetson:如果你对SLAM感兴趣,这个组合能让你同时接触视觉和AI。
- 基于Simulink的STM32代码生成:虽然不直接是边缘AI,但能帮你理解模型到嵌入式代码的转换思路。
练手的时候不要只跑通就完事,要刻意去改参数、换模型、加功能,把每个环节都摸透。比如跑通YOLOv5之后,试试换成YOLOv8,看看转换流程有什么不同;试试把FP16换成INT8,看看精度和速度怎么变。
7.3 岗位选择:哪些方向更吃香
从热词"嵌入式最吃香10个岗位"能看出大家都在关心这个。就我观察,边缘AI相关的岗位里,这几类需求最旺:
边缘AI部署工程师:负责把模型部署到各种硬件平台,要求懂系统、懂推理框架、懂优化。这是最对口的转型方向。
AIoT系统工程师:负责整个智能物联网系统的架构,包括设备端AI、云端协同、数据链路。要求视野更宽。
嵌入式视觉工程师:专注视觉类应用,比如目标检测、人脸识别、SLAM。要求懂图像处理和视觉算法。
NPU驱动/固件工程师:偏底层,负责NPU的驱动和运行时。要求深厚的系统和驱动功底,门槛高但稀缺。
我的建议是先从"边缘AI部署工程师"切入,这个岗位和传统嵌入式技能重叠度最高,转型阻力最小。做熟了之后再往系统架构或者底层驱动方向延伸。
8. 我个人的一些体会
写了这么多,最后分享几点我自己趟出来的体会,不算总结,就是一些零碎的经验。
别被"AI"两个字吓住。边缘AI部署本质上是个工程问题,不是科研问题。你不需要发明新算法,你需要的是把现有算法在受限硬件上跑好的工程能力。这个能力,嵌入式工程师天生就有底子。
动手永远比看资料重要。我见过太多人收藏了一堆教程、买了一堆课,板子还在盒子里没拆封。边缘AI这东西,看一百篇文章不如自己把一块板子刷一遍系统、跑通一个模型。踩坑的过程就是学习的过程。
选平台要跟着项目走,别跟着热度走。Jetson火不代表它适合你的项目,RK3588便宜也不代表它什么都能干。先想清楚你的场景需要什么,再选平台。
保持对底层的敬畏。边缘AI再新,它也是跑在硬件上的。散热、电源、内存、时序这些老问题,一个都不会少。把AI当"应用"来做,把底层当"根基"来守,这个心态能让你少走很多弯路。
这个领域变化很快,新的芯片、新的框架、新的工具层出不穷。但底层的能力——对系统的理解、对硬件的把控、对工程问题的拆解——是不会过时的。把根扎深,上面的枝叶怎么长都不怕。