第一章:推理引擎全景图
各位同学,今天咱们来聊聊推理引擎的全景图。说实话,我刚入行那会儿,面对一堆推理引擎的名字,头都大了。TensorRT、ONNX Runtime、OpenVINO、TFLite、NCNN、MNN……每个都说自己快,每个都说自己好。到底选哪个?
嗯,别急。今天我就带你把它们捋清楚。
1.1 推理引擎是什么?
说白了,推理引擎就是把训练好的模型,在目标设备上跑起来的工具。它负责把模型的计算图优化、压缩、量化,然后高效地执行。
你想想看,训练好的模型就像一本菜谱。推理引擎就是那个能帮你把菜做出来的厨师。不同的厨师,擅长的菜系不一样,用的灶台也不一样。
核心要点:推理引擎的核心价值在于——在有限的硬件资源下,最大化推理速度。我见过不少团队,模型精度很高,但部署到设备上跑不动,最后只能砍模型。这就是没选对引擎的后果。
1.2 主流推理引擎逐个看
咱们一个一个来。我按我自己的使用频率和场景,给大家排个序。
1.2.1 TensorRT —— 英伟达的杀手锏
如果你用的是NVIDIA的GPU,那TensorRT基本是首选。它能把FP32的模型量化到FP16甚至INT8,速度提升好几倍。
我记得有一次,一个客户要求把检测模型跑到30ms以内。原模型在PyTorch上要120ms。我用TensorRT做了INT8量化,加上层融合,最后跑到了18ms。客户当场就竖了大拇指。
我的建议:TensorRT对NVIDIA GPU优化极好,但只支持NVIDIA硬件。如果你用AMD或Intel的GPU,就别想了。
1.2.2 ONNX Runtime —— 跨平台的万金油
ONNX Runtime是我个人最常用的引擎之一。为什么?因为它支持的硬件太多了。CPU、GPU、NPU,甚至手机端都能跑。
ONNX本身是一个模型交换格式。你训练好的模型,转成ONNX格式,然后用ONNX Runtime去跑。这样你就不用为每个硬件写一套推理代码。
我做过一个项目,需要在Windows、Linux、ARM三个平台上部署同一个模型。用ONNX Runtime,一套代码搞定。省了多少事啊。
1.2.3 OpenVINO —— Intel生态的利器
OpenVINO是Intel推出的推理引擎。它主要针对Intel的CPU、集成显卡、VPU等硬件做了深度优化。
如果你用的是Intel的硬件,OpenVINO能给你带来惊喜。它能把模型的计算图重新编排,充分利用CPU的SIMD指令集和GPU的并行能力。
注意:OpenVINO对非Intel硬件支持有限。我曾经试过在AMD的CPU上跑,性能差了一大截。所以,选它之前,先看看你的硬件是不是Intel的。
1.2.4 TFLite —— 移动端的王者
TFLite是TensorFlow Lite的简称。它专门为移动端和嵌入式设备设计。模型小、速度快、功耗低。
我做过一个手机端的实时美颜应用。模型用TFLite部署,在骁龙865上跑到了30fps。而且模型大小只有2MB,用户下载无压力。
TFLite还支持硬件加速,比如Android的NNAPI和iOS的Core ML。这一点很实用。
1.2.5 NCNN —— 腾讯的开源良心
NCNN是腾讯开源的推理引擎。它最大的特点是——纯CPU优化。不依赖任何GPU,在ARM CPU上跑得飞快。
我有个朋友做安防摄像头,用的就是NCNN。摄像头里没有GPU,只有一颗ARM CPU。NCNN把模型优化得服服帖帖,每帧只要20ms。
NCNN还支持Vulkan加速,如果你有支持Vulkan的GPU,也能用上。
1.2.6 MNN —— 阿里巴巴的移动端引擎
MNN是阿里巴巴开源的推理引擎。它和NCNN类似,也是主打移动端和嵌入式设备。但MNN在iOS上的优化更好一些。
我对比过NCNN和MNN在iPhone上的表现。MNN的推理速度比NCNN快了约15%。这可能是因为MNN对苹果的Metal API做了深度优化。
1.3 各引擎的定位与生态
好了,咱们用一张表来总结一下。这样你一眼就能看明白。
| 引擎 | 定位 | 主要硬件 | 生态特点 |
|---|---|---|---|
| TensorRT | GPU高性能推理 | NVIDIA GPU | 生态封闭,但性能极致 |
| ONNX Runtime | 跨平台通用推理 | CPU/GPU/NPU | 生态开放,支持硬件多 |
| OpenVINO | Intel硬件优化 | Intel CPU/GPU/VPU | Intel生态,工具链完善 |
| TFLite | 移动端推理 | ARM CPU/GPU/NPU | TensorFlow生态,社区大 |
| NCNN | ARM CPU推理 | ARM CPU | 腾讯开源,轻量级 |
| MNN | 移动端推理 | ARM CPU/GPU | 阿里开源,iOS优化好 |
1.4 怎么选?我的经验之谈
选推理引擎,说白了就是看你的硬件和场景。
- 如果你有NVIDIA GPU:无脑选TensorRT。性能最好,没有之一。
- 如果你需要跨平台:选ONNX Runtime。一套代码,到处跑。
- 如果你用Intel硬件:选OpenVINO。别浪费了Intel的优化。
- 如果你做手机App:Android选NCNN,iOS选MNN。或者直接用TFLite,省心。
- 如果你做嵌入式设备:NCNN或MNN,看芯片架构。
避坑指南:我曾经在一个项目里,一开始选了TensorRT,但后来客户要求换AMD的GPU。结果TensorRT不支持,只能重写推理代码。所以,选引擎之前,先确认硬件会不会变。
1.5 小结
这一章,咱们把主流的推理引擎都过了一遍。每个引擎都有自己的定位和生态。没有最好的引擎,只有最适合你场景的引擎。
下一章,我会带大家深入TensorRT的配置和优化。到时候咱们手把手操作,保证你学完就能用。
嗯,今天就到这里。有问题随时问我。