微调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 命令参数说明 - 知乎

浙公网安备 33010602011771号