ONNX 是什么?一篇讲清楚大模型时代的“中间语言”

张开发
2026/4/9 8:42:37 15 分钟阅读

分享文章

ONNX 是什么?一篇讲清楚大模型时代的“中间语言”
在 AI 工程里有一个很容易被忽视但一旦用上就离不开的东西——ONNX。很多人第一次接触它是在“模型导出”“推理加速”这些场景里。但如果你只把 ONNX 当成一个“文件格式”那就低估它了。它本质上是AI 模型世界的通用中间层协议。一、先说结论ONNX 是干什么的ONNX全称 Open Neural Network Exchange。一句话理解把模型从“某个框架专属”变成“跨框架、跨平台可运行”的标准格式。也就是你用 PyTorch 训练的模型可以导出成 ONNX然后在 TensorRT / ONNX Runtime / OpenVINO / 边缘设备 上跑这件事本质上是在解决一个工程问题模型训练环境 ≠ 模型部署环境二、为什么 ONNX 会出现在没有 ONNX 之前AI 工程是这样的阶段工具训练PyTorch / TensorFlow推理还是 PyTorch / TensorFlow问题马上就来了推理环境很重依赖巨大不适合部署到手机浏览器边缘设备高性能推理引擎GPU/推理卡于是大家开始想一件事能不能把模型“翻译”成一个中立格式ONNX 就是这个“翻译层”。三、ONNX 的核心结构本质不是文件是计算图ONNX 文件.onnx其实描述的是一个东西计算图Computational Graph可以理解为输入 → 运算节点 → 运算节点 → 输出每一个节点Conv卷积Relu激活MatMul矩阵乘Attention注意力整个模型被拆成一个“可执行流程图”。这点非常关键ONNX 不关心你怎么训练的它只关心你怎么计算。四、一个典型工程流程在实际项目里ONNX 一般这么用1️⃣ 训练阶段框架内# PyTorch model MyModel() torch.save(model)2️⃣ 导出 ONNXtorch.onnx.export(model, dummy_input, model.onnx)3️⃣ 推理阶段脱离训练框架import onnxruntime as ort session ort.InferenceSession(model.onnx) outputs session.run(None, {input: data})4️⃣ 进一步优化可选TensorRTNVIDIA GPU 极致加速OpenVINOIntel 优化CoreML苹果设备WebNN / ONNX Web浏览器运行五、ONNX 在大模型时代的价值很多人会问现在都大模型了ONNX 还有用吗答案是更重要了。1️⃣ 推理成本问题大模型部署本质就是把推理成本压到极致ONNX 是连接模型PyTorch / HuggingFace推理引擎TensorRT / ORT的关键桥梁。2️⃣ 多端部署一个模型可能要跑在云端 GPU边缘设备浏览器手机ONNX 提供统一表达。3️⃣ Agent / MCP 架构里的作用你现在在做 MCP / Agent这里其实有个很关键的点模型只是能力的一部分执行环境才是核心ONNX 的价值就在于让能力可以被“调度系统”自由分发比如Agent 调度某个视觉模型不关心它是 PyTorch 还是 TensorFlow只要是 ONNX就能跑六、ONNX 的局限工程上必须知道ONNX 很强但不是银弹。1️⃣ 不支持所有算子有些 PyTorch 自定义算子 导不出来或者要手写转换2️⃣ 动态 shape 支持有限尤其在 NLP / 大模型里变长输入处理复杂attention 结构转换困难3️⃣ 转换 ≠ 性能提升ONNX 只是中间层 真正性能取决于ONNX RuntimeTensorRT硬件优化七、你应该在什么时候用 ONNX结合你的工程背景给一个很实用的判断✅ 适合用 ONNX 的场景要做推理服务降成本要部署到非 Python 环境要跑在 GPU 推理引擎上要做多端统一模型格式❌ 不建议用 ONNX 的场景纯研究 / 训练阶段模型频繁修改结构强依赖自定义算子八、一句话总结给你周报用ONNX 本质是 AI 模型的中间执行协议通过统一计算图表达实现模型从训练框架到多端推理环境的解耦与高效部署。

更多文章