AI大模型教程
一起来学习

在实验室服务器下跑通Stable-Diffusion 训练推理

前言


本文主要记录 【PaddleMIX 热身打卡】跑通 Stable-Diffusion 训练推理​​​​​​

完成过程与遇到的问题及其解决方案

环境说明

本人使用MobaXterm管理实验室的Linux(别用windows,readme里说了windows系统未经测试,而且本地那张破卡也跑不动)服务器,本地使用pycharm管理代码,无可用服务器的同学推荐去AI Studio


1.Stable-Diffusion 模型简介

参考飞桨团队实现的Stable-Diffusion中的README.md

2.环境准备

git clone 命令拉取源码,并安装环境。
实际上只需要用到PaddleMIX/ppdiffusers/examples/stable_diffusion中的项目文件,不过因为项目中的training data都需要自己下,所以仓库就几百个mb,都clone了吧。

# 克隆 PaddleMIX 仓库
git clone https://github.com/PaddlePaddle/PaddleMIX.git

# 进入stable diffusion目录
cd PaddleMIX/ppdiffusers/examples/stable_diffusion

本模型训练与推理需要依赖 CUDA 11.2 及以上版本,因此最好使用3.10以上的python

# 新建一个3.10 python环境
conda create -n paddlemix python=3.10 -y
# 安装所需的依赖, 如果提示权限不够,请在最后增加 --user 选项
pip install -r requirements.txt

以上步骤基本不会遇到任何问题

3.数据准备

你可以自定义训练数据,也可以用给的Laion400M Demo 数据集

自定义训练数据

Laion400M Demo 数据集

这部分没啥好说的,联网下个数据集完事儿

# 删除当前目录下的data(防止地址冲突)
rm -rf data
# 下载 laion400m_demo 数据集
wget https://paddlenlp.bj.bcebos.com/models/community/junnyu/develop/laion400m_demo_data.tar.gz

下好是这样的

# 解压
tar -zxvf laion400m_demo_data.tar.gz

解压完是这样的

4.训练(单机多卡)

把下段代码保存为train.sh,放进stable_diffusion文件夹,执行sh train.sh
有个细节,我没选0号gpu,因为很多人都默认用这个gpu跑一些toy_model,担心撞车,显存不够;不过也可以用nvidia-smi看一下有无占用

export FLAG_FUSED_LINEAR=0
export FLAGS_conv_workspace_size_limit=4096
# 是否开启 ema
export FLAG_USE_EMA=0
# 是否开启 recompute
export FLAG_RECOMPUTE=1
# 是否开启 xformers
export FLAG_XFORMERS=1

# 如果使用自定义数据
FILE_LIST=./processed_data/filelist/custom_dataset.filelist.list
# 如果使用laion400m_demo数据集,需要把下面的注释取消
# FILE_LIST=./data/filelist/train.filelist.list

python -u -m paddle.distributed.launch --gpus "1,2,3,4,5,6,7" train_txt2img_laion400m_trainer.py 
    --do_train 
    --output_dir ./laion400m_pretrain_output_trainer 
    --per_device_train_batch_size 32 
    --gradient_accumulation_steps 1 
    --learning_rate 1e-4 
    --weight_decay 0.01 
    --max_steps 200000 
    --lr_scheduler_type "constant" 
    --warmup_steps 0 
    --image_logging_steps 1000 
    --logging_steps 10 
    --resolution 256 
    --save_steps 10000 
    --save_total_limit 20 
    --seed 23 
    --dataloader_num_workers 4 
    --vae_name_or_path CompVis/stable-diffusion-v1-4/vae 
    --text_encoder_name_or_path CompVis/stable-diffusion-v1-4/text_encoder 
    --unet_name_or_path ./sd/unet_config.json 
    --file_list ${FILE_LIST} 
    --model_max_length 77 
    --max_grad_norm -1 
    --disable_tqdm True 
    --bf16 False

报错,无’ppdiffusers’库,没关系,再装一下就好了

pip install ppdiffusers

完事去运行又报错

查了一下,需要退化一下hugging_face包的版本

pip install huggingface_hub=0.25.2 -i https://pypi.tuna.tsinghua.edu.cn/simple

然后再开始训练

ok了,但是7张A600训练了两个小时才跑了百分之一,于是接下来直接用pretrained model进行推理吧

5.模型推理

看注释吧

from ppdiffusers import StableDiffusionPipeline, UNet2DConditionModel
# 加载公开发布的 unet 权重
unet_model_name_or_path = "CompVis/stable-diffusion-v1-4/unet"
unet = UNet2DConditionModel.from_pretrained(unet_model_name_or_path)
pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", safety_checker=None, unet=unet)
#  提示词
prompt = "a photo of an astronaut riding a horse on mars"  # or a little girl dances in the cherry blossom rain
#  可以通过调整参数width和height调整分辨率(但是最好保证训练分辨率和输出的分辨率一致),过大的分辨率容易爆显存
image = pipe(prompt, guidance_scale=7.5, width=512, height=512).images[0]
image.save("astronaut_rides_horse.png")

成功输出,搞定
prompt:‘a flying paddle of baidu’

觉得有用就给我github https://github.com/xueyunfeng123?tab=repositories点个星吧!!!

文章来源于互联网:在实验室服务器下跑通Stable-Diffusion 训练推理

赞(0)
未经允许不得转载:5bei.cn大模型教程网 » 在实验室服务器下跑通Stable-Diffusion 训练推理
分享到: 更多 (0)

AI大模型,我们的未来

小欢软考联系我们