Vast.AIでControlNet学習
タイトル通りです。ローカルでSDXLのControlNet学習ができるようになったのはいいのですが安眠妨害装置なることこの上ないので、結局クラウドGPUを借りて学習させることにしました。
以下、自分用備忘録です。
①vast aiにクレジット課金
vast ai(https://vast.ai/)のアカウントを作成して、クレジットカードを登録する。
左のタブのBilldingから設定。一先ず5~10$で良いかと。
【実作業】
ここからはサーバーを借りて時間勝負なので、ざっと工程を説明。
①vast aiでA6000をレンタルし、Notebookを開く
②huggingfaceにログイン
③diffusersをgitでクローンする
④必要なライブラリをインストールする(数分)
⑤学習開始。
②適当な条件でサーバーをレンタル
適当な条件のサーバーを見つけてレンタルします。
Docker Repository and Environment:pytorch/pytorch:2.1.0-cuda11.8-cudnn8-devel
GPURAM:48GBより上のやつ
Upload/Download speed:上がり下り共に600Mbps↑はでてほしい
SSDやHDD容量:100GB↑
EDIT IMAGE & CONFIGでDocker Optionsを開いて
-p 8081:8081を追加する(ログを確認するため)
参考:https://vast.ai/faq#networking
-e DATA_DIRECTORY=/workspace/ -e JUPYTER_DIR=/ -p 8081:8081
今回は↑をレンタル。なんか色々確認がでたら承認。
セキュリティー関係でchromeに怒られたら、詳細設定を押して突破してください。私はESET インターネット セキュリティのファイアウォールを一旦切らないと中に入れませんでした。
③terminalに入る
terminalというアイコンをクリック
④ huggingfaceにログイン
https://huggingface.co/settings/tokens
からwrite権限のトークンを入手
pip install huggingface_hub
python -c "from huggingface_hub import HfFolder; hf = HfFolder(); hf.save_token('トークン入力')"
New modelでモデルのリポジトリを作っておいて、repo_idを控えておくこと(アップロードする時に使います。
↓の画像でいうと『tori29umai/CN_Stick_Figures』がrepo_id
⑤必要ライブラリのインストールおよび設定
以下を一行ずつ実行
git clone https://github.com/huggingface/diffusers
cd diffusers
pip install -e .
cd examples/controlnet
pip install -r requirements_sdxl.txt
pip install peft==0.8.2 -U
pip install xformers==0.0.22.post4 --index-url https://download.pytorch.org/whl/cu118
pip install bitsandbytes==0.43.1 -U
accelerate config
- This machine
- No distributed training
- NO
- NO
- NO
- all
- fp16
手動でvalidation画像(モデルの学習進捗をチェックするためのテスト用画像のこと)を上げる
diffusers/examples/controlnet/1024.png
出力先を作る
mkdir output
accelerate launch train_controlnet_sdxl.py \
--pretrained_model_name_or_path="cagliostrolab/animagine-xl-3.1" \
--output_dir="output" \
--train_data_dir="tori29umai/dart_v2_sft_img_BlurCN" \
--mixed_precision="fp16" \
--resolution=1024 \
--learning_rate=1e-5 \
--train_batch_size=1 \
--tracker_project_name="controlnet" \
--enable_xformers_memory_efficient_attention \
--max_train_steps=50000 \
--checkpointing_steps=10000 \
--num_validation_images=1 \
--validation_steps=10000 \
--validation_image "1024.png" \
--validation_prompt "1girl, solo, brown hair, shirt, looking at viewer, blush, black shirt, simple background, white background, collarbone, short hair, closed mouth, brown eyes, upper body, breasts, medium breasts, bob cut" \
--seed=42
⑥ログの確認
インスタンスのIP部分をクリックするとIPアドレスとポートが確認できるので8081と紐づいているポートを確認。
学習しているターミナルとは別に新しいターミナルを開き、
cd diffusers/examples/controlnet
tensorboard --logdir=output/logs/ --port=8081 --host 0.0.0.0
して、ブラウザで以下のURLにアクセスします
http://ここをメモるの部分
するとログページが開きます!!!!
まぁ私、ログの数値の見方いまいち知らんのだけどね。なんなのアレ?
validation画像の結果が見れるのが嬉しい。
⑦huggingfaceにモデルアップロード
huggingface-cli upload [repo_id] [アップロード元フォルダ] [DL先フォルダ]
huggingface-cli upload tori29umai/CN_Stick_Figures diffusers/examples/controlnet/output/checkpoint-30000/controlnet ./CN_Stick_Figures_30000
ブラウザから直接モデルをDLするより、なぜかhuggingfaceを介した方が早い気がします。謎だ。