先安裝好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

具體選項看這篇,介紹得非常詳細

配完accelerate之後,或者FQ去huggingface或者網盤或者modelscope去網上下載這兩個模型還有火影忍者數據集:

stabilityai/stable-diffusion-xl-base-1.0,下載文件夾名字為"stable-diffusion-xl-base-1.0"

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模型庫。