---
title: StableDiffusion-1.5-模型库-ModelZoo-Atlas Community
description: Stable Diffusion是AI绘画领域的核心模型，能够进行文生图和图生图等图像生成任务。StableDiffusion-1.5通过LTRGR(Learning to Rank)框架，实现了更精准的文本到图像的生成‌。同时采用了U-Net结构，结合了编码器和解码器，能够更好地处理图像和文本的融合‌。
keywords: StableDiffusion,模型库,ModelZoo,Atlas,Community,概述,输入输出数据,推理环境准备
url: https://www.hiascend.com/software/modelzoo/models/detail/3906a16305bd4e9db29430a7d4eacc5d
section: (其他)
---

# StableDiffusion-1.5-模型库-ModelZoo-Atlas Community

URL: https://www.hiascend.com/software/modelzoo/models/detail/3906a16305bd4e9db29430a7d4eacc5d
描述: Stable Diffusion是AI绘画领域的核心模型，能够进行文生图和图生图等图像生成任务。StableDiffusion-1.5通过LTRGR(Learning to Rank)框架，实现了更精准的文本到图像的生成‌。同时采用了U-Net结构，结合了编码器和解码器，能够更好地处理图像和文本的融合‌。
关键词: StableDiffusion,模型库,ModelZoo,Atlas,Community,概述,输入输出数据,推理环境准备

ModelZoo主页

主页 [了解详情](https://www.hiascend.com/software/modelzoo)大模型 [了解详情](https://www.hiascend.com/software/modelzoo/big-models)模型库 [了解详情](https://www.hiascend.com/software/modelzoo/models)工具库 [了解详情](https://www.hiascend.com/software/modelzoo/tools)权重库 [了解详情](https://www.hiascend.com/software/modelzoo/datasets)ModelShow [了解详情](https://www.hiascend.com/software/modelzoo/modelshow)DeepSeek专区HOT [了解详情](https://www.hiascend.com/developer/deepseek)文档中心论坛交流

主页 [了解详情](https://www.hiascend.com/software/modelzoo)大模型 [了解详情](https://www.hiascend.com/software/modelzoo/big-models)模型库 [了解详情](https://www.hiascend.com/software/modelzoo/models)工具库 [了解详情](https://www.hiascend.com/software/modelzoo/tools)权重库 [了解详情](https://www.hiascend.com/software/modelzoo/datasets)ModelShow [了解详情](https://www.hiascend.com/software/modelzoo/modelshow)DeepSeek专区HOT [了解详情](https://www.hiascend.com/developer/deepseek)文档中心论坛交流

模型库 [了解详情](https://www.hiascend.com/software/modelzoo/models)

StableDiffusion-1.5

## StableDiffusion-1.5

扩散模型PyTorch推理1066次浏览2025/12/29更新

No rating yet

Rate This Document

获取源码

StableDiffusion-1.5

查看模型源码

...

# 概述

stable-diffusion是一种文本到图像的扩散模型，能够在给定任何文本输入的情况下生成照片逼真的图像。有关稳定扩散函数的更多信息，请查看Stable Diffusion blog [了解详情](https://huggingface.co/blog/stable_diffusion)。

- 参考实现：

```
 # StableDiffusion v1.5
 https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5
 # StableDiffusion v2.1
 https://huggingface.co/stabilityai/stable-diffusion-2-1-base
```
- 设备支持：
Atlas 800I A2推理设备：支持的卡数为1或2
Atlas 300I Duo推理卡：支持的卡数为1，可双芯并行

## 输入输出数据

- 输入数据

| 输入数据 | 大小 | 数据类型 | 数据排布格式 |
| --- | --- | --- | ---|
| input | 1 x 77 | FLOAT32 | ND |
- 输出数据

| 输出数据 | 大小 | 数据类型 | 数据排布格式 |
| --- | --- | --- | ---|
| output1 | 1 x 512 x 512 x 3 | FLOAT32 | NHWD |

注意：该模型当前仅支持batch size为1的情况。

# 推理环境准备

- 该模型需要以下插件与驱动

表 1版本配套表
- | 配套 | 版本 | 环境准备指导 |
| --- | --- | ---|
| Python | 3.10.13 | - |
| torch | 2.1.0 | - |

注意：本README中的StableDiffusion v1.5和v2.1模型推理方式与torch-npu冲突，需卸载torch-npu包。

# 快速上手

## 获取源码

1. 按照requirements.txt要求的版本安装相关依赖，避免导出模型失败。

```
pip3 install -r requirements.txt
```
2. 安装mindie包

```
# 安装mindie
chmod +x ./Ascend-mindie_xxx.run
./Ascend-mindie_xxx.run --install
source /usr/local/Ascend/mindie/set_env.sh
```
3. 代码修改

执行命令：

```
python3 stable_diffusion_attention_patch.py
```

```
python3 stable_diffusion_unet_patch.py
```

## 准备数据集

1. 获取原始数据集。

本模型输入文本信息生成图片，无需数据集。

## 模型推理

1. 模型转换。【可选】
使用Pytorch导出pt模型，然后使用MindIE推理引擎转换为适配昇腾的模型。

1. 获取权重（可选）

可提前下载权重，以避免执行后面步骤时可能会出现下载失败。

```
# 需要使用 git-lfs (https://git-lfs.com)
git lfs install

# v1.5
git clone https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5

# v2.1
git clone https://huggingface.co/stabilityai/stable-diffusion-2-1-base
```
2. 导出pt模型并进行编译。(可选)

设置模型名称或路径

```
# v1.5 (执行时下载权重)
model_base="stable-diffusion-v1-5/stable-diffusion-v1-5"

# v1.5 (使用上一步下载的权重)
model_base="./stable-diffusion-v1-5"

# v2.1 (执行时下载权重)
model_base="stabilityai/stable-diffusion-2-1-base"

# v2.1 (使用上一步下载的权重)
model_base="./stable-diffusion-2-1-base"
```

执行命令：

```
# 导出pt模型
python3 export_ts.py --model ${model_base} --output_dir ./models \
        --parallel \
        --use_cache
```

参数说明：

- --model：模型名称或本地模型目录的路径
- --output_dir: pt模型输出目录
- --parallel：【可选】模型使用双芯/双卡并行推理
- --use_cache: 【可选】模型使用UnetCache优化
- --use_cache_faster: 【可选】模型使用deepcache+faster融合方案

若不选择【--parallel】，即单卡/单芯，执行成功后会生成pt模型:

- ./models/clip/clip_bs1.pt
- ./models/vae/vae_bs1.pt
- ./models/ddim/ddim2.pt
- ./models/cat/cat.pt
- ./models/unet/unet_bs2.pt【不选择--use_cache】
- ./models/unet/unet_bs2_0.pt【选择--use_cache】
- ./models/unet/unet_bs2_1.pt【选择--use_cache】

若选择【--parallel】，即双卡/双芯，执行成功后会生成pt模型:

- ./models/clip/clip_bs1.pt
- ./models/vae/vae_bs1.pt
- ./models/ddim/ddim1.pt
- ./models/unet/unet_bs1.pt【不选择--use_cache】
- ./models/unet/unet_bs1_0.pt【选择--use_cache】
- ./models/unet/unet_bs1_1.pt【选择--use_cache】

注意：若条件允许，该模型可以双芯片并行的方式进行推理，从而获得更短的端到端耗时。具体指令的差异之处会在后面的步骤中单独说明，请留意。

使用Lora权重【可选】

在civitai [了解详情](https://civitai.com)下载base model为SD1.5和SD2.1的的lora权重，一般选择safetensor格式的权重。执行转换脚本，将lora权重和model_base权重结合在一起。

执行命令：

```
model_lora=lora权重路径
model_new=适配lora之后的SD权重路径
python3 convert_lora_safetensors_to_diffusers.py --base_model_path ${model_base} --checkpoint_path ${model_lora} --dump_path ${model_new}
```

```
# 若使用lora权重，导出pt模型
python3 export_ts.py --model ${model_new} --output_dir ./models_lora \
        --parallel \
        --use_cache
```

执行成功后会在./models_lora路径下生成pt模型：

注意：更换lora权重时，请手动删除models_lora路径的生成的pt模型，重新执行转换权重脚本和导出模型命令导出带lora权重的pt模型。
2. 开始推理验证。

1. 开启cpu高性能模式

```
echo performance |tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
sysctl -w vm.swappiness=0
sysctl -w kernel.numa_balancing=0
```
2. 安装绑核工具

```
apt-get update
apt-get install numactl
```

查询卡的NUMA node

```
lspci -vs bus-id
```

bus-id可通过npu-smi info获得，查询到NUMA node，在推理命令前加上对应的数字

可通过lscpu获得NUMA node对应的CPU核数

```
NUMA node0: 0-23
NUMA node1: 24-47
NUMA node2: 48-71
NUMA node3: 72-95
```

当前查到NUMA node是0，对应0-23，推荐绑定其中单核以获得更好的性能。
3. 执行推理脚本。

```
# 1.若不使用并行推理：
# 1.1不使用lora权重
numactl -C 0-23 python3 stable_diffusion_pipeline.py \
        --model ${model_base} \
        --prompt_file ./prompts.txt \
        --device 0 \
        --save_dir ./results \
        --steps 50 \
        --scheduler DDIM \
        --soc A2 \
        --output_dir ./models \
        --use_cache
 # 1.2使用带lora权重的新权重
 numactl -C 0-23 python3 stable_diffusion_pipeline.py \
        --model ${model_new} \
        --prompt_file ./prompts.txt \
        --device 0 \
        --save_dir ./results \
        --steps 50 \
        --scheduler DDIM \
        --soc A2 \
        --output_dir ./models_lora \
        --use_cache

# 2.若使用并行推理【Atlas 300I Duo】
# 2.1不使用lora权重
numactl -C 0-23 python3 stable_diffusion_pipeline_parallel.py \
        --model ${model_base} \
        --prompt_file ./prompts.txt \
        --device 0,1 \
        --save_dir ./results \
        --steps 50 \
        --scheduler DDIM \
        --soc Duo \
        --output_dir ./models \
        --use_cache
 # 2.2使用带lora权重的新权重
 numactl -C 0-23 python3 stable_diffusion_pipeline_parallel.py \
        --model ${model_new} \
        --prompt_file ./prompts.txt \
        --device 0,1 \
        --save_dir ./results \
        --steps 50 \
        --scheduler DDIM \
        --soc Duo \
        --output_dir ./models_lora \
        --use_cache
```

参数说明：

- --model：模型名称或本地模型目录的路径。
- --prompt_file：输入文本文件，按行分割。
- --save_dir：生成图片的存放目录。
- --steps：生成图片迭代次数。
- --device：推理设备ID；可用逗号分割传入两个设备ID，此时会使用并行方式进行推理。
- --scheduler: 【可选】推荐使用DDIM采样器。
- --soc: 硬件配置，根据硬件配置选择Duo或者A2。
- --output_dir: 编译好的模型路径。
- --use_cache: 【可选】推荐使用UnetCache策略。
- --use_cache_faster: 【可选】模型使用deepcache+faster融合方案。

执行完成后在`./results`目录下生成推理图片。并在终端显示推理时间。

注意：更换lora权重时，请手动删除models_lora路径的生成的编译好的pt模型，（xxx_compile.pt）重新执行推理脚本。

## 精度验证

由于生成的图片存在随机性，所以精度验证将使用CLIP-score来评估图片和输入文本的相关性，分数的取值范围为[-1, 1]，越高越好。

注意，由于要生成的图片数量较多，进行完整的精度验证需要耗费很长的时间。

1. 下载Parti数据集

```
wget https://raw.githubusercontent.com/google-research/parti/main/PartiPrompts.tsv --no-check-certificate
```
2. 下载Clip模型权重

```
# 安装git-lfs
apt install git-lfs
git lfs install
git clone https://huggingface.co/laion/CLIP-ViT-H-14-laion2B-s32B-b79K

# 或者访问https://huggingface.co/laion/CLIP-ViT-H-14-laion2B-s32B-b79K/blob/main/open_clip_pytorch_model.bin，将权重下载并放到这个目录下
```
3. 使用推理脚本读取Parti数据集，生成图片

```
# 1.若不使用并行推理：
# 1.1不使用lora权重
python3 stable_diffusion_pipeline.py \
        --model ${model_base} \
        --prompt_file ./PartiPrompts.tsv \
        --prompt_file_type parti \
        --num_images_per_prompt 4 \
        --device 0 \
        --save_dir ./results \
        --steps 50 \
        --scheduler DDIM \
        --soc A2 \
        --output_dir ./models \
        --use_cache
 # 1.2使用带lora权重的新权重
 python3 stable_diffusion_pipeline.py \
        --model ${model_new} \
        --prompt_file ./PartiPrompts.tsv \
        --prompt_file_type parti \
        --num_images_per_prompt 4 \
        --device 0 \
        --save_dir ./results \
        --steps 50 \
        --scheduler DDIM \
        --soc A2 \
        --output_dir ./models_lora \
        --use_cache

# 2.若使用并行推理【Atlas 300I Duo】
# 2.1不使用lora权重
python3 stable_diffusion_pipeline_parallel.py \
        --model ${model_base} \
        --prompt_file ./PartiPrompts.tsv \
        --prompt_file_type parti \
        --num_images_per_prompt 4 \
        --device 0,1 \
        --save_dir ./results \
        --steps 50 \
        --scheduler DDIM \
        --soc Duo \
        --output_dir ./models \
        --use_cache
 # 2.2使用带lora权重的新权重
 python3 stable_diffusion_pipeline_parallel.py \
        --model ${model_new} \
        --prompt_file ./PartiPrompts.tsv \
        --prompt_file_type parti \
        --num_images_per_prompt 4 \
        --device 0,1 \
        --save_dir ./results \
        --steps 50 \
        --scheduler DDIM \
        --soc Duo \
        --output_dir ./models_lora \
        --use_cache
```

增加的参数说明：

- --prompt_file：输入文本文件，按行分割。
- --prompt_file_type: prompt文件类型，用于指定读取方式。
- --num_images_per_prompt: 每个prompt生成的图片数量。

执行完成后会在`./results`目录下生成推理图片，并且会在当前目录生成一个`image_info.json`文件，记录着图片和prompt的对应关系。
4. 计算CLIP-score

```
python clip_score.py \
       --device=cpu \
       --image_info="image_info.json" \
       --model_name="ViT-H-14" \
       --model_weights_path="./CLIP-ViT-H-14-laion2B-s32B-b79K/open_clip_pytorch_model.bin"
```

参数说明：

- --device: 推理设备。
- --image_info: 上一步生成的`image_info.json`文件。
- --model_name: Clip模型名称。
- --model_weights_path: Clip模型权重文件路径。

执行完成后会在屏幕打印出精度计算结果。

# 模型推理性能&精度

性能参考下列数据。

### StableDiffusion v1.5

| 硬件形态 | 迭代次数 | 平均耗时(w/o UnetCache) | 平均耗时(with UnetCache) |
| --- | --- | --- | ---|
| Atlas 300I Duo双芯 | 50 | 2.5s | 1.54s |
| Atlas 800I A2(8*32G) | 50 | 1.6s | 0.95s |

### StableDiffusion v2.1

| 硬件形态 | 迭代次数 | 平均耗时(w/o UnetCache) | 平均耗时(with UnetCache) |
| --- | --- | --- | ---|
| Atlas 300I Duo双芯 | 50 | 2.3s | 1.39s |
| Atlas 800I A2(8*32G) | 50 | 1.4s | 0.85s |

### StableDiffusion v1.5

迭代50次的参考精度结果如下：

```
average score: 0.363
category average scores:
[Abstract], average score: 0.280
[Vehicles], average score: 0.363
[Illustrations], average score: 0.359
[Arts], average score: 0.404
[World Knowledge], average score: 0.372
[People], average score: 0.364
[Animals], average score: 0.373
[Artifacts], average score: 0.359
[Food & Beverage], average score: 0.355
[Produce & Plants], average score: 0.358
[Outdoor Scenes], average score: 0.355
[Indoor Scenes], average score: 0.368
```

### StableDiffusion v2.1

迭代50次的参考精度结果如下：

```
average score: 0.376
category average scores:
[Abstract], average score: 0.285
[Vehicles], average score: 0.377
[Illustrations], average score: 0.376
[Arts], average score: 0.414
[World Knowledge], average score: 0.383
[People], average score: 0.381
[Animals], average score: 0.389
[Artifacts], average score: 0.369
[Food & Beverage], average score: 0.369
[Produce & Plants], average score: 0.364
[Outdoor Scenes], average score: 0.366
[Indoor Scenes], average score: 0.381
```

注意：当前推理pipline中未固定随机种子，固定随机种子会对clip_score分数有影响

```
# 推理pipline main函数中加入
generator = torch.Generator().manual_seed(xxx)
# 在ascendie_infer函数中加入参数
generator=generator
```

## 声明

- 本代码仓提到的数据集和模型仅作为示例，这些数据集和模型仅供您用于非商业目的，如您使用这些数据集和模型来完成示例，请您特别注意应遵守对应数据集和模型的License，如您因使用数据集或模型而产生侵权纠纷，华为不承担任何责任。
- 如您在使用本代码仓的过程中，发现任何问题（包括但不限于功能问题、合规问题），请在本代码仓提交issue，我们将及时审视并解答。

| 版本 | 更新时间 | 精度 | 处理器 | CANN版本 | 操作 |
| --- | --- | --- | --- | --- | ---|

暂无数据

使用模型资源和服务前，请您仔细阅读并理解透彻《昇腾深度学习模型许可协议 3.0》 [了解详情](https://www.hiascend.com/legal/modelzoo_models_license)
