はじめに
以前、Diffusersを使ってLoRA(Low-Rank Adaptation)を試しました。touch-sp.hatenablog.com
今回は本家のLoRAを使ってみます。
github.com
違いはtext encoderのファインチューンができる事とDiffusesモデルへの出力が簡単なことです。
環境構築
「bitsandbytes」を併用するためWSL2を使っています。Ubuntu 22.04 on WSL2 (Windows 11) RTX 3080 VRAM 12GB CUDA 11.7.1 Python 3.10.6
pip install torch==1.13.1+cu117 torchvision==0.14.1+cu117 --extra-index-url https://download.pytorch.org/whl/cu117 pip install git+https://github.com/cloneofsimo/lora.git@develop pip install accelerate==0.16.0 pip install xformers==0.0.17.dev441 pip install triton==2.0.0.dev20221202 pip install bitsandbytes-cuda117==0.26.0.post2
実行
学習
今回はtext encoderの学習は行っていません。Diffusersモデルに出力した際にtext encoderの学習がうまく反映されなかったためです。
accelerate launch train_lora_dreambooth.py \ --pretrained_model_name_or_path="stable-diffusion-v1-4" \ --instance_data_dir="RoboData" \ --output_dir="model" \ --instance_prompt="a photo of sks robo" \ --with_prior_preservation \ --class_data_dir="robo-class-images" \ --class_prompt="a photo of robo" \ --resolution=512 \ --color_jitter \ --train_batch_size=1 \ --gradient_accumulation_steps=1 \ --gradient_checkpointing \ --learning_rate=1e-4 \ --learning_rate_text=5e-5 \ --lr_scheduler="constant" \ --lr_warmup_steps=0 \ --save_steps=100 \ --max_train_steps=200 \ --use_8bit_adam \ --use_xformers
Diffusersモデルへの出力(これがやりたかった!)
lora_add stable-diffusion-v1-4 model/lora_weight.safetensors output_merged.ckpt 1.0 --mode upl
その他
Diffusersモデルへ出力することでその後いろいろ使いやすいです。たとえば以下です。touch-sp.hatenablog.com