1. ONNX Runtime 概述:什么是ONNX Runtime、为什么选择ONNX Runtime、ONNX Runtime在ARM设备上的应用场景

大家好,我是你们这期课程的讲师。在嵌入式AI这个领域摸爬滚打了快十年,我踩过的坑,可能比你们写过的代码还多(笑)。今天咱们正式开始第一讲,聊聊ONNX Runtime。

说实话,我第一次接触ONNX Runtime是在一个智能相机的项目上。当时要在ARM Linux的板子上跑一个目标检测模型,TensorFlow和PyTorch的推理框架都试过,要么编译太慢,要么内存爆炸。后来一个老同事甩给我一句话:「试试ONNX Runtime吧。」嗯,这一试,就再也没换过。

1.1 什么是ONNX Runtime?

ONNX Runtime,简称ORT。说白了,它就是一个跨平台的推理引擎。你训练好的模型,不管是用PyTorch、TensorFlow还是Scikit-learn,只要转成ONNX格式,ORT就能帮你跑起来。

我个人的理解是:它像一个「模型翻译官」。你想想看,不同框架训练出来的模型,就像不同国家的人说不同语言。ONNX是中间语言,ORT就是那个能听懂所有语言、还能高效执行任务的翻译官。

核心要点:

  • ONNX(Open Neural Network Exchange):开放神经网络交换格式,是模型的中立表示。
  • ONNX Runtime:微软开源的推理引擎,负责加载ONNX模型并高效执行。
  • 支持多种硬件后端:CPU、GPU、NPU、DSP,当然也包括ARM。

为什么会需要这个东西?你想想,如果你在PC上用PyTorch训练了一个模型,要部署到树莓派或者RK3588上,难道还要在ARM上装个PyTorch吗?那编译时间够你喝三杯咖啡的。ORT就是来解决这个问题的。

1.2 为什么选择ONNX Runtime?

这个问题我经常被问到。市面上推理引擎那么多,TensorRT、OpenVINO、TFLite,为什么偏偏选ORT?

我总结了几点,都是我在实际项目中体会到的:

优势 说明 我的经验
跨平台 Windows、Linux、macOS、Android、iOS,一套代码到处跑 我在ARM Linux和Android上用的是同一套ORT库,改个配置就行
性能优化 自动图优化、算子融合、内存复用 曾经有个模型,ORT比原始PyTorch推理快了3倍,我都不敢信
轻量级 可以裁剪,最小几十KB 在资源紧张的MCU上,我裁剪到只有200KB,照样跑模型
生态丰富 支持Pytorch、TensorFlow、Keras、Sklearn等 团队里有人用TF,有人用PyTorch,ORT统一了部署流程
开源免费 MIT协议,商用无压力 老板最喜欢这点,不用额外花钱买授权

小提示:ORT还有一个隐藏优势——它的社区非常活跃。我遇到过一个算子不支持的问题,在GitHub上提了issue,第二天微软的工程师就回复了,还给了临时patch。这种响应速度,在开源项目里真的不多见。

1.3 ONNX Runtime在ARM设备上的应用场景

ARM设备,说白了就是咱们身边那些「小盒子」——手机、平板、树莓派、各种开发板、智能摄像头、工业边缘盒子。这些设备的特点是:功耗低、算力有限、内存紧张。ORT在ARM上能做什么?我举几个真实的例子。

场景一:智能摄像头(ARM Cortex-A系列)

我之前做过一个项目,在海思Hi3519A上跑人脸检测。芯片是ARM Cortex-A73,算力大概1.2TOPS。用ORT加载一个MobileNet-SSD模型,推理时间控制在30ms以内,完全满足实时视频流的需求。

嗯,这里要注意:ARM设备上跑模型,内存带宽往往是瓶颈。ORT的图优化能自动把一些算子合并,减少内存访问次数。这个优化在ARM上效果特别明显。

场景二:工业边缘盒子(ARM Cortex-A + NPU)

现在很多ARM芯片都集成了NPU,比如瑞芯微RK3588、算能BM1684。ORT可以通过Execution Provider(执行提供者)来调用NPU。我习惯的做法是:先用CPU跑一遍做基准测试,然后切换到NPU,看看加速比。

避坑指南:我曾经在RK3588上踩过一个坑——NPU驱动版本和ORT版本不匹配,导致模型加载直接崩溃。后来我学乖了,每次升级ORT之前,先查一下官方文档里支持的NPU SDK版本。这个习惯救了我好几次。

场景三:智能家居设备(ARM Cortex-M系列)

别以为ORT只能跑在Linux上。对于Cortex-M这种MCU,ORT也有对应的Micro版本。我帮一个客户做过智能语音唤醒词检测,在STM32H7上跑一个只有几十KB的模型,功耗控制在100mW以内。

说实话,在MCU上跑模型,挑战更大。内存只有几百KB,Flash也就几MB。ORT的Micro版本可以做到极致裁剪,只保留你需要的算子。我建议你们在项目初期就规划好算子列表,不要一股脑全编译进去。

场景四:移动端APP(ARM Android/iOS)

手机上的应用就更常见了。美颜、滤镜、实时翻译、AR特效,背后都有ORT的影子。ORT的Android和iOS版本都做了针对性优化,比如利用NEON指令集加速矩阵运算。

我记得有一次,一个做直播APP的客户找到我,说他们的美颜模型在低端手机上卡得不行。我帮他们切换到ORT,启用了FP16推理,帧率从15fps直接飙到30fps。客户当场就拍板了。

1.4 小结

好了,第一讲的内容就到这里。总结一下:

  • ONNX Runtime是一个跨平台、高性能的推理引擎
  • 它支持从云端到边缘端、从服务器到MCU的全场景部署
  • 在ARM设备上,ORT通过图优化、算子融合、硬件加速等手段,能充分发挥芯片性能

下一讲,我们会深入ARM设备的硬件特性,聊聊为什么ARM上跑模型「没那么简单」。到时候我会分享一些我在树莓派上「翻车」的经历,保证你们有收获。

咱们下节课见。