云计算百科
云计算领域专业知识百科平台

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

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

  • 前言
    • 环境说明
  • 1.Stable-Diffusion 模型简介
  • 2.环境准备
  • 3.数据准备
    • 自定义训练数据
    • Laion400M Demo 数据集
  • 4.训练(单机多卡)
  • 5.模型推理

前言

​ 本文主要记录 【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点个星吧!!!

赞(0)
未经允许不得转载:网硕互联帮助中心 » 在实验室服务器下跑通Stable-Diffusion 训练推理
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!