---
title: StableDiffusion-3-模型库-ModelZoo-昇腾社区
description: Stable Diffusion是AI绘画领域的核心模型，能够进行文生图和图生图等图像生成任务。StableDiffusion-3采用了Diffusion Transformer(DiT)架构，并引入了多项技术和改进。相比之前的版本在多主题提示词的控制编辑一致性能力、文字渲染控制能力以及图像生成的整体质量上都有大幅提升‌‌。
keywords: StableDiffusion,模型库,ModelZoo,昇腾社区,概述,输入输出数据,推理环境准备,快速上手
url: https://www.hiascend.com/software/modelzoo/models/detail/e6356162fa24432dbdcef99a15c7b258
section: (其他)
---

# StableDiffusion-3-模型库-ModelZoo-昇腾社区

URL: https://www.hiascend.com/software/modelzoo/models/detail/e6356162fa24432dbdcef99a15c7b258
描述: Stable Diffusion是AI绘画领域的核心模型，能够进行文生图和图生图等图像生成任务。StableDiffusion-3采用了Diffusion Transformer(DiT)架构，并引入了多项技术和改进。相比之前的版本在多主题提示词的控制编辑一致性能力、文字渲染控制能力以及图像生成的整体质量上都有大幅提升‌‌。
关键词: StableDiffusion,模型库,ModelZoo,昇腾社区,概述,输入输出数据,推理环境准备,快速上手

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-3

## StableDiffusion-3

扩散模型PyTorch推理1277次浏览2026/01/19更新

获取源码

StableDiffusion-3

查看模型源码

...

# 概述

SD3 由一组用于潜在扩散的专家管道组成： 在第一步中，使用基础模型生成（噪声）潜伏， 然后使用专门用于最终降噪步骤的细化模型此处获得 [了解详情](https://huggingface.co/stabilityai/stable-diffusion-3-medium-diffusers/)

- 参考实现：

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

## 输入输出数据

- 输入数据

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

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

# 推理环境准备

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

表 1版本配套表

| 配套 | 版本 | 环境准备指导 |
| --- | --- | ---|
| Python | 3.10.2 | - |
| torch | 2.1.0 | - |

该模型性能受CPU规格影响，建议使用64核CPU（arm）以复现性能

# 快速上手

## 获取源码

1. 安装依赖。

```
pip3 install -r requirements.txt

# 若要使用hpsv2验证精度，则还需要按照以下步骤安装hpsv2
git clone https://github.com/tgxs002/HPSv2.git
cd HPSv2
pip3 install -e .
```

- 注意：当前sd3推理暂不支持mindie与torch_npu混用，请确保实际推理环境中没有安装torch_npu
2. 安装mindie包

```
# 安装mindie
source /usr/local/Ascend/ascend-toolkit/set_env.sh
chmod +x ./Ascend-mindie_xxx.run
./Ascend-mindie_xxx.run --install
source /usr/local/Ascend/mindie/set_env.sh
```
3. 代码修改（可选）
（1）若需要开启DiTCache、序列压缩等优化，需要执行以下代码修改操作：

- 若环境没有patch工具，请自行安装：

```
 apt update
 apt install patch
```
- 执行命令：

```
python3 attention_patch.py
python3 attention_processor_patch.py
python3 transformer_sd3_patch.py
```

## 模型推理

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

1. 获取权重（可选）

可提前下载权重，放到代码同级目录下，以避免执行后面步骤时可能会出现下载失败。

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

# 下载sd3权重
git clone https://huggingface.co/stabilityai/stable-diffusion-3-medium-diffusers
```
2. 导出pt模型并进行编译。
(1) 设置模型权重的路径

```
# sd3 (执行时下载权重)
model_base="stabilityai/stable-diffusion-3-medium-diffusers"

# sd3 (使用上一步下载的权重)
model_base="./stable-diffusion-3-medium-diffusers"
```

(2) 创建文件夹./models存放导出的模型

```
mkdir ./models
```

(3) 执行命令查看芯片名称（${chip_name}）。

```
npu-smi info
```

(4) 执行export命令

```
# Atlas 800I A2，非并行，未加DiTCache优化
python3 export_model.py --model ${model_base} --output_dir ./models --batch_size 1 --soc Ascend${chip_name} --device_type A2 --device 0
# Atlas 800I A2，非并行。开启DiTCache优化
python3 export_model.py --model ${model_base} --output_dir ./models --batch_size 1 --soc Ascend${chip_name} --device_type A2 --device 0 --use_cache

# Atlas 300I Duo，并行
python3 export_model.py --model ${model_base} --output_dir ./models --parallel --batch_size 1 --soc Ascend${chip_name} --device_type Duo --device 0
```

参数说明：

- --model：模型权重路径
- --output_dir: 存放导出模型的路径
- --parallel: 【可选】导出适用于并行方案的模型
- --batch_size: 设置batch_size, 默认值为1, Atlas 800IA2-32g因显存限制仅支持batch_size=1的场景，能运行batch大小以实际占用显存大小为准
- --soc：处理器型号。
- --device_type: 设备形态，当前支持A2、Duo两种形态。
- --device：推理设备ID
- --use_cache：开启DiTCache优化，不配置则不开启
注意：trace+compile耗时较长且占用较多的CPU资源，请勿在执行export命令时运行其他占用CPU内存的任务，避免程序意外退出。
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. 执行推理脚本。

```
# 不使用DiTCache，单卡推理，适用Atlas 800I A2场景
numactl -C 0-23 python3 stable_diffusion3_pipeline.py \
        --model ${model_base} \
        --prompt_file ./prompts.txt \
        --prompt_file_type plain \
        --device 0 \
        --save_dir ./results \
        --steps 28 \
        --output_dir ./models \
        --height 1024 \
        --width 1024 \
        --batch_size 1

# 不使用DiTCache，使用双卡并行推理，适用Atlas 300I Duo场景
numactl -C 0-23 python3 stable_diffusion3_pipeline.py \
        --model ${model_base} \
        --prompt_file ./prompts.txt \
        --prompt_file_type plain \
        --device 0,1 \
        --save_dir ./results_parallel \
        --steps 28 \
        --output_dir ./models \
        --height 1024 \
        --width 1024 \
        --batch_size 1

# 使用DiTCache，单卡推理，适用Atlas 800I A2场景
numactl -C 0-23 python3 stable_diffusion3_pipeline_cache.py \
        --model ${model_base} \
        --prompt_file ./prompts.txt \
        --prompt_file_type plain \
        --device 0 \
        --save_dir ./results \
        --steps 28 \
        --output_dir ./models \
        --height 1024 \
        --width 1024 \
        --batch_size 1 \
        --use_cache
```

参数说明：

- --model：模型权重路径。
- --output_dir：存放导出模型的目录。
- --prompt_file：提示词文件。
- --prompt_file_type: prompt文件类型，用于指定读取方式，可选plain，parti，hpsv2。
- --save_dir：生成图片的存放目录。
- --batch_size：模型batch size。
- --steps：生成图片迭代次数。
- --device：推理设备ID；可用逗号分割传入两个设备ID，此时会使用并行方式进行推理。
- --height：生成图像高度，当前只支持1024
- --width：生成图像宽度，当前只支持1024
- --use_cache：开启DiTCache优化，不配置则不开启

非并行策略，执行完成后在`./results`目录下生成推理图片，在当前目录生成一个`image_info.json`文件，记录着图片和prompt的对应关系，并在终端显示推理时间。
并行策略，同时使用双卡并行策略，执行完成后在`./results_parallel`目录下生成推理图片，在当前目录生成一个`image_info.json`文件，记录着图片和prompt的对应关系。并在终端显示推理时间。
注意：当前MindIE-Torch和torch_npu的synchronizing stream不兼容，为避免出错，建议在运行推理前先卸载torch_npu。

## 精度验证

由于生成的图片存在随机性，提供两种精度验证方法：

1. CLIP-score（文图匹配度量）：评估图片和输入文本的相关性，分数的取值范围为[-1, 1]，越高越好。使用Parti数据集进行验证。
2. HPSv2（图片美学度量）：评估生成图片的人类偏好评分，分数的取值范围为[0, 1]，越高越好。使用HPSv2数据集进行验证

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

1. 下载Parti数据集和hpsv2数据集

```
# 下载Parti数据集
wget https://raw.githubusercontent.com/google-research/parti/main/PartiPrompts.tsv --no-check-certificate
```

hpsv2数据集下载链接：https://gitee.com/ascend/ModelZoo-PyTorch/blob/master/MindIE/MindIE-Torch/built-in/foundation/stable_diffusion_xl/hpsv2_benchmark_prompts.json [了解详情](https://gitee.com/ascend/ModelZoo-PyTorch/blob/master/MindIE/MindIE-Torch/built-in/foundation/stable_diffusion_xl/hpsv2_benchmark_prompts.json)
2. 下载模型权重

```
# Clip Score和HPSv2均需要使用的权重
# 安装git-lfs
apt install git-lfs
git lfs install

# Clip Score权重
git clone https://huggingface.co/laion/CLIP-ViT-H-14-laion2B-s32B-b79K

# HPSv2权重
wget https://huggingface.co/spaces/xswu/HPSv2/resolve/main/HPS_v2_compressed.pt --no-check-certificate
```

也可手动下载权重 [了解详情](https://huggingface.co/laion/CLIP-ViT-H-14-laion2B-s32B-b79K/blob/main/open_clip_pytorch_model.bin)将权重放到`CLIP-ViT-H-14-laion2B-s32B-b79K`目录下，手动下载HPSv2权重 [了解详情](https://huggingface.co/spaces/xswu/HPSv2/resolve/main/HPS_v2_compressed.pt)放到当前路径
3. 使用推理脚本读取Parti数据集，生成图片

```
# 不使用并行
python3 stable_diffusion3_pipeline.py \
        --model ${model_base} \
        --prompt_file ./PartiPrompts.tsv \
        --prompt_file_type parti \
        --num_images_per_prompt 4 \
        --max_num_prompts 0 \
        --device 0 \
        --save_dir ./results_PartiPrompts \
        --steps 28 \
        --output_dir ./models \
        --height 1024 \
        --width 1024 \
        --batch_size 1

# 使用DitCache
python3 stable_diffusion3_pipeline_cache.py \
        --model ${model_base} \
        --prompt_file ./PartiPrompts.tsv \
        --prompt_file_type parti \
        --num_images_per_prompt 4 \
        --max_num_prompts 0 \
        --device 0 \
        --save_dir ./results_PartiPrompts \
        --steps 28 \
        --output_dir ./models \
        --height 1024 \
        --width 1024 \
        --batch_size 1 \
        --use_cache

# 使用双卡并行策略
python3 stable_diffusion3_pipeline.py \
        --model ${model_base} \
        --prompt_file ./PartiPrompts.tsv \
        --prompt_file_type parti \
        --num_images_per_prompt 4 \
        --max_num_prompts 0 \
        --device 0,1 \
        --save_dir ./results_PartiPrompts_parallel \
        --steps 28 \
        --output_dir ./models \
        --use_cache \
        --height 1024 \
        --width 1024 \
        --batch_size 1
```

参数说明：

- --model：模型权重路径。
- --output_dir：存放导出模型的目录。
- --prompt_file：提示词文件。
- --prompt_file_type: prompt文件类型，用于指定读取方式，可选plain，parti，hpsv2。注意使用hpsv2时，设置num_images_per_prompt=1即可。
- --num_images_per_prompt: 每个prompt生成的图片数量。注意使用hpsv2时，设置num_images_per_prompt=1即可。
- --max_num_prompts：限制prompt数量为前X个，0表示不限制。
- --save_dir：生成图片的存放目录。
- --batch_size：模型batch size。
- --steps：生成图片迭代次数。
- --device：推理设备ID；可用逗号分割传入两个设备ID，此时会使用并行方式进行推理。

不使用并行策略，执行完成后在`./results_PartiPrompts`目录下生成推理图片，在当前目录生成一个`image_info.json`文件，记录着图片和prompt的对应关系，并在终端显示推理时间。
使用双卡并行策略，执行完成后在`./results_PartiPrompts_parallel`目录下生成推理图片，在当前目录生成一个`image_info.json`文件，记录着图片和prompt的对应关系。并在终端显示推理时间。
4. 使用推理脚本读取hpsv2数据集，生成图片

```
# 不使用并行
python3 stable_diffusion3_pipeline.py \
        --model ${model_base} \
        --prompt_file_type hpsv2 \
        --num_images_per_prompt 1 \
        --info_file_save_path ./image_info_hpsv2.json \
        --device 0 \
        --save_dir ./results_hpsv2 \
        --steps 28 \
        --output_dir ./models \
        --height 1024 \
        --width 1024 \
        --batch_size 1

# 使用DitCache
python3 stable_diffusion3_pipeline_cache.py \
        --model ${model_base} \
        --prompt_file_type hpsv2 \
        --num_images_per_prompt 1 \
        --info_file_save_path ./image_info_hpsv2.json \
        --device 0 \
        --save_dir ./results_hpsv2 \
        --steps 28 \
        --output_dir ./models \
        --height 1024 \
        --width 1024 \
        --batch_size 1 \
        --use_cache

# 使用双卡并行策略
python3 stable_diffusion3_pipeline.py \
        --model ${model_base} \
        --prompt_file_type hpsv2 \
        --num_images_per_prompt 1 \
        --info_file_save_path ./image_info_hpsv2.json \
        --device 0,1 \
        --save_dir ./results_hpsv2_parallel \
        --steps 28 \
        --output_dir ./models \
        --height 1024 \
        --width 1024 \
        --batch_size 1
```

参数说明：

- --info_file_save_path：生成图片信息的json文件路径。

不使用并行策略，执行完成后在`./results_hpsv2`目录下生成推理图片，在当前目录生成一个`image_info_hpsv2.json`文件，记录着图片和prompt的对应关系，并在终端显示推理时间。
   使用双卡并行策略，执行完成后在`./results_hpsv2_parallel`目录下生成推理图片，在当前目录生成一个`image_info_hpsv2.json`文件，记录着图片和prompt的对应关系。并在终端显示推理时间。
5. 计算精度指标

1. CLIP-score

```
python3 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: 推理设备，默认为"cpu"，如果是cuda设备可设置为"cuda"。
- --image_info: 上一步生成的`image_info.json`文件。
- --model_name: Clip模型名称。
- --model_weights_path: Clip模型权重文件路径。

clip_score.py脚本可参考SDXL [了解详情](https://gitee.com/ascend/ModelZoo-PyTorch/blob/master/MindIE/MindIE-Torch/built-in/foundation/stable_diffusion_xl/clip_score.py)，执行完成后会在屏幕打印出精度计算结果。
2. HPSv2

```
python3 hpsv2_score.py \
      --image_info="image_info_hpsv2.json" \
      --HPSv2_checkpoint="./HPS_v2_compressed.pt" \
      --clip_checkpoint="./CLIP-ViT-H-14-laion2B-s32B-b79K/open_clip_pytorch_model.bin"
```

参数说明：

- --image_info: 上一步生成的`image_info_hpsv2.json`文件。
- --HPSv2_checkpoint: HPSv2模型权重文件路径。
- --clip_checkpointh: Clip模型权重文件路径。

hpsv2_score.py脚本可参考SDXL [了解详情](https://gitee.com/ascend/ModelZoo-PyTorch/blob/master/MindIE/MindIE-Torch/built-in/foundation/stable_diffusion_xl/hpsv2_score.py)，执行完成后会在屏幕打印出精度计算结果。

# 模型推理性能&精度

调用ACL接口推理计算，性能参考下列数据。

### StableDiffusion3

| 硬件形态 | cpu规格 | batch size | 迭代次数 | 优化手段 | 平均耗时 | 精度 |
| --- | --- | --- | --- | --- | --- | ---|
| Atlas 800I A2(8*32G) | 64核(arm) | 1 | 28 | w/o UnetCache | 6.15s | clip score 0.380 |

性能测试需要独占npu和cpu

## 声明

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

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

暂无数据

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