如何做 emilianJR/chilloutmix_NiPrunedFp32Fix 的模型格式转换:PyTorch 转 ONNX 与 Safetensors 快速指南
2026/8/27 3:25:41 网站建设 项目流程

如何做 emilianJR/chilloutmix_NiPrunedFp32Fix 的模型格式转换:PyTorch 转 ONNX 与 Safetensors 快速指南

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

emilianJR/chilloutmix_NiPrunedFp32Fix 是一个基于 Stable Diffusion 生态的文本生成图像模型,本文聚焦它的模型格式转换:把默认的 PyTorch 权重改成 ONNX 或 Safetensors 两种常见形态。无论你是要接入跨平台推理引擎,还是想获得更安全、更快的权重加载方式,都能在这里找到现成的做法。整个流程只有三步——克隆仓库、跑脚本、生成一张图验证,新手也能照着做。

读懂模型结构与三种权重格式

这个模型采用标准的 Stable Diffusion Pipeline 架构,model_index.json 是总文件,定义了每个组件的名称、类型和所在目录。真正占体积的是三个权重目录:

  • text_encoder/:文本编码器,把提示词变成模型能理解的语义向量,权重文件为pytorch_model.bin
  • unet/:核心扩散网络,真正负责"画图",权重文件为diffusion_pytorch_model.bin
  • vae/:VAE(变分自编码器),把潜空间结果还原成最终像素图,同样以diffusion_pytorch_model.bin存放

每个组件的具体网络结构由所在目录的config.json描述,比如 unet/config.json 里能看到通道数、残差块类型等参数。

三种格式各自适合干什么,一句话就能分清:

  • PyTorch(.bin):仓库原始形态,微调、训练生态兼容性最好
  • ONNX:跨平台推理用的通用格式,非 PyTorch 推理引擎和各类优化工具都能消费
  • Safetensors:只存权重数据的现代格式,加载时不执行任意代码,更安全、读取也更快

把 UNet 转成 ONNX:跨平台部署怎么做

当推理环境不在 PyTorch 里(例如 ONNX Runtime、其他厂商的推理加速方案),或者你希望把网络导出成通用中间表示来优化性能时,就需要这一步。

环境准备与仓库克隆

先装齐四个依赖库,分别是 PyTorch、ONNX 工具包和模型加载用的 diffusers、transformers:

pip install torch onnx diffusers transformers

再把模型仓库拉到本地,后续脚本都在这份目录里运行:

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

导出脚本怎么写

下面这段代码做的事是:加载整个 pipeline(用safety_checker=None跳过安全检查器以省资源),构造一组假输入——潜空间采样、时间步、文本语义向量——再调用torch.onnx.export把 UNet 导出为unet.onnx

from diffusers import StableDiffusionPipeline import torch # 加载模型 pipe = StableDiffusionPipeline.from_pretrained( "./", torch_dtype=torch.float32, safety_checker=None ) # 导出UNet模型为ONNX格式 unet = pipe.unet input_sample = torch.randn(1, 4, 64, 64) input_timestep = torch.tensor([1]) input_encoder_hidden_states = torch.randn(1, 77, 768) torch.onnx.export( unet, (input_sample, input_timestep, input_encoder_hidden_states), "unet.onnx", opset_version=14, do_constant_folding=True, )

跑完后当前目录会多出unet.onnx,直接拿去给推理端使用即可。

转成 Safetensors:更安全的权重存放方式

.bin格式依赖 Python 反序列化机制加载权重,理论上可被恶意构造的文件利用;Safetensors 则只保存张量本身,结构上杜绝了这个风险,读取速度还略占优势,所以生产环境普遍优先选它。

转换脚本怎么跑

先装转换库:

pip install safetensors

下面的代码把 UNet 和文本编码器两个权重文件依次读入,再以 safetensors 格式落盘,文件名保持原样,方便后续按需替换:

import torch from safetensors.torch import save_file # 转换UNet模型 unet_weights = torch.load("unet/diffusion_pytorch_model.bin") save_file(unet_weights, "unet/diffusion_pytorch_model.safetensors") # 转换文本编码器 text_encoder_weights = torch.load("text_encoder/pytorch_model.bin") save_file(text_encoder_weights, "text_encoder/pytorch_model.safetensors")

VAE 的转法完全相同,把路径换成vae/diffusion_pytorch_model.bin即可。

转换排坑指南 ⚠️

转换时内存不够怎么办

一次转换整个模型容易吃满显存/内存。两个办法:一是把精度降到torch.float16,内存占用直接减半;二是按组件拆开转——UNet、文本编码器、VAE 各跑一次,转完一个释放一个,互不干扰。

配置和权重对不上怎么办

转换前后的config.json必须保持同一份,不要拿别处不同版本的文件来替换。建议顺手核对 vae/config.json 等组件配置与权重是否出自同一次导出,再回看model_index.json确认各组件路径定义完整。

用一次生图验证转换结果 ✅

转换完别急着收工,跑一次最小推理最稳妥。下面这段代码重新加载本地模型并生成一张测试图,test_output.png能正常输出,就说明格式转换链路没问题:

from diffusers import StableDiffusionPipeline import torch # 加载转换后的模型 pipe = StableDiffusionPipeline.from_pretrained( "./", torch_dtype=torch.float32, safety_checker=None ) # 生成测试图像 image = pipe("a beautiful landscape").images[0] image.save("test_output.png")

小结

微调用 PyTorch、跨平台推理用 ONNX、生产环境存放用 Safetensors——认准场景选格式,照对应脚本执行即可。各组件的更多细节,随时翻看仓库里对应的 config 文件。

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

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

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

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

立即咨询