Nymoréa

RunPodでのLoRA学習環境を構築して実行するまでの流れ

備忘録

1. Podのデプロイ

  • GPU: VRAM 24GB以上で空いてるやつを適当に選ぶ
  • Template: RunPod PyTorch Latest
  • Disk: 100GB程度、モデルサイズに合わせて調整
  • オプション: Start Jupyter Notebookにチェック

2. 環境構築

# 作業フォルダへの移動とsd-scriptsのクローン
cd /workspace
git clone https://github.com/kohya-ss/sd-scripts.git

# 必須ライブラリと、ダウンロード高速化パッケージのインストール
cd sd-scripts
pip install -r requirements.txt
pip install hf_transfer

# フォルダ構造の作成
mkdir -p /workspace/train_data/model
mkdir -p /workspace/train_data/output
mkdir -p /workspace/train_data/log

3. 学習データとモデルの配置

3.1 ベースモデル

  • /workspace/train_data/model/ に配置
wget -O /workspace/train_data/model/$MODEL_NAME$.safetensors https://huggingface.co/wakameAi/wakfuAI-V1.70-SDXL-Base/resolve/main/models/wakfuAI-V1.70-SDXL-Base/wakfuAI-V1.70-SDXL-Base.safetensors

3.2 学習用データ

  • /workspace/train_data/dataset/ に配置
  • ローカルで画像 + キャプションの教師データを作成し、ディレクトリ名を (リピート数)_(名前) にしてアップロード

4. 学習の実行

cat << 'EOF' > /workspace/train_data/sample_prompts.txt
trigger_word, additional_prompt, ... --n (worst quality:1.2) --w 832 --h 1216 --l 3.5 --s 28

EOF

5. 実行スクリプトの作成

  • (base_model): 3.1でダウンロードしたモデル名
  • (output_name): 任意
cat << 'EOF' > /workspace/sd-scripts/train.sh
accelerate launch --num_cpu_threads_per_process 2 sdxl_train_network.py \
  --pretrained_model_name_or_path="/workspace/train_data/model/(base_model)" \
  --train_data_dir="/workspace/train_data/dataset" \
  --output_dir="/workspace/train_data/output" \
  --output_name="(output_name)" \
  --save_model_as="safetensors" \
  --train_batch_size=16 \
  --max_train_epochs=300 \
  --save_every_n_epochs=10 \
  --mixed_precision="bf16" \
  --save_precision="bf16" \
  --optimizer_type="Prodigy" \
  --learning_rate=1.0 \
  --unet_lr=1.0 \
  --text_encoder_lr=1.0 \
  --optimizer_args "decouple=True" "weight_decay=0.01" "d_coef=2" "use_bias_correction=True" "safeguard_warmup=True" \
  --lr_scheduler="cosine" \
  --network_module="networks.lora" \
  --network_dim=128 \
  --network_alpha=128 \
  --resolution="1024,1024" \
  --max_bucket_reso=2048 \
  --min_bucket_reso=256 \
  --bucket_reso_steps=64 \
  --caption_extension=".txt" \
  --shuffle_caption \
  --max_token_length=225 \
  --gradient_checkpointing \
  --sdpa \
  --cache_latents \
  --cache_latents_to_disk \
  --min_snr_gamma=5 \
  --multires_noise_iterations=6 \
  --multires_noise_discount=0.3 \
  --sample_prompts="/workspace/train_data/sample_prompts.txt" \
  --sample_sampler="euler_a" \
  --sample_every_n_epochs=2
EOF

6. 学習の実行

学習が終了したらPodを停止するようにしておく。

bash /workspace/sd-scripts/train.sh && runpodctl stop pod $RUNPOD_POD_ID

7. ファイルの回収とTerminate

  • /workspace/train_data/outputsafetensors が出力されてるのでダウンロード
  • RunPod/Pods に戻り、メニューから Terminate Pod をクリックして完了