部署
PyTorch 的部署形态都在回答同一个问题:怎样把模型带到一个没有训练代码的地方去跑。TorchScript 和 torch.export 把计算图连同参数存进一个文件,加载它仍然要 PyTorch(Python 或 C++ 的 libtorch);AOTInductor 把图编译成本机代码,运行时仍然调用 libtorch;ONNX 是两边都认的图格式。burn 的回答是另一种:模型的结构和 forward 本来就是 Rust 代码,和后端一起编译进一个可执行文件,参数从文件读或者直接嵌进去。
这一部分只有一页,是部署主线的最后一步:
- 部署形态:主线 MLP 用 PyTorch 的四种形态和 burn 的三种二进制各推理一次,结果对照;交付的文件、要带的运行时、启动时间、峰值内存逐项实测;PyTorch 导出的 ONNX 经
burn-onnx在构建时生成 burn 代码,结果最大差 1.49e-8;burn 0.22.1 也能把 forward 录成计算图。
flowchart TB model["训练好的模型"] --> pyroute["PyTorch 形态"] model --> burnroute["burn 二进制"] pyroute --> ts["TorchScript"] pyroute --> ex["torch.export"] pyroute --> aoti["AOTInductor"] pyroute --> onnx["ONNX"] onnx -->|"burn-onnx 生成代码"| burnroute ts --> rt["运行时 libtorch"] ex --> rt aoti --> rt burnroute --> sys["只链接系统库"]
不带 Python 环境的体积和启动时间的基本对比在为什么要转里,参数文件的存取在 08 存取与迁移,推理不带 autodiff 的写法在不求导的区域。
💬 关联讨论
发起讨论加载中...