見出し画像

Lambda LabsでControlNet-LLLiteを学習する

タイトル通りです。自分用環境構築メモなので説明は簡素です。

①データセットとベースモデルをGoogleドライブにアップロードする

学習用データセットをzipにまとめ、Googleドライブに配置し、共有リンクにします。

https://drive.google.com/file/d/XXXXXXXXXXXXXXXXXXXXXXXXX/view?usp=sharing

という共有リンクなら、『XXXXXXXXXXXXXXXXXXXXXXXXX』という文字列を控えておきます

同じ流れでベースとなるモデル(今回はsd_xl_base_1.0_0.9vae.safetensors)もGoogleドライブに配置しましょう。

②インスタンスを立てる

とりあえず1xA10で。安いので。

③必要なライブラリをインストール

Jupyter LabではTerminalを選択。

CUDAはあらかじめインストールされている。

git clone -b sdxl https://github.com/kohya-ss/sd-scripts.git
cd sd-scripts

pip install -U xformers
pip install --upgrade -r requirements.txt
pip install bitsandbytes==0.41.1
pip install scipy

sudo apt-get update
sudo apt-get install nano
sudo apt-get install -y libgl1-mesa-dev
sudo apt-get install unzip

accelerate config
- This machine
- No distributed training
- NO
- NO
- NO
- all
- bf16

④ベースとなるSDモデルをDLする

curl -sc /tmp/cookie "https://drive.google.com/uc?export=download&id=①で控えておいた文字列" > /dev/null
CODE=$(awk '/_warning_/ {print $NF}' /tmp/cookie)
curl -Lb /tmp/cookie "https://drive.google.com/uc?export=download&confirm=${CODE}&id=①で控えておいた文字列" -o sd_xl_base_1.0_0.9vae.safetensors

⑤データセットをDLする

curl -sc /tmp/cookie "https://drive.google.com/uc?export=download&id=①で控えておいた文字列" > /dev/null
CODE=$(awk '/_warning_/ {print $NF}' /tmp/cookie)
curl -Lb /tmp/cookie "https://drive.google.com/uc?export=download&confirm=${CODE}&id=①で控えておいた文字列" -o lllite_normalmap.zip

unzip lllite_normalmap.zip

rm lllite_normalmap.zip

⑥設定ファイルを作成する。

nano normalmap_dataset.toml
[general]
flip_aug = false
color_aug = false
resolution = [1024,1024]

[[datasets]]
batch_size = 16
enable_bucket = false

    [[datasets.subsets]]
    image_dir = "lllite_normalmap/Normal"
    caption_extension = ".txt"
    conditioning_data_dir = "lllite_normalmap/Line"
nano normalmap_config.toml
pretrained_model_name_or_path = "sd_xl_base_1.0_0.9vae.safetensors"
max_train_epochs = 70
max_data_loader_n_workers = 4
persistent_data_loader_workers = true
seed = 42
gradient_checkpointing = true
mixed_precision = "bf16"
save_precision = "bf16"
full_bf16 = false
optimizer_type = "adamw8bit"
learning_rate = 2e-4
xformers = true
output_dir = "models"
output_name = "normalmap"
save_every_n_epochs = 5
save_state = true
save_model_as = "safetensors"
vae_batch_size = 4
cache_latents = true
cache_latents_to_disk = true
cache_text_encoder_outputs = true
cache_text_encoder_outputs_to_disk = true
network_dim = 64
cond_emb_dim = 32
dataset_config = "normalmap_dataset.toml"

出力先フォルダを作る

mkdir models

⑦学習を実行

accelerate launch --num_cpu_threads_per_process 1 sdxl_train_control_net_lllite.py --config_file normalmap_config.toml

6時間位待つ!!!!!!!!

ちなみに今回はnormalmapと線画を紐づけて覚えるかの実験です。うまくいくかは予定は未定。

SDXLだけではノーマルマップ概念を覚えないので、事前にノーマルマップLoRAを作ってあります。

この記事が気に入ったらサポートをしてみませんか?