Skip to content

参考

基于 ONNX 标准 1.22(IR 13 / opset 27)+ ONNX Runtime 1.28.0 API 文档整理

速查

  • 标准库pip install onnx(创建/加载/校验/操作模型)
  • 推理引擎pip install onnxruntime(CPU)/ onnxruntime-gpu(CUDA)
  • IR 版本:当前 13(随 ONNX 1.22)
  • 标准 opset:当前 27(ai.onnx 域)
  • ORT 版本1.28.0(2026-07-25)
  • Python APIonnx.load/save/checkeronnxruntime.InferenceSession
  • 数据类型TensorProto.FLOAT(1) / UINT8(2) / INT8(3) / INT64(7) / FLOAT16(10) / BFLOAT16(16) / STRING(8)
  • 量化类型QuantType.QInt8/QUInt8/QInt4/QUInt4
  • 量化格式QuantFormat.QDQ/QOperator
  • 优化级别GraphOptimizationLevel.ORT_DISABLE_ALL/BASIC/EXTENDED/ALL
  • EP 列表:CPU/CUDA/TensorRT/TensorRT-RTX/CoreML/OpenVINO/oneDNN/DirectML/QNN/NNAPI/CANN/ROCm/MIGraphX/Vitis-AI/WebGPU/ACL/ArmNN/TVM/RKNPU/XNNPACK/Azure
  • 模型格式.onnx(protobuf);.ort(ORT 优化后的预编译格式)

模型结构(Protobuf)

ModelProto
├── ir_version
├── opset_import: [OperatorSetIdProto]    # {domain: "", version: 27}
├── producer_name / producer_version
├── graph: GraphProto
│   ├── name
│   ├── node: [NodeProto]
│   │   ├── name
│   │   ├── op_type                        # "Conv" / "MatMul" / ...
│   │   ├── domain                         # "" 表示标准域
│   │   ├── input: [str]                   # 边名
│   │   ├── output: [str]
│   │   └── attribute: [AttributeProto]    # 算子属性
│   ├── input: [ValueInfoProto]            # 含 shape 与 dtype
│   ├── output: [ValueInfoProto]
│   └── initializer: [TensorProto]         # 权重张量
  • ValueInfoProto:描述张量的 name/shape/dtype,shape 中 -1dim_param 表示动态
  • AttributeProto:算子属性(int/float/string/tensor/列表),如 Conv 的 kernel_shapestridespads

onnx Python API

python
import onnx

# 加载与保存
model = onnx.load("model.onnx")
onnx.save(model, "out.onnx")

# 校验
onnx.checker.check_model(model)                    # 抛异常即不合规

# 查看结构
print(model.ir_version)                            # 13
print([(opset.domain, opset.version) for opset in model.opset_import])  # [("", 27)]
graph = model.graph
for node in graph.node:
    print(node.op_type, node.input, "->", node.output)

# 版本转换
from onnx import version_converter
model_old = version_converter.convert_version(model, 21)

# 形状推断
import onnx.shape_inference
model_inferred = onnx.shape_inference.infer_shapes(model)

onnxruntime Python API

python
import onnxruntime as ort
import numpy as np

# 创建会话
sess = ort.InferenceSession(
    "model.onnx",
    providers=["CUDAExecutionProvider", "CPUExecutionProvider"],
)

# 元信息
inputs = sess.get_inputs()                         # [Input: name/shape/type]
outputs = sess.get_outputs()
print(inputs[0].name, inputs[0].shape, inputs[0].type)

# 推理
feed = {inputs[0].name: np.random.randn(*shape).astype(np.float32)}
result = sess.run(None, feed)                      # None=全部输出;或指定 [output_name]
result = sess.run(["logits"], feed)                # 只要 logits

# 多输出与绑定(避免重复拷贝)
binding = sess.io_binding()                        # 高性能 IO 绑定(CUDA 上零拷贝)

# 性能分析
sess.enable_profiling("trace.json")                # 输出 Chrome trace

SessionOptions 完整参数

python
opts = ort.SessionOptions()
opts.graph_optimization_level = ort.GraphOptimizationLevel.ORT_ENABLE_ALL
opts.intra_op_num_threads = 8
opts.inter_op_num_threads = 4
opts.execution_mode = ort.ExecutionMode.ORT_SEQUENTIAL  # 或 ORT_PARALLEL
opts.enable_cpu_mem_arena = True                    # 默认开(预分配池)
opts.enable_mem_pattern = True                      # 内存复用模式
opts.add_free_dimension_override_by_denotation("batch", 1)  # 固定动态维度
opts.log_severity_level = 3                         # 日志级别

量化 API

python
from onnxruntime.quantization import (
    quantize_dynamic, quantize_static,
    QuantType, QuantFormat, CalibrationDataReader,
    CalibrationMethod,
)

# 动态量化
quantize_dynamic(
    model_input="model.onnx",
    model_output="model_dyn.onnx",
    weight_type=QuantType.QInt8,                    # QInt8 / QUInt8 / QInt4 / QUInt4
    op_types_to_quantize=["MatMul", "Gemm", "Conv", "LSTM"],
    per_channel=True,                               # 按通道量化(精度更高)
)

# 静态量化(需校准数据)
quantize_static(
    model_input="model.onnx",
    model_output="model_static.onnx",
    calibration_data_reader=reader,
    quant_format=QuantFormat.QDQ,                   # QDQ(默认)/ QOperator
    activation_type=QuantType.QUInt8,
    weight_type=QuantType.QInt8,
    calibrate_method=CalibrationMethod.MinMax,      # MinMax / Entropy / Percentile
    per_channel=True,
    reduce_range=False,                             # True 用 7-bit 调试精度问题
)
参数取值说明
weight_typeQInt8/QUInt8/QInt4/QUInt4权重量化类型
activation_typeQUInt8/QInt8激活量化类型(仅静态)
quant_formatQDQ/QOperator量化表示格式
calibrate_methodMinMax/Entropy/Percentile校准算法(仅静态)
per_channelbool按通道(每输出通道独立 scale) vs 按张量
op_types_to_quantizelist只量化指定算子类型

Execution Provider 列表

EP(providers 字符串)厂商平台状态
CPUExecutionProvider通用全平台stable,默认
CUDAExecutionProviderNVIDIACUDA GPUstable
TensorrtExecutionProviderNVIDIATensorRTstable
TensorRTRTXExecutionProviderNVIDIARTX 显卡1.x 新增
OpenVINOExecutionProviderIntelCPU/iGPU/VPUstable
CoreMLExecutionProviderApplemacOS/iOSstable
DmlExecutionProviderMicrosoftWindows DirectMLstable
QnnExecutionProviderQualcommHTP/NPUstable
AiExecutionProvider / NnapiExecutionProviderAndroidNNAPIstable
CANNExecutionProvider华为昇腾 NPUpreview,社区维护
RocmExecutionProviderAMDROCmstable
MIGraphXExecutionProviderAMDMIGraphXstable
VitisAIExecutionProviderAMDVitis AIstable
WebGpuExecutionProviderW3C浏览器 GPU1.28 起独立插件
AclExecutionProviderArmArm Compute Librarystable
ArmNNExecutionProviderArmArm NN1.25 起移除
TvmExecutionProviderApacheTVMstable
RknpuExecutionProvider瑞芯微RKNPUstable
XnnpackExecutionProviderGoogleXNNPACKstable
AzureExecutionProviderMicrosoftAzure 云stable

opset 版本演进

ONNX 版本IR 版本标准 opset关键新增
1.13919LayerNormalization、DynamicQuantizeLinear 改进
1.14919(同上版本族)
1.15920GridSample、BitwiseShift 等
1.16921AffineGrid、DeformConv 等
1.17922bicubic resize 等
1.18923Macro 扩展、更多量化算子
1.19–1.219–1024–26IR 10 引入更多类型
1.221327bfloat16 完善、新注意力算子

升级 opset 可用新算子,但目标引擎需支持对应版本——ONNX Runtime 1.28 支持 opset 27 全集。

IR 版本与 Python onnx 兼容

IR 版本onnx 库版本关键变化
71.6–1.8早期稳定版
81.9–1.12引入更多类型
91.13–1.21opset 19–26 主流期
131.22+当前,支持最新算子与类型

模型格式与工具

  • .onnx:标准 protobuf 格式,跨引擎通用
  • .ort:ONNX Runtime 预编译格式(prepacked),启动更快但锁定引擎版本
  • .pb:并非 ONNX 格式(是 TF 的 protobuf),勿混淆
  • ONNX Model Zoogithub.com/onnx/models 官方预训练模型仓库
  • Netronnetron.app 在线可视化工具
  • onnxsimpip install onnxsim && onnxsim model.onnx model_sim.onnx 图简化
  • onnxoptimizer:图优化(常量折叠、融合),部分功能已并入 ORT

官方资源