Rust in Everything
基于 burn 0.22.1

部署

PyTorch 的部署形态都在回答同一个问题:怎样把模型带到一个没有训练代码的地方去跑。TorchScript 和 torch.export 把计算图连同参数存进一个文件,加载它仍然要 PyTorch(Python 或 C++ 的 libtorch);AOTInductor 把图编译成本机代码,运行时仍然调用 libtorch;ONNX 是两边都认的图格式。burn 的回答是另一种:模型的结构和 forward 本来就是 Rust 代码,和后端一起编译进一个可执行文件,参数从文件读或者直接嵌进去。

这一部分只有一页,是部署主线的最后一步:

  1. 部署形态:主线 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 的写法在不求导的区域。

💬 关联讨论

发起讨论
加载中...