Ubuntu で LoRA モデルを作成しました

Ubuntu で Stable Diffusion 用の LoRA モデル (追加学習モデル) を作成しました。
素直に Windows でやればいいだけのことなので、わざわざ Ubuntu でやることもないとは思うのですが、CUDA と cuDNN 入れて、Anaconda 入れて、PyTorch 入れて……と、結構めんどうだったので、やったことを記事にして残しておくことにします。

先日こんなツイートをしました。

参考にしたのは、テルルとロビンチャンネルのこの動画。
www.youtube.com

この動画、「日本一わかりやすい」と言うだけあって本当に分かりやすかったです。この動画の他にも色々調べ回ったんですが、結局これが一番よかったです。
でも手順が Windows 向けなんです。私の PC は OS が Ubuntu だし、Python は Anaconda を使ってるし。
この動画では sd-scripts というツールを使って LoRA 学習する方法を説明されているのですが、GitHub で sd-scripts の README を見ても、やっぱり Windows 向けのインストール手順しか書いてないんですよね。
でも、手順を見てたら Ubuntu でも動かせそうだったので、試してみることにしました。

使うもの

ハードウェア

NVIDEA 製 GPUビデオカード (グラフィックボードとかグラフィックカードなんて呼び方もする) を搭載した PC が必要です。
ちなみに私の PC は自作したもので、構成は以下のとおりです。

(AI 画像作成用としては、もはや最低スペックとなっている気がする……)

ソフトウェア

ソフトウェアとしては以下のものを使います。

Stable Diffusion チェックポイント ファイル (モデルファイル)

LoRA のベースにするモデル ファイルです。今回は Counterfeit-V3.0 を使用しました。
huggingface.co

学習元の画像ファイル

東北ずん子・ずんだもんプロジェクトサイトでAI画像モデル用学習データが提供されているので、今回はこれを使用します。
zunko.jp

インストール

Ubuntu 22.04 インストール

Ubuntu 22.04 のインストール手順は、kledgeb チャンネルのこちらの動画をどうぞ。

www.youtube.com

www.youtube.com

www.youtube.com

www.youtube.com

CUDA Toolkit インストール

CUDA Toolkit は、CUDA アーキテクチャ アプリケーション作成用の開発ツールです。ビデオカードを使ってなんやかんやするときに使うツール類ってことですね。CUDA Toolkit にはビデオカードのドライバも含まれます。
2023/06/01 時点で CUDA Toolkit の最新バージョンは 12.1 なのですが、sd-scripts が使用するPython ライブラリの内、PyTorch と bitsandbytes が 11.8 までにしか対応していないので、11.8 をインストールします。
私の PC は 12.0 をインストールしていたので、11.8 にダウングレードしました。

こちらのサイトを開いて、
developer.nvidia.com

開いた画面で CUDA Toolkit 11.8.0 をクリックして、

Linuxx86_64Ubuntu22.04deb (local) を選んでいくと、こんな画面になります。

この画面の Installation Instructions: 以下の部分が、CUDA 11.8 のインストール コマンドになります。

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin
sudo mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda-repo-ubuntu2204-11-8-local_11.8.0-520.61.05-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2204-11-8-local_11.8.0-520.61.05-1_amd64.deb
sudo cp /var/cuda-repo-ubuntu2204-11-8-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda

端末アプリを開いて、このインストール コマンドを上から順番に実行していきます。
全て実行し終わったら、PC をリブートします。

vi などのエディタでホームディレクトリにある .profile ファイルを開き、末尾に以下の2行を追加して保存します。

export PATH=/usr/local/cuda-11.8/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

次のコマンドを実行して、この変更を反映させます。

. ~/.profile

追加のドライバーアプリを開きます。 ビデオカード ドライバも更新されて、バージョンが 520 になりました。

cuDNN インストール

cuDNN は Deep Learning 用の CUDA ライブラリです。ビデオカードを使って AI をなんやかんやするときに使うライブラリってことですね。
インストーラNVIDIA Developer というサイトからダウンロードするのですが、ユーザ登録しないとダウンロードができません。ユーザ登録しても課金されたりするわけではありませんのでご安心を。
developer.nvidia.com

NVIDIA Developer にユーザ登録してログインしたら、cudnn のインストーラをダウンロードします。 developer.nvidia.com

インストールした CUDA Toolkit のバージョンは 11.8 ですので、cuDNN も 11.8 に対応しているものをインストールします。
2023/06/01 時点で最新版の Download cuDNN v8.9.1 (May 5th, 2023), for CUDA 11.x を開き、Local Installer for Ubuntu22.04 x86_64 (Deb) をクリックするとファイルがダウンロードが始まります。
今回は cudnn-local-repo-ubuntu2204-8.9.1.23_1.0-1_amd64.deb という 900 MB ほどのファイルがダウンロードされました。

このファイルでインストールしていきます。
公式のインストール手順はこちらです。(NVIDIA Developer にログインしないと参照できません)
https://docs.nvidia.com/deeplearnROCming/cudnn/install-guide/index.html

端末 アプリで以下のコマンドを実行していきます。

ダウンロードしたファイルでインストールする。

sudo dpkg -i cudnn-local-repo-ubuntu2204-8.9.1.23_1.0-1_amd64.deb

CUDA GPG キーをインポートする。

sudo cp /var/cudnn-local-repo-*/cudnn-local-*-keyring.gpg /usr/share/keyrings/

リポジトリ メタデータを更新する。

sudo apt-get update

ランタイム ライブラリをインストールする。

  • 8.9.1.23 の部分は cuDNN のバージョンを示しています。 インストーラ ファイル名が cudnn-local-repo-ubuntu2204-8.9.1.23_1.0-1_amd64.deb なので 8.9.1.23 とします。
  • 11.8 の部分は CUDA Toolkit のバージョンを示しています。今回は CUDA Toolkit 11.8 を使用するので 11.8 とします。
sudo apt-get install libcudnn8=8.9.1.23-1+cuda11.8

開発者ライブラリをインストールする。

sudo apt-get install libcudnn8-dev=8.9.1.23-1+cuda11.8

コード サンプルと cuDNN ライブラリ ドキュメントをインストールする。

sudo apt-get install libcudnn8-samples=8.9.1.23-1+cuda11.8

Anaconda インストール

Pythonディストリビューションです。Python でプログラミングできるようにするためのものです。

公式のインストール手順はこちらです。
docs.anaconda.com

インストーラはここからダウンロードできます。
www.anaconda.com Anaconda3-2023.03-1-Linux-x86_64.sh というファイルがダウンロードされました。

端末アプリを開き、以下のコマンドを実行してインストールしていきます。

必要なライブラリをインストールする。

sudo apt update
sudo apt install libgl1-mesa-glx libegl1-mesa libxrandr2 libxrandr2 libxss1 libxcursor1 libxcomposite1 libasound2 libxi6 libxtst6

ダウンロードしたファイルを実行する。

bash Anaconda3-2023.03-1-Linux-x86_64.sh

質問に答えていきます。

使用許諾契約書の参照確認

In order to continue the installation process, please review the license
agreement.
Please, press ENTER to continue
>>> ENTER を押す

ライセンス条項の同意

Do you accept the license terms? [yes|no]
[no] >>> yes と入力する。

インストール先ディレクトリの確認

Anaconda3 will now be installed into this location:
/home/jintaro/anaconda3

- Press ENTER to confirm the location
- Press CTRL-C to abort the installation
- Or specify a different location below

[/home/jintaro/anaconda3] >>> 自分のホームディレクトリ直下のままでよければ、ENTER を押す。

conda init を実行するかどうか確認

Do you wish the installer to initialize Anaconda3
by running conda init? [yes|no]
[no] >>> yes と入力する。

Thank you for installing Anaconda3! と出たら、インストール完了です。

git インストール

git はバージョン管理システムです。今回は GitHub から sd-scripts をダウンロードするために使います。
端末アプリを開き、以下のコマンドを実行してインストールします。

sudo apt update
sudo apt install git

Anaconda 仮想環境作成

Anaconda 仮想環境を作成します。
仮想環境を使うと、用途に合わせて Python のバージョンを変えたり、インストールするライブラリを変えたりすることができます。 今回作成する仮想環境の名前は lora としました。(別に lora でなくても構いません)

端末アプリを開き、以下のコマンドを実します。

python 3.10.6 をインストールした仮想環境 lora を作成する。

conda create -n lora python=3.10.6

Anaconda 仮想環境 lora が作成できていることを確認する。

conda info -e

Anaconda 仮想環境 lora に入る。

conda activate lora

ちなみに、Anaconda 仮想環境 lora から出るコマンドは以下の通りです。

conda deactivate

PyTorch インストール

PyTorch は Python機械学習ライブラリです。
PyTorch を、先ほど作成した Anaconda 仮想環境 lora にインストールします。

こちらのサイトを開いて、
pytorch.org

Stable (2.0.1)LinuxpipPythonCUDA 11.8 を選んでいくと、こんな画面になります。

この画面の Run this Command: の部分が、PyTorch のインストール コマンドになります。
端末アプリを開き、このコマンドを実行してインストールします。

Anaconda 仮想環境に入っていない場合は、必ず入ってからインストールを実行してください。(仮想環境 lora に入る例)

conda activate lora

PyTorch をインストールする。

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

sd-scripts インストール

sd-scripts は LoRA の学習ツールです。これを使って LoRA モデルのファイルを作成します。

端末アプリを開き、以下のコマンドを実行します。

sd-scripts を git でダウンロードする。

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

ダウンロードされた sd-scripts ディレクトリに移動する。

cd sd-scripts

Anaconda 仮想環境に入っていない場合は、必ず入ってからインストールを実行してください。(仮想環境 lora に入る例)

conda activate lora

ライブラリをインストールする。

pip install --upgrade -r requirements.txt
pip install -U xformers

PyTorch の Accelerate を設定する。

accelerate config

質問には以下のように答えます。

In which compute environment are you running?
Please select a choice using the arrow or number keys, and selecting with enter
This machine
AWS (Amazon SageMaker)

Which type of machine are you using?
Please select a choice using the arrow or number keys, and selecting with enter
No distributed training
multi-CPU
multi-GPU
TPU
MPS

Do you want to run your training on CPU only (even if a GPU is available)? [yes/NO]:NO

Do you wish to optimize your script with torch dynamo?[yes/NO]:NO

Do you want to use DeepSpeed? [yes/NO]: NO

What GPU(s) (by id) should be used for training on this machine as a comma-seperated list? [all]:all

Do you wish to use FP16 or BF16 (mixed precision)?
Please select a choice using the arrow or number keys, and selecting with enter
no
fp16
bf16

LoRA 学習モデル作成

作業ディレクトリ作成

この動画でやっている通りにディレクトリを作成することにします。
www.youtube.com

ホームディレクトリ (私の場合は /home/jintaro) 下に、以下のようにディレクトリを作成します。

/home/jintaro
└── kiritan-lora
    ├── outputs
    ├── seisoku
    └── sozai

チェックポイント ファイル ダウンロード

LoRA のベースにするチェックポイント ファイルをダウンロードします。今回は Counterfeit-V3.0 を使用しました。
Files and versions から Counterfeit-V3.0_fp16.safetensors というファイルをダウンロードします。サイズが 4.2 GB ありますので、ストレージの残容量にご注意願います。
huggingface.co

Counterfeit-V3.0_fp16.safetensors はどこに置いても構いません。
私の場合は、このファイルを Stable Diffusion でも使うので、Stable Diffusion のチェックポイント ファイル格納ディレクト/home/jintaro/stable-diffusion-webui/models/Stable-diffusion/ に入れました。

学習データ ダウンロード

東北ずん子・ずんだもんプロジェクトサイトで提供されているAI画像モデル用学習データをダウンロードして、画像ファイルとテキストファイル (キャプションファイル) を sozai ディレクトリに入れます。
zunko.jp

データセット コンフィグ ファイル作成

以下の内容のをデータセット コンフィグ ファイル作成して、kiritan-lora ディレクトリに入れます。 ファイル名は datasetconfig.toml としました。

  • image_dir: sozai ディレクトリの場所を指定します。
  • caption_extension: キャプション ファイルの拡張子を指定します。
  • num_repeats: 学習回数を指定します。今回は 5 回としました。
[general]
[[datasets]]
[[datasets.subsets]]
image_dir = '/home/jintaro/kiritan-lora/sozai'
caption_extension = '.txt'
num_repeats = 5

シェルスクリプト作成

もうひとつ、以下の内容のシェルスクリプト作成して、kiritan-lora ディレクトリに入れます。
ファイル名はなんでも構いません。今回は loratraining.sh としました。

  • MODEL_NAME: チェックポイント ファイル Counterfeit-V3.0_fp16.safetensors の場所を指定します。
  • DATASET_CONFIG: データセット コンフィグ ファイル datasetconfig.toml の場所を指定します。
  • OUTPUT_DIR: outputs の場所を指定します。
  • OUTPUT_NAME: 出力ファイル名を指定します。
#!/usr/bin/env bash
export MODEL_NAME="/home/jintaro/stable-diffusion-webui/models/Stable-diffusion/Counterfeit-V3.0_fp16.safetensors"
export DATASET_CONFIG="/home/jintaro/kiritan-lora/datasetconfig.toml"
export OUTPUT_DIR="/home/jintaro/kiritan-lora/outputs"
export OUTPUT_NAME="kiritan-lora"

accelerate launch --num_cpu_threads_per_process 1 train_network.py \
 --pretrained_model_name_or_path=$MODEL_NAME \
 --output_dir=$OUTPUT_DIR \
 --output_name=$OUTPUT_NAME \
 --dataset_config=$DATASET_CONFIG \
 --train_batch_size=1 \
 --max_train_epochs=10 \
 --resolution=512,512 \
 --optimizer_type=AdamW8bit \
 --learning_rate=1e-4 \
 --network_dim=128 \
 --network_alpha=64 \
 --enable_bucket \
 --bucket_no_upscale \
 --lr_scheduler=cosine_with_restarts \
 --lr_scheduler_num_cycles=4 \
 --lr_warmup_steps=500 \
 --keep_tokens=1 \
 --shuffle_caption \
 --caption_dropout_rate=0.05 \
 --save_model_as=safetensors \
 --clip_skip=2 \
 --seed=42 \
 --color_aug \
 --xformers \
 --mixed_precision=fp16 \
 --network_module=networks.lora \
 --persistent_data_loader_workers

端末アプリを開いて、 loratraining.sh に実行権限を付けます。

cd kiritan-lora
chmod +x loratraining.sh

LoRA 学習実行

端末アプリを開いて、シェルスクリプト loratraining.sh を実行します。

sd-scripts ディレクトリに移動する。

cd sd-scripts

Anaconda 仮想環境 lora に入る。

conda activate lora

シェルスクリプトを実行する。

kiritan-lora/loratraining.sh

10 分ちょっとで、outputs ディレクトリ下に kiritan-lora.safetensors というファイルができあがりました。

Stable Diffusion で画像生成

できあがった kiritan-lora.safetensors を使って、Stable Diffusion で画像を生成させました。

できあがった画像がこちら。

一応、東北きりたんっぽくなっている気がする……

それでは。