chilloutmix 模型格式转换完整指南3 步把 .bin 权重跑进 ONNX 或 Safetensors【免费下载链接】chilloutmix_NiPrunedFp32Fix项目地址: https://ai.gitcode.com/hf_mirrors/emilianJR/chilloutmix_NiPrunedFp32Fixchilloutmix_NiPrunedFp32Fix 是一个 Stable Diffusion 文生图模型里面三个组件的权重都是 PyTorch 的 .bin 格式。如果你的目标环境只认 ONNX 或 Safetensors那就得先做一次 chilloutmix 模型格式转换要么 PyTorch 转 ONNX要么 PyTorch 转 Safetensors。选好后照着步骤走就行最容易踩的两个坑和自救方法我也会提前写出来。 先选格式再动手三种格式各适合谁先看看你手里有什么。这套模型由三个组件拼成text_encoder/是 CLIP 文本编码器负责把你的提示词变成数字unet/是核心的去噪网络vae/是潜空间解码器负责还原出最终像素。每个目录下的config.json记录结构参数通道数、层类型、隐层维度等.bin文件则装着权重本身——config 是图纸bin 是零件。三种候选格式的差异PyTorch.bin你原本就有的格式。微调、本地开发都靠它生态最成熟不急着部署就不用动。缺点是 .bin 走 pickle 序列化理论上存在代码执行风险不太适合把权重挂到公开平台。ONNX跨框架的中间表示可以理解成通用拼图说明书导出一次后就能在 ONNX Runtime 等非 PyTorch 运行时上跑还能再喂给 TensorRT 这类优化工具适合跨平台部署和推理加速。Safetensors装的内容和 .bin 一样纯权重没有计算图但格式本身不允许执行代码加载更安全还支持内存映射、读取更快。生产环境和公开分发建议选它理由就两条安全、快。一句话建议部署到别的设备选 ONNX要发布、要上生产选 Safetensors还要继续微调就留着 .bin 别动。⚙️ PyTorch 转 ONNX 实操5 分钟导出 unet.onnxONNX 是按单张计算图导出的这套模型里 UNet 分量最重所以先拿它开刀。先装依赖、克隆仓库pip install torch onnx diffusers transformers git clone https://gitcode.com/hf_mirrors/emilianJR/chilloutmix_NiPrunedFp32Fix再用 diffusers 加载、导出。注意下面三个示例输入的尺寸必须和unet/config.json里的结构对得上from diffusers import StableDiffusionPipeline import torch pipe StableDiffusionPipeline.from_pretrained( ./chilloutmix_NiPrunedFp32Fix, torch_dtypetorch.float32, safety_checkerNone, # 检查器用不到跳过省内存 ) unet pipe.unet unet.eval() # 尺寸取自 config.json输入 4 通道、64x64 潜空间文本侧 77 个 token x 768 维 dummy_latents torch.randn(1, 4, 64, 64) dummy_timestep torch.tensor([10]) dummy_prompt torch.randn(1, 77, 768) torch.onnx.export( unet, (dummy_latents, dummy_timestep, dummy_prompt), unet.onnx, opset_version14, # 算子集版本14 对旧版运行时兼容性最好 do_constant_foldingTrue, # 把常量计算提前折进图里推理更快 )两个细节值得懂opset_version是 ONNX 算子词汇表的版本号越低支持的运行时越多14 是稳妥值do_constant_folding是常量折叠意思是把导出时就能算死的部分直接算好塞进图里。跑完得到unet.onnx文本编码器同理把pipe.text_encoder和 token 输入传进去再导一遍即可。⚡ PyTorch 转 Safetensors一个循环转完三个组件Safetensors 只换权重的容器不碰结构是三条路里最快的一条。装好库循环写盘pip install safetensorsimport torch from safetensors.torch import save_file pairs [ (unet/diffusion_pytorch_model.bin, unet/diffusion_pytorch_model.safetensors), (text_encoder/pytorch_model.bin, text_encoder/pytorch_model.safetensors), (vae/diffusion_pytorch_model.bin, vae/diffusion_pytorch_model.safetensors), ] for old, new in pairs: save_file(torch.load(old, map_locationcpu), new)map_locationcpu这一手让权重直接进内存加载不占显存纯 CPU 的机器也不会翻车。.safetensors落盘后diffusers 加载时会优先认它之后既更快也更安全。 转换翻车自救两类问题对症排查内存不够时怎么转UNet 的 .bin 有好几个 GB导出时要同时持有原权重和新图内存需求大致翻倍。三个办法加载时加torch_dtypetorch.float16精度减半、内存减半Safetensors 转换和快速验证场景够用ONNX 导出用 float32 更稳内存吃紧就别硬扛换台内存大的机器或临时加 swap不必整条 pipeline 一起加载按组件单独转换比如只加载 UNet 子目录转完一个再转下一个。配置不匹配config.json 前后必须一致原则只有一条权重文件可以换config.json不能动。转换前后的unet/、text_encoder/、vae/下的原始 config 保持原样——Safetensors 和 ONNX 改的只是权重的存放形式结构参数一个字都不用变。谁要是顺手换过别的模型的 config加载时就会报一串形状不匹配。另外看一眼model_index.json你只转了部分组件的话没转的组件要原封不动文件里的指针不能悬空。✅ 跑通验证才算完验证模型是否转坏了别看文件大小看输出。转换完成后跑一次短推理from diffusers import StableDiffusionPipeline import torch pipe StableDiffusionPipeline.from_pretrained( ./chilloutmix_NiPrunedFp32Fix, torch_dtypetorch.float16, safety_checkerNone, ) img pipe(anime girl walking through a rainy neon street, cinematic lighting).images[0] img.save(check_output.png)图能出、人物风格符合这个模型的 chillout 质感说明权重没被转坏。如果还导了 ONNX再用 onnxruntime 做次轻校验ort.InferenceSession(unet.onnx)能顺利建出会话不报错图就是可用的。到这里这次格式转换才算真正收尾。【免费下载链接】chilloutmix_NiPrunedFp32Fix项目地址: https://ai.gitcode.com/hf_mirrors/emilianJR/chilloutmix_NiPrunedFp32Fix创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考