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/outputにsafetensorsが出力されてるのでダウンロード- RunPod/Pods に戻り、メニューから Terminate Pod をクリックして完了