
ONNX 模型核心概念完整梳理ONNXOpen Neural Network Exchange开放神经网络交换格式是一套跨框架通用的深度学习模型存储 / 交换标准解决 PyTorch、TensorFlow、Paddle、Caffe 等框架模型互通、推理部署统一的问题。一、顶层结构ModelProtoONNX 模型整体.onnx文件本质是 Protocol Bufferprotobuf序列化后的二进制文件顶层对象叫ModelProto包含 6 大核心字段ir_versionONNX IR 版本号算子、语法规范由它定义不同版本算子存在兼容差异。opset_import算子集版本每个 opset 定义一批算子行为推理引擎必须匹配对应 opset。producer_name / producer_version导出模型的框架torch/tensorflow与版本。graph核心计算图 GraphProto所有网络层、张量、权重都存在这里。metadata_props自定义元数据模型名称、输入输出描述、校准信息等。functions自定义算子函数封装重复子图减少图冗余。二、核心GraphProto 计算图Graph 是 ONNX 的计算主体由节点、张量、权重、输入输出构成类似有向无环图 DAG1. NodeProto 算子节点网络中每一层Conv、ReLU、Add、MatMul等对应一个 Nodeop_type算子名称Conv、BatchNormalization、Softmax 等input当前节点输入张量名称列表字符串output当前节点输出张量名称列表字符串attribute算子超参卷积核大小、步幅、padding、通道数等name节点标识名用于图调试、剪枝修改数据流规则节点输出 下一个节点输入通过张量名字串联整张图。2. TensorProto 张量权重 / 常量存储模型静态参数卷积权重、偏置、BN 均值方差、常量数值等。dims张量形状data_type数据类型FLOAT32/FLOAT16/INT8/INT64 等raw_data二进制存储数值体积远小于明文存储区分Initializer可训练权重和Constant固定常量3. ValueInfoProto 张量信息动态张量描述运行时中间特征图、输入输出张量的形状、数据类型name张量名和 Node 的 input/output 对应type包含维度、数据类型支持动态维度用字符串N、C、H、W表示可变尺寸4. graph.input / graph.outputinput模型对外输入图像、坐标、特征向量每个输入是 ValueInfooutput模型推理输出检测框、分类概率、BEV 特征5. Initializer 初始化权重归属于 Graph是图内静态权重集合属于 TensorProto 导出模型时可选择外部权重超大模型权重单独存.binonnx 文件只存图结构。三、关键标准概念IR Opset1. IRIntermediate Representation中间表示ONNX IR 是统一计算语义规范规定图、节点、张量、属性的数据结构算子输入输出顺序、维度定义规则 ir_version 是 IR 全局版本opset 是算子子集版本二者独立。2. Opset算子集ONNX 官方维护多套算子标准每一个 opset 版本会新增算子如 LayerNormalization、GridSample修改算子行为Conv 填充规则、BatchNorm 计算逻辑变更废弃旧算子核心约束推理引擎TensorRT、ONNXRuntime、Apollo Inference只支持对应范围内的 opset版本不匹配会报错。四、数据类型与维度体系基础数据类型浮点FLOATfp32、FLOAT16、DOUBLE整型INT8/UINT8量化、INT32、INT64坐标、索引布尔BOOL维度表示静态维度固定数字推理时尺寸不可变动态维度符号batch/N/H/W支持任意输入尺寸未知维度?部分推理引擎不支持五、高级核心组件1. Attribute 属性算子超参数分多种类型整数、浮点数、数组、字符串、张量、子图。 例Conv 的kernel_shape[3,3]、strides[1,1]、pads[1,1,1,1]。2. Subgraph 子图用于控制流算子If、Loop、Scan内部嵌套独立 Graph实现分支、循环逻辑。3. FunctionProto 自定义算子函数复用重复子图逻辑如残差块、注意力模块类似封装函数简化大图结构减少节点数量。4. Quantization 量化相关QDQ 模型量化 ONNX 核心算子QuantizeLinear浮点转 int8DequantizeLinearint8 还原浮点 通过zero_point、scale完成量化映射是低精度推理基础。六、数据流运行逻辑极简流程推理输入数据绑定 graph.input 张量按节点依赖顺序遍历 Graph 所有 Node读取输入张量中间特征 / Initializer 权重执行 op_type 对应算子计算生成输出张量所有节点执行完成后取出 graph.output 作为结果七、配套生态关键概念ONNX Runtime微软官方跨平台推理引擎解析 ONNX Graph 执行加速ONNX Simplifier图化简工具移除冗余节点、常量折叠、消除无用 ReshapeGraphSurgeon节点级图编辑工具你常用的剪枝、通道修改、增删节点External Data大模型权重外置解决单 onnx 文件过大问题Shape Inference形状推导自动补全所有中间张量维度推理必备三大平台部署区别对比理论上 ONNX 是通用交换格式三者都能部署但实现路径、约束、性能差异极大不是直接丢同一个 .onnx 就能跑。GPUNVIDIA/AMD生态最完善ONNX 原生友好部署门槛最低NPU海思昇腾、地平线、寒武纪、瑞芯微等端侧 AI 芯片需要专用工具链做 ONNX 转模型 编译限制算子、结构TPU谷歌 TPU含 Cloud TPU、Edge TPU不原生直接读 ONNX必须转 TensorFlow Lite / XLA IR转换链路最长、限制最多。GPU,NPU,TPU三大平台部署1. 底层运行逻辑差异1GPUNVIDIA RTX/A/H100、AMD GPUGPU 是通用并行计算硬件支持标准浮点 / 量化算子有成熟 ONNX 解析栈主流方案ONNX Runtime GPU / TensorRT优先直接加载 ONNXPyTorch/TensorFlow 后端也可导入 ONNX核心流程ONNX → 直接解析/轻量化优化 → 编译为 CUDA/ROCm 内核 → GPU 执行优势算子支持最全动态尺寸、复杂结构Transformer、BEV、循环子图、QDQ 量化基本全覆盖。2NPU端侧 / 边缘专用 AI 加速器NPU 是专用神经网络硬件架构固定、指令集私有不原生支持 ONNX流程统一范式ONNX → 厂商转换工具ATC/DNNC/NNCompiler→ 厂商私有离线模型(.om/.bin/.nb) → NPU Runtime 加载运行关键ONNX 仅作为中间交换载体最终不会直接跑 ONNX转换阶段会做算子映射、算子融合、硬件调度适配强约束不支持复杂动态分支、大量动态 shape、小众算子不兼容部分 ONNX opset超出能力会 fallback 到 CPU。3TPUGoogle Edge TPU / Cloud TPU v4/v5eTPU 基于 XLA/TensorFlow 生态原生不识别 ONNX链路最长标准部署链路ONNX → ONNX-TensorFlow 转换 → SavedModel/TFLite → TPU Compiler 编译 → TPU 执行Edge TPU 仅支持 TFLite 量化模型云端 TPU 依赖 XLA 编译图短板ONNX 转 TF 极易出现算子不匹配、维度逻辑不一致大量自定义算子、动态操作不支持。2. 转换链路、工具链区别表格平台是否直接加载 ONNX核心工具链输出模型格式NVIDIA GPU是onnxruntime-gpu、trtexec、onnx-simplifier.onnx/.trt 引擎文件国产 NPU昇腾 / 地平线否ATC、地平线 ModelConverter.om、.bin、.nb 私有格式Google TPU否onnx-tensorflow、tflite_convert、edgetpu_compiler.tflite、XLA 编译二进制3. 算子与模型结构兼容性差异GPU兼容所有 ONNX opset、全部标准算子支持子图 If/Loop、动态输入维度、大尺度 Transformer、残差多分支、QDQ 量化、FP16/FP32/INT8不兼容仅出现在自定义算子可通过 Plugin 插件扩展。NPU仅支持厂商算子库内映射的标准算子限制复杂动态 shape、循环控制流、大量逐元素运算、超大通道 Conv、非对称量化易不支持超出能力的节点只能切分CPU/NPU 混合推理性能暴跌不同厂商 NPU 算子支持表不互通一套 ONNX 不能通用多款 NPU。TPUEdge TPU 只支持 INT8 静态量化 TFLiteFP32/FP16 性能极差大量 ONNX 算子转 TF 后丢失等价实现如 GridSample、多版本 Conv、自定义归一化对张量维度排布敏感ONNX NCHW 需转 TF NHWC转换出错直接编译失败。4. 量化与精度支持区别GPUFP32 / FP16 / BF16 / INT8 / INT4 全支持QDQ ONNX 原生解析TensorRT 量化工具链成熟NPU主流只支持 UINT8/INT8 对称量化部分新款支持 FP16必须在转换阶段完成量化校准原生 QDQ 模型经常需要重写TPU Edge强制 INT8 静态量化不支持动态量化浮点推理速度极慢几乎不用于业务部署。5. 动态输入尺寸支持GPU完美支持动态 batch、动态 H/W运行时自动重调内核NPU多数仅支持固定尺寸少数高端 NPU 有限动态 batch动态分辨率开销大Edge TPU仅固定输入尺寸编译时锁定 shape无法动态调整。6. 部署开发与调试成本GPU最低 工具开源、文档丰富、Netron 可视化、报错清晰可快速迭代调图、剪枝、修改 ONNX 节点NPU中等偏高 厂商闭源工具链报错晦涩出现算子不兼容只能修改网络结构 / 重导出 ONNX需要适配硬件对齐维度、融合规则TPU最高 双层转换ONNX→TF→TFLite→TPU每一层都可能引入维度、算子 bug调试链路长社区资料少。7. 性能优化手段差异GPU算子融合、FP16/INT8 量化、TensorRT 层融合、多流并行、CUDA Graph可直接在 ONNX 层面优化NPU依赖转换工具离线融合、算子切分、权重重排优化动作写在转换配置文件无法直接修改 ONNX 生效TPU依赖 XLA 编译器自动优化人为可调空间极小网络结构必须贴合 TF 固化写法。总结核心区别一句话GPUONNX 一等公民直接加载、全算子兼容、灵活动态尺寸开发最简单NPUONNX 只是中间交换文件必须离线编译成私有模型算子 / 动态性受限软硬深度绑定TPUONNX 间接兼容需要中转 TensorFlow/TFLite限制最多、链路最长仅适合原生 TF 生态模型。