ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

边缘AI部署实战:嵌入式工程师的Jetson与RK3588转型路线

边缘AI部署实战:嵌入式工程师的Jetson与RK3588转型路线 1. 从All in AI到把AI塞进板子一个嵌入式老兵的观察这两年All in AI的口号喊得震天响大模型训练集群动辄上万张卡云端推理的算力堆得让人麻木。但如果你是一个真正在板子上跑过代码的嵌入式工程师你会发现一个很有意思的反差真正让AI落地的最后一公里恰恰不在云端而在那些功耗只有几瓦、内存只有几个G、散热靠一块铝片的小盒子里。这就是边缘AIEdge 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 TOPSINT8约6 TOPSNPU内存数百GB8-16GB4-8GB功耗数百瓦到数千瓦10-25W3-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 Nano4GB内存跑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核CPU4个A764个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的SDKYocto支持主要靠社区维护的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设大了反而增加延迟。除非你是做离线批量处理否则batch1往往是最优的。预处理放到GPU/NPU上做。图像resize、归一化这些操作如果放在CPU上很可能成为瓶颈。Jetson上可以用CUDA做预处理RK3588上可以用RGA硬件加速把CPU解放出来。内存复用。推理框架通常会分配输入输出buffer如果每帧都重新分配释放开销很大。用固定buffer循环复用能省下不少时间。监控温度和频率。边缘设备散热条件差跑久了容易降频。用tegrastatsJetson或者读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当应用来做把底层当根基来守这个心态能让你少走很多弯路。这个领域变化很快新的芯片、新的框架、新的工具层出不穷。但底层的能力——对系统的理解、对硬件的把控、对工程问题的拆解——是不会过时的。把根扎深上面的枝叶怎么长都不怕。
返回列表