微调SDXL文生图大模型+配环境

先安装好python3.9和torch2.7.0

然后装diffusers

git clone https://github.com/huggingface/diffusers
cd diffusers
pip install -e .

然后cd进入examples/text_to_image,装其他包:

cd examples/text_to_image
pip install -r requirements_sdxl.txt

cd退出来examples/text_to_image还会到之前的diffusers目录下,装xformers:

git clone https://github.com/facebookresearch/xformers.git
cd xformers
pip install -e .

这里说一下为什么不直接pip install xformers

因为xformers版本不匹配会把之前的torch2.7.0卸载。我在安装的过程中就被更换为torch2.9.0了。

接下来配置accelerate

accelerate config

具体选项看这篇,介绍得非常详细

(4 封私信 / 14 条消息) 2025-Accelerate-accelerate config 使用 DeepSpeed 命令参数说明 - 知乎

配完accelerate之后,或者FQ去huggingface或者网盘或者modelscope去网上下载这两个模型还有火影忍者数据集:

  1.SDXL:stabilityai/stable-diffusion-xl-base-1.0,下载文件夹名字为"stable-diffusion-xl-base-1.0"

  2.SDXL的修改版VAE:madebyollin/sdxl-vae-fp16-fix,下载文件夹名字为"sdxl-vae-fp16-fix"

  3.数据集:lambdalabs/naruto-blip-captions,下载文件夹名字为“lambdalabs”,里面包含naruto-blip-captions,这个里面再打开,才是数据

把这三个文件夹和你要运行的train_text_to_image_sdxl.py代码放同级目录。

运行命令里与diffusers/examples/text_to_image /README_sdxl.md有一些不同:

  第一行 增加了--num_proceses 4,表示我这次分布式训练在我4张GPU上

  第二、三、四行修改参数值为模型所在位置,VAE位置,数据集位置

  最后删除了--push_to_hub,因为我连不上外网,这里已经有--report_to="wandb",可以把实验过程记录在wandb里面了(要在wandb上注册一下账号)

accelerate lanuch --num_proceses 4 train_text_to_image_sdxl.py \
  --pretrained_model_name_or_path="stable-diffusion-xl-base-1.0" \
  --pretrained_vae_model_name_or_path="sdxl-vae-fp16-fix" \
  --dataset_name="lambdalabs/naruto-blip-captions"
  --enable_xformers_memory_efficient_attention \
  --resolution=512 --center_crop --random_flip \
  --proportion_empty_prompts=0.2 \
  --train_batch_size=1 \
  --gradient_accumulation_steps=4 --gradient_checkpointing \
  --max_train_steps=10000 \
  --use_8bit_adam \
  --learning_rate=1e-06 --lr_scheduler="constant" --lr_warmup_steps=0 \
  --mixed_precision="fp16" \
  --report_to="wandb" \
  --validation_prompt="a cute Sundar Pichai creature" --validation_epochs 5 \
  --checkpointing_steps=5000 \
  --output_dir="sdxl-naruto-model"

  参数解释:

使用 accelerate 工具来启动 train_text_to_image_sdxl.py 脚本,accelerate 可以帮助我们在多GPU、TPU等环境下进行分布式训练。

一些脚本参数解释:

--pretrained_model_name_or_path=$MODEL_NAME:指定预训练模型的名称或路径,这里使用前面定义的 MODEL_NAME 环境变量。
--pretrained_vae_model_name_or_path=$VAE_NAME:指定预训练VAE模型的名称或路径,使用前面定义的 VAE_NAME 环境变量。
--dataset_name=$DATASET_NAME:指定训练数据集的名称或路径,使用前面定义的 DATASET_NAME 环境变量。
--enable_xformers_memory_efficient_attention:启用 xformers 库的内存高效注意力机制,能减少训练过程中的内存占用。
--resolution=512 --center_crop --random_flip:
  --resolution=512:将输入图像的分辨率统一调整为512x512像素。
  --center_crop:对图像进行中心裁剪,使其达到指定的分辨率。
  --random_flip:在训练过程中随机对图像进行水平翻转,以增加数据的多样性。
--proportion_empty_prompts=0.2:设置空提示(没有文本描述)的样本在训练数据中的比例为20%。
--train_batch_size=1:每个训练批次包含的样本数量为1。
--gradient_accumulation_steps=4 --gradient_checkpointing:
  --gradient_accumulation_steps=4:梯度累积步数为4,即每4个批次的梯度进行一次更新,这样可以在有限的内存下模拟更大的批次大小。
  --gradient_checkpointing:启用梯度检查点机制,通过减少内存使用来支持更大的模型和批次大小。
--max_train_steps=10000:最大训练步数为10000步。
--use_8bit_adam:使用8位Adam优化器,能减少内存占用。
--learning_rate=1e-06 --lr_scheduler="constant" --lr_warmup_steps=0:
  --learning_rate=1e-06:学习率设置为1e-6。
  --lr_scheduler="constant":学习率调度器设置为常数,即训练过程中学习率保持不变。
  --lr_warmup_steps=0:学习率预热步数为0,即不进行学习率预热。
--mixed_precision="fp16":使用半精度(FP16)混合精度训练,能减少内存使用并加快训练速度。
--report_to="wandb":将训练过程中的指标报告到Weights & Biases(WandB)平台,方便进行可视化和监控。
--validation_prompt="a cute Sundar Pichai creature" --validation_epochs 5:
  --validation_prompt="a cute Sundar Pichai creature":指定验证时使用的文本提示,这里是“一个可爱的桑达尔·皮查伊形象”。
  --validation_epochs 5:每5个训练轮次进行一次验证。
--checkpointing_steps=5000:每5000步保存一次模型的检查点。
--output_dir="sdxl-naruto-model":指定训练好的模型的输出目录为 sdxl-naruto-model。
--push_to_hub:将训练好的模型推送到Hugging Face模型库。

 

 

参考资料:

diffusers/examples/text_to_image/README_sdxl.md at main · huggingface/diffusers · GitHub

基于Stable Diffusion XL模型进行文本生成图像的训练_optimizer.bin-CSDN博客

(4 封私信 / 14 条消息) 2025-Accelerate-accelerate config 使用 DeepSpeed 命令参数说明 - 知乎

posted @ 2025-11-19 22:01  LeeKaiHyun  阅读(30)  评论(0)    收藏  举报