《Born》第19章:ONNX 导入——打通 PyTorch 与 Go 的模型桥梁

ONNX(Open Neural Network Exchange)是模型交换的事实标准。Born 的 onnx 包让你把 PyTorch 训练的模型直接加载到 Go 中运行。

ONNX(Open Neural Network Exchange)是模型交换的事实标准。Born 的 onnx 包让你把 PyTorch 训练的模型直接加载到 Go 中运行。


PyTorch → ONNX → Born 完整流程

# Python 端:导出 ONNX
import torch
model.eval()
dummy_input = torch.randn(1, 3, 224, 224)
torch.onnx.export(model, dummy_input, "model.onnx",
    input_names=["input"], output_names=["output"],
    opset_version=17)

// Go 端:加载并推理
backend := cpu.New()
model, err := onnx.Load("model.onnx", backend)

input := tensor.FromSlice(data, tensor.Shape{1, 3, 224, 224}, backend)
outputs, err := model.Forward(input.Raw())


支持的算子

Born 支持 49 个 ONNX 算子(OpSet 14-18):

类别算子
数学Add, Sub, Mul, Div, Pow, Sqrt, Exp, Log
矩阵MatMul, Gemm, Transpose
激活ReLU, Sigmoid, Tanh, Softmax, Gelu, Silu
形状Reshape, Squeeze, Unsqueeze, Concat, Split, Slice
卷积Conv, ConvTranspose, MaxPool, AveragePool
归一化BatchNormalization, LayerNormalization, InstanceNormalization

不支持的算子怎么办?

1. ONNX Simplifier:onnxsim model.onnx model_simple.onnx 2. OpSet 降级:用旧版本算子语义 3. 自定义算子注册:

onnx.RegisterOp("MyCustomOp", func(inputs []tensor.Tensor) ([]tensor.Tensor, error) {
    // 你的实现
})


📘 《Born》连载技术书,第 19/22 章。

暂无表态

想参与讨论或点赞?登录后使用完整功能

讨论回复(0)

暂无回复,登录后可参与讨论
合作

智谱 GLM-5 已上线

在智谱开放平台 BigModel.cn 打造 AI 应用。新一代旗舰模型 GLM-5 在推理、代码、智能体综合能力达到开源模型 SOTA。

领取 2000万 Tokens