38 Star 378 Fork 234

GVPAscend/MindSpeed-MM

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

Diffusers

简体中文 |

Stable Diffusion 3

模型介绍

扩散模型(Diffusion Models)是一种生成模型,可生成各种各样的高分辨率图像。Diffusers 是 HuggingFace 发布的模型套件,是最先进的预训练扩散模型的首选库,用于生成图像,音频,甚至分子的3D结构。套件包含基于扩散模型的多种模型,提供了各种下游任务的训练与推理的实现。

  • 参考实现:

    url=https://github.com/huggingface/diffusers
    commit_id=94643fac8a27345f695500085d78cc8fa01f5fa9
    

微调

环境搭建

【模型开发时推荐使用配套的环境版本】

软件 版本 安装指南
Python 3.8
Driver AscendHDK 24.1.RC3 驱动固件安装指南
Firmware AscendHDK 24.1.RC3
CANN CANN 8.0.RC3 CANN 软件安装指南
Torch 2.1.0 Ascend Extension for PyTorch 配置与安装
Torch_npu release v6.0.RC3
  1. 软件与驱动安装

torch npu 与 CANN包参考链接:安装包参考链接

```bash
# python3.8
conda create -n test python=3.8
conda activate test

# 安装 torch 和 torch_npu,注意要选择对应python版本、x86或arm的torch、torch_npu及apex包
pip install torch-2.1.0-cp38-cp38m-manylinux2014_aarch64.whl 
pip install torch_npu-2.1.0*-cp38-cp38m-linux_aarch64.whl

# apex for Ascend 参考 https://gitee.com/ascend/apex
pip install apex-0.1_ascend*-cp38-cp38m-linux_aarch64.whl

# 将shell脚本中的环境变量路径修改为真实路径,下面为参考路径
source /usr/local/Ascend/ascend-toolkit/set_env.sh
```
  1. 克隆仓库到本地服务器

    git clone --branch 1.0.RC3 https://gitee.com/ascend/MindSpeed-MM.git
    
  2. 模型搭建

    3.1 【下载 SD3 GitHub参考实现 或 在模型根目录下执行以下命令,安装模型对应PyTorch版本需要的依赖】

    git clone https://github.com/huggingface/diffusers.git -b v0.30.0
    cd diffusers
    git checkout 94643fac8a27345f695500085d78cc8fa01f5fa9
    cp -r ../MindSpeed-MM/examples/diffusers/sd3 ./sd3
    

    【主要代码路径】

    code_path=examples/dreambooth/
    

    3.2【安装其余依赖库】

    pip install -e .
    vim examples/dreambooth/requirements_sd3.txt #修改版本:torchvision==0.16.0, torch==2.1.0, accelerate==0.33.0, 添加deepspeed==0.15.2
    pip install -r examples/dreambooth/requirements_sd3.txt # 安装对应依赖
    

微调

  1. 【准备微调数据集】

    用户需自行获取并解压pokemon-blip-captions数据集,并在以下启动shell脚本中将dataset_name参数设置为本地数据集的绝对路径

    vim sd3/finetune_sd3_dreambooth_deepspeed_**16.sh
    vim sd3/finetune_sd3_dreambooth_fp16.sh
    
    dataset_name="pokemon-blip-captions" # 数据集 路径
    
    • pokemon-blip-captions数据集格式如下:
    pokemon-blip-captions
    ├── dataset_infos.json
    ├── README.MD
    └── data
          └── train-001.parquet
    
    • 只包含图片的训练数据集,如非deepspeed脚本使用训练数据集dog:下载地址,在shell启动脚本中将input_dir参数设置为本地数据集绝对路径>
    input_dir="dog" # 数据集路径
    
    dog
    ├── alvan-nee-*****.jpeg
    ├── alvan-nee-*****.jpeg
    

    说明: 该数据集的训练过程脚本只作为一种参考示例。

  2. 【配置 SD3 微调脚本】

    联网情况下,微调模型可通过以下步骤下载。无网络时,用户可访问huggingface官网自行下载sd3-medium模型 model_name模型

    export model_name="stabilityai/stable-diffusion-3-medium-diffusers" # 预训练模型路径
    

    获取对应的微调模型后,在以下shell启动脚本中将model_name参数设置为本地预训练模型绝对路径

    scripts_path="./sd3" # 模型根目录(模型文件夹名称)
    model_name="stabilityai/stable-diffusion-3-medium-diffusers" # 预训练模型路径
    dataset_name="pokemon-blip-captions" 
    batch_size=4
    max_train_steps=2000
    mixed_precision="bf16" # 混精
    resolution=1024
    config_file="${scripts_path}/${mixed_precision}_accelerate_config.yaml"
    

    数据集选择:如果选择默认原仓数据集,需修改两处dataset_nameinput_dir

    input_dir="dog"
    
    # accelerator 修改 --dataset_name=#dataset_name
    --instance_data_dir=$input_dir
    

    修改fp16_accelerate_config.yamldeepspeed_config_file的路径:

    vim sd3/fp16_accelerate_config.yaml
    # 修改:
    deepspeed_config_file: ./sd3/deepspeed_fp16.json # deepspeed JSON文件路径
    
  3. 【Optional】Ubuntu系统需在train_dreambooth_sd3.py1705行附近 与 train_dreambooth_lora_sd3.py1861行附近 添加 accelerator.print("")

    vim examples/dreambooth/train_dreambooth_sd3.py
    #
    vim examples/dreambooth/train_dreambooth_lora_sd3.py
    

    如下:

    if global_step >= args.max_train_steps:
      break
    accelerator.print("")
    
  4. 【如需保存checkpointing请修改代码】

    vim examples/dreambooth/train_dreambooth_sd3.py
    #
    vim examples/dreambooth/train_dreambooth_lora_sd3.py
    
    • if accelerator.is_main_process后增加 or accelerator.distributed_type == DistributedType.DEEPSPEED(dreambooth在1681行附近,lora在1833行附近)
    • 在文件上方的import栏增加DistributedTypefrom accelerate import Acceleratore后 (30行附近)
    from accelerate import Accelerator, DistributedType
    if accelerator.is_main_process or accelerator.distributed_type == DistributedType.DEEPSPEED:
    
  5. 【修改文件】

    vim examples/dreambooth/train_dreambooth_sd3.py
    #
    vim examples/dreambooth/train_dreambooth_lora_sd3.py
    

    在log_validation里修改pipeline = pipeline.to(accelerator.device)train_dreambooth_sd3.py在174行附近train_dreambooth_lora_sd3.py在198行附近

    # 修改pipeline为:
    pipeline = pipeline.to(accelerator.device, dtype=torch_dtype)
    
  6. 【启动 SD3 微调脚本】

    本任务主要提供混精fp16混精bf16dreambooth和dreambooth+lora的8卡训练脚本,使用与不使用deepspeed分布式训练。

    bash sd3/finetune_sd3_dreambooth_deepspeed_**16.sh #使用deepspeed,dreambooth微调
    bash sd3/finetune_sd3_dreambooth_fp16.sh #无使用deepspeed,dreambooth微调
    bash sd3/finetune_sd3_dreambooth_lora_fp16.sh #无使用deepspeed,dreambooth+lora微调
    

性能

吞吐

SD3 在 昇腾芯片参考芯片 上的性能对比:

芯片 卡数 任务 FPS batch_size AMP_Type Torch_Version deepspeed
Atlas 900 A2 PODc 8p Dreambooth-全参微调 17.08 4 bf16 2.1
竞品A 8p Dreambooth-全参微调 17.51 4 bf16 2.1
Atlas 900 A2 PODc 8p Dreambooth-全参微调 16.57 4 fp16 2.1
竞品A 8p Dreambooth-全参微调 16.36 4 fp16 2.1
Atlas 900 A2 PODc 8p Dreambooth-全参微调 11.91 1 fp16 2.1
竞品A 8p Dreambooth-全参微调 12.08 1 fp16 2.1
Atlas 900 A2 PODc 8p DreamBooth-LoRA 122.47 8 fp16 2.1
竞品A 8p DreamBooth-LoRA 120.32 8 fp16 2.1

推理

环境搭建及运行

同微调对应章节

【运行推理的脚本】

图生图推理脚本需先准备图片:下载地址 修改推理脚本中预训练模型路径以及图生图推理脚本中的本地图片加载路径 调用推理脚本

python sd3/infer_sd3_img2img_fp16.py   # 单卡推理,文生图
python sd3/infer_sd3_text2img_fp16.py  # 单卡推理,图生图

使用基线数据集进行评估

引用

公网地址说明

代码涉及公网地址参考 public_address_statement.md

马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/ascend/MindSpeed-MM.git
git@gitee.com:ascend/MindSpeed-MM.git
ascend
MindSpeed-MM
MindSpeed-MM
1.0.RC3

搜索帮助