存取与迁移
PyTorch 和 burn 存的都是「参数名 → 张量」的一张表:PyTorch 叫 state_dict,名字是 fc1.weight 这样的属性路径;burn 的名字是结构体字段的路径,也是 fc1.weight。模型结构两边都不进文件,加载前先在代码里把模型建出来,再把表里的张量按名字套进去。不同的地方有三处:burn 的 Linear 权重是 [in, out],PyTorch 是 [out, in];burn 自己的格式是 burnpack,和 PyTorch 交换数据用 safetensors,.pt 只能读不能写;burn 加载时保留文件里的 dtype,PyTorch 会转成参数原来的 dtype。
这一部分是部署主线的前两步,保存和加载:
- 保存与加载:
torch.save(model.state_dict())对save_file,load_state_dict对load_file;严格加载的报错两边对照;burn 写 safetensors 给 PyTorch 读,要BurnToPyTorchAdapter;同一个路径存第二次,burn-store 默认拒绝。 - 导入 PyTorch 权重:主线 MLP 在 PyTorch 里存成 safetensors 和
.pt,读进 burn 后前向结果最大差 1.49e-8;不加适配器时的ShapeMismatch和方阵静默读反;nn.Sequential的键名;float64 文件让 burn 的参数变成 F64。
flowchart TB pt["PyTorch 模型"] -->|"save_file"| st[".safetensors"] pt -->|"torch.save"| ptf[".pt"] st -->|"PyTorchToBurnAdapter"| bm["burn 模型"] ptf -->|"PytorchStore"| bm bm -->|"save_file"| bpk[".bpk"] bpk -->|"load_file"| bm bm -->|"BurnToPyTorchAdapter"| st2[".safetensors"] st2 -->|"load_state_dict"| pt
存取的内部机制(ModuleRecord、burnpack 格式、适配器怎么按模块类型转置)见 burn 卷的存储与加载,这一部分只讲从 PyTorch 过来要改的写法。
💬 关联讨论
发起讨论加载中...