chilloutmix_NiPrunedFp32Fix 模型格式转换:PyTorch 转 ONNX / Safetensors 完整指南
2026/9/20 2:40:29 网站建设 项目流程

chilloutmix_NiPrunedFp32Fix 模型格式转换:PyTorch 转 ONNX / Safetensors 完整指南

【免费下载链接】chilloutmix_NiPrunedFp32Fix项目地址: https://ai.gitcode.com/hf_mirrors/emilianJR/chilloutmix_NiPrunedFp32Fix

如果你正在做 chilloutmix_NiPrunedFp32Fix 模型格式转换,大概率卡在同一件事上:仓库给的是 PyTorch 的 .bin 权重,但你的部署环境只认 ONNX,或者想换成加载更快、更安全的 Safetensors。这篇只讲一件事——怎么把这个 Stable Diffusion 模型转成这两种格式,转完还能跑通推理。全程是可复制的命令和代码,不用自己拼。

先看懂三种格式,再决定转哪个

做 diffusers 模型格式互转之前,先拿这张表定方向,别白转:

格式定位典型场景
PyTorch(.bin)原生权重,diffusers 直接加载开发调试、微调训练
ONNX跨平台推理图,可脱离 PyTorch 运行ONNX 推理部署、服务端/端侧加速
Safetensors纯张量存储,加载快且无代码执行风险生产环境加载、仓库分发

一句话判断:想给推理提速选 ONNX,只想让加载更安全高效就转 Safetensors,两者都想要就各转一遍,互不冲突。

动手前:一条命令装依赖

pip install torch onnx safetensors diffusers transformers

然后把仓库拉到本地,后面所有操作都在仓库根目录执行:

git clone https://gitcode.com/hf_mirrors/emilianJR/chilloutmix_NiPrunedFp32Fix cd chilloutmix_NiPrunedFp32Fix

仓库里 UNet 权重在 unet/diffusion_pytorch_model.bin,结构参数在 unet/config.json,下面转换会直接用到。

Stable Diffusion 模型转 ONNX:导出 UNet 推理图

产出是一个unet.onnx文件,ONNX Runtime 可以直接加载,不再依赖 PyTorch 运行时。

from diffusers import StableDiffusionPipeline import torch pipe = StableDiffusionPipeline.from_pretrained("./", torch_dtype=torch.float16, safety_checker=None) unet = pipe.unet # 按 UNet 真实输入造 dummy 数据:4 通道 latent、64x64,77 是 CLIP 文本序列长度 latents = torch.randn(1, 4, 64, 64) timestep = torch.tensor([1]) hidden = torch.randn(1, 77, 768) torch.onnx.export(unet, (latents, timestep, hidden), "unet.onnx", opset_version=14, do_constant_folding=True)

产物unet.onnx落在仓库根目录。推理时它和unet/config.json里的结构定义配套使用,配置文件本身不用改。

PyTorch 转 Safetensors:三行换容器

这一步只是把权重换个"容器"存放,不重算、不降精度,基本秒级完成。

import torch from safetensors.torch import save_file # 两个最重的组件逐个转,map_location=cpu 避免吃显存 save_file(torch.load("unet/diffusion_pytorch_model.bin", map_location="cpu"), "unet/diffusion_pytorch_model.safetensors") save_file(torch.load("text_encoder/pytorch_model.bin", map_location="cpu"), "text_encoder/pytorch_model.safetensors")

产物和原 .bin 放在同一目录,diffusers 加载时会优先识别 .safetensors,旧文件保留或删除都不影响运行。

踩坑:新手最常撞的三个问题

  • 转换时内存爆掉→ 全程用torch.float16加载,UNet 和 text_encoder 分开转,别一次性全量进内存。
  • 加载报 config 不匹配→ 核对unet/config.json的结构参数(in_channels、sample_size)与model_index.json的组件声明是否一致,转换过程中别动这两个文件。
  • ONNX 导出报不支持的算子→ 把opset_version升到 17 再试;只导出 UNet 单组件,别想一条 pipeline 整图导完。

验证:出一张图就算转对了

最省事的验收标准就一条——原 pipeline 还能正常出图:

from diffusers import StableDiffusionPipeline import torch pipe = StableDiffusionPipeline.from_pretrained("./", torch_dtype=torch.float32, safety_checker=None) pipe("a beautiful landscape").images[0].save("test.png")

test.png正常生成、画面合理,就说明 chilloutmix_NiPrunedFp32Fix 模型格式转换完成,可以上部署了。万一出问题,排查入口就在各组件目录:unet/text_encoder/vae/下的config.json定义结构,model_index.json定义整体拼装关系,对照报错先看它们,基本就能定位。

【免费下载链接】chilloutmix_NiPrunedFp32Fix项目地址: https://ai.gitcode.com/hf_mirrors/emilianJR/chilloutmix_NiPrunedFp32Fix

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询