Ubuntu で Stable Diffusion 用の LoRA モデル (追加学習モデル) を作成しました。
素直に Windows でやればいいだけのことなので、わざわざ Ubuntu でやることもないとは思うのですが、CUDA と cuDNN 入れて、Anaconda 入れて、PyTorch 入れて……と、結構めんどうだったので、やったことを記事にして残しておくことにします。
先日こんなツイートをしました。
UbuntuにLoRA作成用のツール類をインストールして、初めてLoRAを作成してみました。
— 御崎仁太郎 (@misakijintaro) 2023年5月31日
学習データには、東北ずん子公式サイトhttps://t.co/ioKprNx4QXで提供されている「AI画像モデル用学習データ」から「東北きりたん」のものを使用しました。
画像を生成したところ、こんな絵になりました。 pic.twitter.com/z8bckiCslX
参考にしたのは、テルルとロビンチャンネルのこの動画。
www.youtube.com
この動画、「日本一わかりやすい」と言うだけあって本当に分かりやすかったです。この動画の他にも色々調べ回ったんですが、結局これが一番よかったです。
でも手順が Windows 向けなんです。私の PC は OS が Ubuntu だし、Python は Anaconda を使ってるし。
この動画では sd-scripts というツールを使って LoRA 学習する方法を説明されているのですが、GitHub で sd-scripts の README を見ても、やっぱり Windows 向けのインストール手順しか書いてないんですよね。
でも、手順を見てたら Ubuntu でも動かせそうだったので、試してみることにしました。
使うもの
ハードウェア
NVIDEA 製 GPU のビデオカード (グラフィックボードとかグラフィックカードなんて呼び方もする) を搭載した PC が必要です。
ちなみに私の PC は自作したもので、構成は以下のとおりです。
- CPU: AMD Ryzen 5 7600X
- ビデオカード: MSI GeForce RTX 3060 VENTUS 2X 12G OC
- メモリ: 64 GB
(AI 画像作成用としては、もはや最低スペックとなっている気がする……)
ソフトウェア
ソフトウェアとしては以下のものを使います。
- Ubuntu 22.04: OSです。
- CUDA Toolkit: CUDA アーキテクチャ アプリケーション作成用の開発ツールです。NDIVIA 製の GPU を搭載したビデオカードを使ってプログラムするときに使うツール類ってことですね。
- cuDNN: Deep Learning 用の CUDA ライブラリです。NDIVIA 製の GPU を搭載したビデオカードを使って AI の開発をするときに使うライブラリってことですね。
- Anaconda: Python のディストリビューションです。Python には、本家 Python Software Foundation 版と科学計算に強い Anaconda 版があるのですが、私は Anaconda の方を使っています。
- PyTorch: Python の機械学習ライブラリです。
- git: バージョン管理システムです。ここでは、sd-scripts をダウンロードするために使用します。
- sd-scripts: LoRA モデル学習ツールです。
Stable Diffusion チェックポイント ファイル (モデルファイル)
LoRA のベースにするモデル ファイルです。今回は Counterfeit-V3.0 を使用しました。
huggingface.co
学習元の画像ファイル
東北ずん子・ずんだもんプロジェクトサイトでAI画像モデル用学習データが提供されているので、今回はこれを使用します。
zunko.jp
インストール
Ubuntu 22.04 インストール
Ubuntu 22.04 のインストール手順は、kledgeb チャンネルのこちらの動画をどうぞ。
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
をクリックして、
Linux
、x86_64
、Ubuntu
、22.04
、deb (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)
、Linux
、pip
、Python
、CUDA 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
MPSDo 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 で画像を生成させました。
できあがった画像がこちら。
一応、東北きりたんっぽくなっている気がする……
それでは。