HuggingFace镜像/stable_diffusion_2.1
模型介绍文件和版本分析
下载使用量0

一、准备运行环境

表 1 版本配套表

配套版本环境准备指导
Python3.10 / 3.11-
torch2.9.0-

注意:

  • 该模型也支持torch 2.1.0等版本

1.1 获取CANN&MindIE安装包&环境准备

  • 设备支持 Atlas 800I A2推理设备:支持的卡数为1或2 Atlas 300I Duo推理卡:支持的卡数为1,可双芯并行
  • Atlas 800I A2
  • Atlas 300I Duo
  • 环境准备指导

1.2 CANN安装

# 增加软件包可执行权限,{version}表示软件版本号,{arch}表示CPU架构,{soc}表示昇腾AI处理器的版本。
chmod +x ./Ascend-cann-toolkit_{version}_linux-{arch}.run
chmod +x ./Ascend-cann-kernels-{soc}_{version}_linux.run
# 校验软件包安装文件的一致性和完整性
./Ascend-cann-toolkit_{version}_linux-{arch}.run --check
./Ascend-cann-kernels-{soc}_{version}_linux.run --check
# 安装
./Ascend-cann-toolkit_{version}_linux-{arch}.run --install
./Ascend-cann-kernels-{soc}_{version}_linux.run --install

# 设置环境变量
source /usr/local/Ascend/ascend-toolkit/set_env.sh

1.3 MindIE安装

# 增加软件包可执行权限,{version}表示软件版本号,{arch}表示CPU架构。
chmod +x ./Ascend-mindie_${version}_linux-${arch}.run
./Ascend-mindie_${version}_linux-${arch}.run --check

# 方式一:默认路径安装
./Ascend-mindie_${version}_linux-${arch}.run --install
# 设置环境变量
cd /usr/local/Ascend/mindie && source set_env.sh

# 方式二:指定路径安装
./Ascend-mindie_${version}_linux-${arch}.run --install-path=${AieInstallPath}
# 设置环境变量
cd ${AieInstallPath}/mindie && source set_env.sh

1.4 Torch_npu安装

安装pytorch框架 版本2.9.0 安装包下载

使用pip安装

# {version}表示软件版本号,{arch}表示CPU架构。
pip install torch-${version}-cp310-cp310-linux_${arch}.whl

下载 pytorch_v{pytorchversion}_py{pythonversion}.tar.gz

tar -xzvf pytorch_v{pytorchversion}_py{pythonversion}.tar.gz
# 解压后,会有whl包
pip install torch_npu-{pytorchversion}.xxxx.{arch}.whl

二、下载本仓库

2.1 下载到本地

git clone https://modelers.cn/MindIE/stable_diffusion_2.1.git

2.2 环境依赖安装

pip3 install -r requirements.txt --no-deps

三、Stable-Diffusion-2.1 使用

3.1 权重及配置文件说明

下载权重和配置文件

# stable-diffusion-v2.1:
git clone https://huggingface.co/stabilityai/stable-diffusion-2-1-base

3.2 修改配置文件

将model_index.json中所有的diffusers字段修改为stablediffusion

3.3 单卡性能测试

设置权重路径

model_base='./stable-diffusion-2-1-base'

执行命令:

export ENABLE_CACHE=1
export CACHE_LEVEL=1
export TOKEN_DOWNSAMPLE=1
python3 inference_stablediffusion.py \
        --model ${model_base} \
        --prompt_file ./prompts/prompts.txt \
        --steps 50 \
        --batch_size 1 \
        --save_dir ./results \
        --device 0 \
        --use_compile

参数说明:

  • --TOKEN_DOWNSAMPLE:设置为1使能序列压缩优化;设置为0不使能
  • --ENABLE_CACHE:设置为1使能cache优化;设置为0不使能cache优化
  • --CACHE_LEVEL:300I Duo机器需要设置为4,800I A2机器需要设置为1
  • --model:模型权重路径。
  • --prompt_file:提示词文件。
  • --steps: 图片生成迭代次数。
  • --batch_size:模型batch size。
  • --save_dir:生成图片的存放目录。
  • --device:推理设备ID。
  • --use_compile:开启图模式

3.4 双卡功能测试

设置权重路径

model_base='./stable-diffusion-2-1-base'

执行命令:

export ENABLE_CACHE=1
export CACHE_LEVEL=1
export TOKEN_DOWNSAMPLE=1
ASCEND_RT_VISIBLE_DEVICES=0,1 torchrun \
        --nproc_per_node 2 \
        --master_addr localhost \
        --master_port 29500 \
        inference_stablediffusion.py \
        --model ${model_base} \
        --prompt_file ./prompts/prompts.txt \
        --steps 50 \
        --batch_size 1 \
        --save_dir ./results \
        --enable_dp \
        --use_compile

增加的参数说明:

  • --CACHE_LEVEL:300I Duo机器需要设置为4,800I A2机器需要设置为1
  • --TOKEN_DOWNSAMPLE:设置为1使能序列压缩优化;设置为0不使能
  • --ENABLE_CACHE:设置为1使能cache优化;设置为0不使能cache优化
  • --nproc_per_node:推理设备个数,使能dp并行只支持两个npu。
  • --master_addr:master节点的IP。
  • --master_port:master节点的端口号。
  • --enable_dp:使能dp并行。
  • --use_compile:开启图模式

3.5 lora热切换

下载lora模型的权重,设置权重路径

model_base='./stable-diffusion-2-1-base'
lora_base='./pytorch_lora_weights.safetensors'

执行命令

export ENABLE_CACHE=1
export CACHE_LEVEL=1
export TOKEN_DOWNSAMPLE=1
python3 inference_stablediffusion.py \
        --model ${model_base} \
        --prompt_file ./prompts/prompts.txt \
        --steps 50 \
        --batch_size 1 \
        --save_dir ./results \
        --device 0 \
        --use_lora \
        --lora_path ${lora_base}

参数说明:

  • --CACHE_LEVEL:300I Duo机器需要设置为4,800I A2机器需要设置为1
  • --use_lora:开启lora热切换
  • --lora_path:Lora模型权重路径

3.6 模型推理性能

性能参考下列数据。

硬件形态迭代次数平均耗时(w/o cache)平均耗时(with cache)
Atlas 800I A2(8*32G)502.345s0.997s

3.7 模型精度验证

本章节将使用Parti数据集对Stable-Diffusion-2.1进行精度验证。 由于生成的图片存在随机性,所以精度验证将使用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数据集,生成图片

    export ENABLE_CACHE=1
    export CACHE_LEVEL=1
    export TOKEN_DOWNSAMPLE=1
    
    # 单卡
    python inference_stablediffusion_parti.py \
           --model ${model_base} \
           --prompt_file ./PartiPrompts.tsv \
           --num_images_per_prompt 4 \
           --steps 50 \
           --save_dir ./results \
           --device 0 \
           --use_compile
    
    # 双卡
    ASCEND_RT_VISIBLE_DEVICES=0,1 torchrun --nproc_per_node 2 \
        --master_port 6001 \
        inference_stablediffusion_parti.py \
        --model ${model_base} \
        --prompt_file ./PartiPrompts.tsv \
        --num_images_per_prompt 4 \
        --steps 50 \
        --save_dir ./results \
        --use_compile \
        --enable_dp

    增加的参数说明:

    • --num_images_per_prompt: 每个prompt生成的图片数量
    • --CACHE_LEVEL:300I Duo机器需要设置为4,800I A2机器需要设置为1

    执行完成后会在./results目录下生成推理图片。

  4. 计算CLIP-score 设置CLIP权重路径

    clip_model_base='./open_clip_pytorch_model.bin'
    ASCEND_RT_VISIBLE_DEVICES=0 python clip_score_parti.py \
           --device="npu" \
           --model_name="ViT-H-14" \
           --model_weights_path=${clip_model_base} \
           --prompt_file="./PartiPrompts.tsv" \
           --image_prefix="./results"

    参数说明:

    • --device: 推理设备。
    • --model_name: Clip模型名称。
    • --model_weights_path: Clip模型权重文件路径。
    • --prompt_file: 提示词文件。
    • --image_prefix: 生成图片的存放路径。

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

优化指南

本模型使用的优化手段如下:

  • 等价优化:FA、DP并行
  • 有损优化:cache

声明

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