HuggingFace镜像/stable_diffusion_v1.5
模型介绍文件和版本分析
下载使用量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_v1.5.git

2.2 环境依赖安装

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

三、Stable-Diffusion-v1.5 使用

3.1 权重及配置文件说明

下载权重和配置文件

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

3.2 修改配置文件

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

3.3 执行算子编译脚本

300I Duo机器一定要执行该步骤,800I A2机器不需要执行

cd pta_plugin
bash build.sh

3.4 性能测试

设置权重路径

model_base='./stable-diffusion-v1-5'

3.4.1 A2单卡性能验证

执行命令:

# 800I A2,单卡推理
export TOKEN_DOWNSAMPLE=1
export ENABLE_CACHE=1
python3 inference_stablediffusion.py \
        --model ${model_base} \
        --prompt_file ./prompts/prompts.txt \
        --steps 50 \
        --batch_size 1 \
        --save_dir ./results \
        --device 0

参数说明:

  • --TOKEN_DOWNSAMPLE:设置为1使能序列压缩优化;设置为0不使能
  • --ENABLE_CACHE:设置为1使能cache优化;设置为0不使能cache优化
  • --model:模型权重路径。
  • --prompt_file:提示词文件。
  • --steps: 图片生成迭代次数。
  • --batch_size:模型batch size。
  • --save_dir:生成图片的存放目录。

3.4.2 DUO卡单卡双芯性能验证

i. 开启cpu高性能模式

echo performance |tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
sysctl -w vm.swappiness=0
sysctl -w kernel.numa_balancing=0

ii. 开启调度流水优化

export TASK_QUEUE_ENABLE=2

iii. 绑核 安装绑核工具

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,推荐绑定其中单核以获得更好的性能。 iv. 执行推理脚本:


# 300I Duo,使能单卡双芯
export model_base=Your model path
export FATIK_FILE_PATH=./pta_plugin/build/libPTAExtensionOPS.so
export ENABLE_CACHE=1
export CACHE_LEVEL=4
export TOKEN_DOWNSAMPLE=1
export ASCEND_RT_VISIBLE_DEVICES=0,1

numactl -C 0-23
torchrun --nproc_per_node 2 inference_stablediffusion.py \
        --model ${model_base} \
        --prompt_file ./prompts/prompts.txt \
        --steps 50 \
        --batch_size 1 \
        --save_dir ./results_dp \
        --enable_dp \
        --use_compile

参数说明:

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

3.5 lora热切换

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

model_base='./stable-diffusion-v1-5'
lora_base='./pytorch_lora_weights.safetensors'

执行命令

# 800I A2,单卡推理
export TOKEN_DOWNSAMPLE=1
export ENABLE_CACHE=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}

参数说明:

  • --use_lora:开启lora热切换
  • --lora_path:Lora模型权重路径

3.6 模型推理性能

性能参考下列数据。

| 硬件形态 | 迭代次数 | 平均耗时| | :------: |:----:|:----:|:----:| | Atlas 800I A2(8*32G) | 50 | 2.821s |

3.7 模型精度验证

本章节将使用Parti数据集对Stable-Diffusion-v1.5进行精度验证。 由于生成的图片存在随机性,所以精度验证将使用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 model_base=Your model path
    export FATIK_FILE_PATH=./pta_plugin/build/libPTAExtensionOPS.so
    export ENABLE_CACHE=1
    export CACHE_LEVEL=4
    export TOKEN_DOWNSAMPLE=1
    
    # 单卡
    python inference_stablediffusion_parti.py \
           --model ${model_base} \
           --prompt_file ./PartiPrompts.tsv \
           --num_images_per_prompt 4 \
           --steps 50 \
           --batch_size 1 \
           --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生成的图片数量。
    • --FATIK_FILE_PATH:300I Duo机器需要设置;800I A2机器不用设置

    执行完成后会在./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,我们将及时审视并解答。