【cloneofsimo/lora】LoRA(Low-Rank Adaptation)を試してみる

はじめに

以前、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