Stable Diffusion
PR

【Stable Diffusion】 RTX50シリーズでLoRA学習を実行する方法 【CUDA 12.8対応】【Linux/Windows】

えりる
記事内に商品プロモーションを含む場合があります

この記事ではNvidia最新GPUのRTX50シリーズ(blackwell世代)に対応したCUDA12.8 を使用してLoRA学習を実行できたのでその方法を紹介します。

NVIDIAの最新GPU(Blackwell 世代)である RTX5070, RTX5070Ti, RTX5080, RTX5090 では単ににStable DiffusionやLoRA学習ツールをインストールしただけでは動かないようになりました。

Blackwell 世代のGeForce RTXシリーズが CUDA 12.8 以降でないと対応していません。

しかし、Stable Diffusionに必要なPythonパッケージがCUDA 12.8に未対応のものがあるので、RTX50シリーズで Stable Diffusion が動作しません。

RTX50シリーズでStable Diffusionを起動する方法は以下の記事で解説しています。

あわせて読みたい
【Stable Diffusion】 RTX50シリーズでStable Diffusionを起動する方法 【CUDA 12.8対応】
【Stable Diffusion】 RTX50シリーズでStable Diffusionを起動する方法 【CUDA 12.8対応】

この記事ではその問題を何とかしてLoRA学習を実行できる環境を構築する方法を紹介します。

最後におまけとしてxformersを使う方法も紹介します。
自分でビルドするのでxformers導入は自己責任でお願いします

環境

この記事ではLinux 上でStable Diffusionを動かすことを前提としています。
これはLinux のほうがStable Diffusionに必要なライブラリの開発が早いらしいです。
詳しくは知りません(笑)

WindowsにはWSL2という機能があり、それを使うことでWindows 11 上でLinuxを動作させることが可能です。

なのでLinux マシンがないという方もWindows 11搭載PCがあれば大丈夫です。

この記事を書くにあたり動作検証した環境は以下の通りです。

  • OS  = Ubuntu 24.04.2 LTS
    • クリーンインストール直後の環境を想定
    • WSL(Windows PC上で簡単にLinuxを動かすことができる機能)上で動作
  • CPU = Intel Core Ultra 285k
  • GPU = NVIDIA RTX 5070

CUDA 12.8のインストール

NVIDIAの公式サイトからインストールします。

公式サイトのCUDAインストール用ページにアクセスすると、自分の環境を選択するところがでてきます。 今回は以下のように選択しました。

するとページ下のほうでインストールの方法を教えてくれるのでそれを参考にインストールを進めていきます。

まずは念のためホームディレクトリに戻っておきましょう。

cd ~

wgetを使ってパッケージをダウンロードします。

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb

公式ダウンロードページの「CUDA Toolkit Installer」と書いてあるところにwgetコマンドがあるので、wget以降のURLはそこに書いているURLを使用してください。

うまくいくとホームディレクトリにcuda-keyring_1.1-1_all.debというファイルがダウンロードされていると思います。

次にダウンロードしたパッケージをdpkgコマンドでインストールします。

sudo dpkg -i cuda-keyring_1.1-1_all.deb

dpkg -i以降はダウンロードされた.debファイルの名前を適宜使用してください。その後、以下でアップデート可能なパッケージリストを更新して、

sudo apt update

CUDA Toolkit 12.8, cuDNN 9.8.0 を以下のコマンドでインストールします。

sudo apt install cuda-toolkit-12-8 cudnn

ついでにドライバも以下のコマンドでインストールしておきます。公式ダウンロードページにこれも載っています。

sudo apt install cuda-drivers

最後にインストールしたCUDA Toolkitのパスを通します。pyenvの時と同様に~/.bashrc の末尾にパス情報を追記します。

まず、以下のコマンドでvimエディタを使って.bashrcを開きます。

vi ~/.bashrc

その後、一番下まで移動して、一番下の行に以下の内容をコピペします。

export PATH="/usr/local/cuda/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"
export CUDA_HOME=/usr/local/cuda-12.8
export CUDNN_INCLUDE_DIR=/usr/local/cuda/include
export CUDNN_LIB_DIR=/usr/local/cuda/lib64

ここまで終えたら最後に.bashrcの変更内容を以下のコマンド適用します。

source ~/.bashrc

これでCUDA Toolkitが使えるようになっているはずなので以下のコマンドで確認します。

nvcc -V

バージョンが返ってきたらインストール成功です。

pyenvのインストール

まず、pyenvのGitHubリポジトリ から必要なファイルをとってきます。

このリポジトリのREADMEにインストール方法が記載されていますが、その方法だけだと動作しません。(罠)しかもREADMEは英語です。

以下のコマンドでリポジトリをクローンします。

git clone https://github.com/pyenv/pyenv.git

このあと起動前の事前準備としてgcc, zlib, OpenSSLをセットアップしていきます。

gcczlibのインストールはそれぞれ以下のコマンドでできます。

sudo apt install build-essential
sudo apt install zlib1g-dev

OpenSSL のインストールは以下のコマンドでできます。

sudo apt install libssl-dev libbz2-dev libreadline-dev libsqlite3-dev curl libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

次に以下のコマンドで先ほど pyenv をクローンしたディレクトリに移動します。

cd pyenv

以下のコマンドでpyenvを高速化します。失敗してもpyenvは問題なく動くみたいです。

src/configure && make -C src

ここでいったん以下のコマンドでホームディレクトリに戻ります。

cd ~

最後にパスの設定をします。ホームディレクトリにある .bashrc というファイルを開いて末尾にpyenvのパス内容を追記します。

まず、以下のコマンドでvimエディタを使って.bashrcを開きます。

vi ~/.bashrc

vimの使い方はこちらの記事で少し解説しているので参考にしてみてください。

開いたら一番下まで移動して、一番下の行に以下の内容をコピペします。

export PYENV_ROOT="$HOME/.pyenv"
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

ここまで終えたら最後に .bashrc の変更内容を以下のコマンド適用します。

source ~/.bashrc

ここまでで pyenv が使えるになっているはずなので以下のコマンドで確認します。

pyenv --version

バージョンを表す数字が返ってきたらインストールは完了です。

Python 3.10.6のインストール

それでは、LoRA学習をするために必要な Python 3.10.6をインストールしましょう。

以下のコマンドでインストールができます。

pyenv install 3.10.6

pyenvでインストールしたpythonを使うときは、pythonを使いたいフォルダ内にcdコマンドで移動してから そのフォルダ内だけでpythonを有効化すればOKです。

cd pythonを使いたいフォルダのパス
pyenv local 3.10.6

LoRA学習ツールのインストール

Stable Diffusionの導入が終わったら、次はLoRA学習環境を構築していきます。

koya-ssさんのsd-scripts というツールをインストールします。

koya-ssさんのGitHubリポジトリでsd-scriptsを公開してくれています。

Gitを使ってダウンロード後、環境構築を行えばインストールすることができます。

方法はkoya-ssさんのGitHubリポジトリで説明されていますが、RTX50シリーズの場合は少し工夫が必要になるのでこの記事で紹介したいと思います。

インストールしたい場所またはホームディレクトリに移動しておきます。この記事ではホームディレクトリにインストールすることにします。

以下のコマンドでホームディレクトリに移動します。

cd ~

その後、以下のコマンドでリポジトリをクローンします。

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

ファイルダウンロードができたらsd-scriptsディレクトリが作成されていると思うので、そのディレクトリに移動します。

cd ./sd-scripts

移動したらこのディレクトリ(カレントディレクトリと呼ぶことにします)でPython 3.10.6を有効化しましょう。以下のコマンドで行います。

pyenv local 3.10.6

その後、以下のコマンドでPythonの仮想環境を作ります。

python -m venv venv

-m オプションはモジュールを起動するという意味です。

これを実行するとカレントディレクトリにvenvというフォルダが作成されて、このフォルダ内にパッケージなどがインストールされます。

ここで仮想環境を有効化しておきます。コマンドは以下の通りです。

source venv/bin/activate

次にsd-scriptsの実行に必要なPythonパッケージをインストールしていきます。

必要なパッケージはカレントディレクトリにあるrequirements.txtというファイルに記載されています。

これを使って一気にパッケージをインストールしてしまいましょう。以下のコマンドで実行できます。

pip install -r requirements.txt

PyTorchの更新

ここまでの作業を終えた状態で

pip list | grep torch

を実行すると、torch 2.6がインストールされていると思います。これとtorchvisionCUDA 12.8に対応したバージョンに変更します。

まず、以下のコマンドで古いバージョンをアンインストールします。
いらない説もありますが、余計なところでトラブりたくないので消しちゃいましょう。
(先ほどのコマンドでtorchが見つからなければインストールされていないのでアンインストール作業は不要です。)

pip uninstall torch torchvision

ここで、PyTorch公式ページからインストールに必要な情報を探します。

ページにアクセスして以下のように環境を選択すると一番下の欄にインストールに必要なコマンドが出てきます。(pip3と書いていますがpipで動きます)

今回はtorchaudioは不要なので、以下のコマンドでtorch とtorchvisonをインストールします。

pip install -U --pre torch torchvision --index-url https://download.pytorch.org/whl/nightly/cu128

これでPyTorchをCUDA12.8に対応したバージョンへあげることができました。

numpy, openCV, bitsandbytesの更新

以下のコマンドでnumpyとOpenCVパッケージを更新しておきましょう。

pip install -U numpy opencv-python

また、以下のコマンドでbitsandbytesを再インストールします。

pip uninstall bitsandbytes
pip install bitsandbytes

動作確認

これでCUDA 12.8sd-scriptsを実行できる環境が整いました。

sd-scriptsの使い方はこちらのTeruru and Robin YasuLab さんというYouTubeチャンネルの動画 で詳しく紹介されています。

使い方はよくわからん!って方はこの動画を参考に実行してみてください。

ここでは、簡単にやり方を説明します。

以下のコマンドで学習を実行することができます。

accelerate launch --num_cpu_threads_per_process 1 train_network.py \
--pretrained_model_name_or_path=AAAA \
--output_dir=BBBB \
--output_name=CCCC \
--dataset_config=DDDD \
--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 \
--mixed_precision=fp16 \
--network_module=networks.lora \
--persistent_data_loader_workers

コマンド中のAAAA~DDDDには以下を入れてください。

  • AAAA: 元となるモデルファイルのパス
  • BBBB: LoRA学習後のモデルファイルの保存先ディレクトリのパス
  • CCCC: LoRA学習後のモデルファイルの名前(拡張子不要)
  • DDDD: データセットコンフィグファイル(.tomlファイル)のパス

これで学習が走れば成功です。

おまけ: xformersをビルドして使う

ここまででxformers以外の環境構築が終わっています。

いったん以下のコマンドで仮想環境を終了しておきましょう。

deactivate

ここからはCUDA12.8Pytorch 2.8環境でxformersを無理やりビルドしていきますので、いったんカレントディレクトリを離れてホームディレクトリに戻りましょう。

cd ~

xformersを無理やりビルドする方法は以下の記事で紹介しています。

あわせて読みたい
【CUDA12.8 対応 xformers】 CUDA12.8でxformersをビルドする方法 【Python】
【CUDA12.8 対応 xformers】 CUDA12.8でxformersをビルドする方法 【Python】

xformersのビルドができたらwhl ファイルが生成されると思いますので、それをコピーしてsd-scriptsディレクトリに移してください。

それができたら以下のコマンドを打ち、sd-scriptsディレクトリに移動します。

cd ~/sd-scripts

そして仮想環境を再度有効化します。

source venv/bin/activate

その後、以下のコマンドでビルドしたファイルを使ってxformersをインストールします。

pip install ビルドして生成されたファイル名.whl

LoRA学習をxformersを使って行う場合は先ほどの学習実行コマンドの末尾に

--xformers

を追加して実行すればOKです。

参考サイト

記事URLをコピーしました