【Stable Diffusion】LoRAのインストール

【Stable Diffusion】LoRAのインストール 機械学習

「DreamBoothを動かせる環境がない・・・」
「気軽にモデルのファインチューニングを実行したい」

このような場合には、LoRAがオススメです。
この記事では、LoRAについて解説しています。

本記事の内容

  • LoRAとは?
  • LoRAのシステム要件
  • LoRAのインストール
  • LoRAの動作確認

それでは、上記に沿って解説していきます。

LoRAとは?

LoRAとは、モデルの微調整を行う仕組みのことです。
以下では、その仕組みで生成したモデルをLoRAモデルと呼びます。

LoRAの詳細は、GitHubのページで説明されています。

Low-rank Adaptation for Fast Text-to-Image Diffusion Fine-tuning
https://github.com/cloneofsimo/lora

LoRAの特徴として、以下が記載されています。

  • DreamBoothより2倍速い
  • 数MBのサイズ容量で済む
  • Diffusersで簡単に利用できる
  • 全体のファインチューニングより良い効果を出す場合がある
  • LoRAモデル同士を結合できる
  • CLIPとUnetを両方を微調整できる

DreamBoothは、モデル自体を新規に作成します。
それに対して、LoRAはモデルを微調整するのです。

LoRAは、オリジナルモデルをそのまま利用します。
利用したまま、CLIPとUnetを微調整する仕組みです。

モデル全体ではなく差分だけとなるため、ファイルサイズは小さくなります。
そして、その差分であるLoRAモデル同士を結合することもできます。

一言で言うと、柔軟性のあるファインチューニングと言えます。
また、LoRAではDreamBoothほどGPUメモリを必要としません。

したがって、LoRAはファインチューニングの敷居を下げていると言えます。

以上、LoRAについて説明しました。
次は、LoRAのシステム要件を説明します。

LoRAのシステム要件

LoRAのシステム要件は、主に次の二つが挙げられます。

  • PyTorch
  • Accelerate

PyTorchは、GPU版のみが対象となります。
CPUだけで学習するのは、さすがに無理があります。

各自の環境にあったバージョンをインストールします。

また、Accelerateもインストールします。

ちゃんと「accelerate config」で設定までしておきましょう。
詳細は、上記の記事内で説明しています。

以上、LoRAのシステム要件を説明しました。
次は、LoRAのインストールを説明します。

LoRAのインストール

LoRAのインストールは、Python仮想環境の利用をオススメします。
Python仮想環境は、次の記事で解説しています。

検証は、次のバージョンのPythonで行います。

> python -V  
Python 3.10.4

では、LoRAのインストールを進めていきます。
まずは、Githubからリポジトリをクローンします。

git clone https://github.com/cloneofsimo/lora.git

ダウンロードできたら、リポジトリのルートへ移動。

cd lora

同じディレクトリ上に次のファイルを確認できます。

requirements.txt

diffusers>=0.9.0 
transformers 
scipy 
ftfy 
fire

そのまま一括でインストールしましょう。

pip install -r requirements.txt

インストールには、少し時間がかかります。

以上、LoRAのインストールを説明しました。
次は、LoRAの動作確認を説明します。

LoRAの動作確認

LoRAの動作確認を行う場合、主に次の2点が考えられます。

  • LoRAモデルの利用(推論)
  • LoRAモデルの作成(学習)

今回は、LoRAモデルの利用(推論)までを確認します。
LoRAモデルの作成(学習)については、次の記事で解説しています。

では、LoRAモデルの利用を動作確認していきます。
LoRAモデルは、すでにダウンロード済みです。

この中から、適当にLoRAモデルを選びます。
そして、動作確認に利用するのは次のコードです。

import torch
from lora_diffusion import monkeypatch_lora, tune_lora_scale
from diffusers import StableDiffusionPipeline, EulerDiscreteScheduler

model_id = "stabilityai/stable-diffusion-2-1-base"
unet_pt = "lora_●●●.pt"

pipe = StableDiffusionPipeline.from_pretrained(model_id)
pipe.scheduler = EulerDiscreteScheduler.from_config(pipe.scheduler.config)
pipe = pipe.to("cuda")

monkeypatch_lora(pipe.unet, torch.load(unet_pt))
tune_lora_scale(pipe.unet, 1.2)

prompt = "style of sks, a dog in the city"

image = pipe(
    prompt,
    num_inference_steps=50,
    guidance_scale=7
).images[0]

image.save("test.png")

モデルは、Stable Diffusion v2.1を利用します。

上記コードにおいて、注目すべきは次の箇所です。

monkeypatch_lora(pipe.unet, torch.load(unet_pt)) 
tune_lora_scale(pipe.unet, 1.2)

ここで、LoRAモデルを読み込んでいます。
LoRAモデルの効果は、「1.2」の値を変更することで調整できます。

あと、LoRAモデルを反映させるためにはプロンプトを工夫する必要があります。
プロンプトには、「style of sks」を含まないといけません。
これは提供済みのLoRAモデルが、このようなルールで作成されているからです。

実際に上記コードを実行した結果、次の画像が作成されました。

test.png

特徴のある犬の画像が生成されました。
LoRAの特徴にあったように、本当に簡単にLoRAを利用できますね。

以上、LoRAの動作確認を説明しました。

タイトルとURLをコピーしました