下载的Stable Diffusion模型为什么是多个文件和文件夹

作者:魔道寒武纪     信息来源:互联网     发布时间:2025-12-01     点击数:1    

在https://modelscope.cn/下载的SD模型是一些文件夹和文件,其实是Stable Diffusion模型的“分模块存储格式”,和传统的单文件.ckpt/.safetensors是同一模型的不同存储方式,只是魔搭(ModelScope)平台默认用**“分布式权重拆分”**来存储模型,具体解释如下:

1. 为什么不是单文件.ckpt?

Stable Diffusion模型本身由多个功能模块组成(比如unet、vae、text_encoder等),传统的.ckpt/.safetensors是把这些模块的权重打包成一个文件;而魔搭平台为了适配“模型按需加载” “分布式训练”等场景,会把每个模块的权重拆分成单独的文件夹存储(你看到的unet、vae等文件夹,里面就是对应模块的权重文件)。

2. 这些文件怎么用?

这些拆分后的文件,可以直接被魔搭的Python SDK调用,也能转换成传统的单文件.safetensors(如果需要在Automatic1111等SD WebUI中使用):

方式1:直接用魔搭SDK调用

 不需要合并,直接通过ModelScope的代码加载模型生成图片,示例代码:

  from modelscope.pipelines import pipeline

  from modelscope.outputs import OutputKeys


  # 加载拆分后的模型

  pipe = pipeline(text-to-image, model=AI-ModelScope/stable-diffusion-v1-5)

  # 生成图片

  result = pipe({text: 一只可爱的柯基犬在草地上玩耍})

  result[OutputKeys.IMAGE].save(corgi.png)

  

方式2:合并成单文件.safetensors(适配SD WebUI)

 如果你需要在Automatic1111等WebUI中使用,需要把这些拆分的模块合并成单文件,步骤:

a.安装依赖:pip install transformers diffusers safetensors

b.运行合并代码(指定魔搭模型路径):

     from diffusers import StableDiffusionPipeline

     import torch

     from safetensors.torch import save_file


     # 加载魔搭拆分的模型

     pipe = StableDiffusionPipeline.from_pretrained(

         "C:/Users/dahao/.cache/modelscope/hub/models/AI-ModelScope/stable-diffusion-v1-5",

         torch_dtype=torch.float16

     )

     # 合并权重并保存为.safetensors

     merged_weights = {}

     for name, param in pipe.unet.state_dict().items():

         merged_weights[f"unet.{name}"] = param

     for name, param in pipe.vae.state_dict().items():

         merged_weights[f"vae.{name}"] = param

     for name, param in pipe.text_encoder.state_dict().items():

         merged_weights[f"text_encoder.{name}"] = param

     # 保存到SD WebUI的models/Stable-diffusion目录

     save_file(merged_weights, "C:/sd-webui/models/Stable-diffusion/sd-v1-5.safetensors")

     

运行后就能得到单文件的.safetensors模型,直接放到SD WebUI的对应文件夹即可使用。

3. 总结

这些文件夹不是“错误文件”,而是模型的拆分权重,既可以直接用代码调用,也能合并成你熟悉的单文件格式。