LoRAを作成するツール『sd-scripts』の使い方!LoRA作成方法やエラー対処法を紹介! | romptn Magazine

LoRAを作成するツール『sd-scripts』の使い方!LoRA作成方法やエラー対処法を紹介!

LoRA

「sd-scriptsってなに?」 「どうやって使うの?」 

そんな疑問を持つ方々に朗報です! 

この記事では、「sd-scripts」の基本的な使い方から、LoRAの学習方法、さらには遭遇する可能性のあるエラーへの対処法まで、詳しくご紹介します。

このツールがAIと機械学習の世界でどのような役割を果たしているのか、一緒に探ってみましょう!

スポンサーリンク

「sd-scripts」とは?

「sd-scripts」とは、kohya-ss氏及びそのcontributorsが作成したLoRA学習データの作成・編集ツールです。

ほかにも便利な機能がたくさん!

「sd-scripts」は、LoRAの学習用ツール以外にも以下の便利な機能があります。

コード名概要
train_network.py学習ツール。LoRAのDreamBooth方式。
gen_img_diffusers.py画像生成ツール。
fine_tune.py学習ツール。ファインチューン方式 。
train_textual_inversion.py学習ツール。Textual inversion。
merge_lora.py編集ツール。Loraマージ用。

現在は、SDXLに対応が完了しています。

Stable Diffusionの画像生成を最速で学びたいあなたへ!
  • Stable Diffusionの基礎を2時間でマスター!
  • 高スペックPCがない方向けに徹底解説。
  • ControlNetなど、必須級の拡張機能も網羅。
  • 今話題のSDXL、AI動画生成も。
  • 特典として、大人気「おすすめ拡張機能・モデル解説」「プロンプト大全」つき!
\このボタン限定!70%オフキャンペーン実施中!/
70%オフキャンペーン実施中!/

「sd-scripts」でLoRAを学習する方法

ここからはWindowsで使用する方法をご紹介します。

環境の準備

1. Powershellの起動方法

  • Windowsキー + Xを同時に押します。
  • メニューから「Powershell」(または「i」を押す)を選択します。

2. Scoopと必要なツールのインストール

  • Scoop(Windows用のコマンドラインインストーラー)をインストールします。
  • PythonとGitもこの方法でインストールします。

まず、以下のコマンドをPowershellに入力して、スクリプトの実行ポリシーを設定します。

Set-ExecutionPolicy RemoteSigned -scope CurrentUser

次に、Scoopのインストールスクリプトを実行します。

invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh')

Scoopを使って、PythonとGitをインストールします。

scoop bucket add versions
scoop install versions/python310
scoop install git

3. スクリプトの準備

  • 必要なスクリプトをダウンロードし、Pythonの仮想環境を構築します。
  • 必要なPythonライブラリをインストールし、加速の設定を行います。

以下のコマンドでリポジトリをクローンし、ディレクトリに移動します。

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

Pythonの仮想環境を作成し、アクティベートします。

python -m venv venv
.\venv\Scripts\activate

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

pip install torch==1.12.1+cu116 torchvision==0.13.1+cu116 --extra-index-url https://download.pytorch.org/whl/cu116
pip install --upgrade -r requirements.txt
pip install -U -I --no-deps https://github.com/C43H66N12O12S2/stable-diffusion-webui/releases/download/f/xformers-0.0.14.dev0-cp310-cp310-win_amd64.whl

最後に、必要なファイルをコピーします。

cp .\bitsandbytes_windows\*.dll .\venv\Lib\site-packages\bitsandbytes\
cp .\bitsandbytes_windows\cextension.py .\venv\Lib\site-packages\bitsandbytes\cextension.py
cp .\bitsandbytes_windows\main.py .\venv\Lib\site-packages\bitsandbytes\cuda_setup\main.py

4. 設定ファイルの作成

以下の設定を含むconfig.yamlファイルを作成します。

command_file: null
commands: null
compute_environment: LOCAL_MACHINE
...

学習データの準備

1. データセット用ディレクトリの作成

まず、データセットを格納するためのディレクトリを作成します。以下のコマンドを使用して、新しいディレクトリを作成します。

New-Item -ItemType Directory -Path "./dataset"

2. 設定ファイルの作成

次に、データセットの設定を定義するためのTOMLファイルを作成します。以下の内容をdataset.tomlファイルに記述します。

[general]
enable_bucket = true

[[datasets]]
resolution = 512
batch_size = 4

  [[datasets.subsets]]
  image_dir = 'dataset'
  class_tokens = 'shs girl'
  num_repeats = 100

このファイルは、データセットの解像度やバッチサイズ、画像ディレクトリのパスなどを設定します。

3. 画像の準備(手動)

以下のコマンドを実行して、datasetディレクトリをエクスプローラで開きます。

explorer.exe .\dataset

手動で./datasetディレクトリに画像ファイル(例:0001.png)を追加してください。

最終的なディレクトリ構造は以下のようになります。

./
├── dataset.toml
├── dataset
    ├── 0001.png
    ├── 0002.png
    ...(その他の画像ファイル)

この手順により、必要なデータセットの準備が完了します。これで、必要なデータセットが使用可能になります。

LoRAの学習

1. Ckptファイルのダウンロード

Stable Diffusionモデルのトレーニングを開始する前に、必要なCkptファイルをダウンロードします。

以下はダウンロードの一例です。

ダウンロード元URL: https://huggingface.co/JosephusCheung/ACertainThing/tree/main

ダウンロードコマンド:

$URI="https://huggingface.co/JosephusCheung/ACertainThing/resolve/main/ACertainThing.ckpt"
Invoke-WebRequest -Uri $URI -OutFile ".\model.ckpt"

2. 学習の実行

学習を開始する前に、Pythonの仮想環境をアクティベートし、出力用のディレクトリを作成します。

.\venv\Scripts\activate
New-Item -ItemType Directory -Path ".\outputs" -Force

次に、以下のコマンドを使用して学習を開始します。

accelerate launch --config_file=".\config.yaml" train_network.py `
    --pretrained_model_name_or_path=".\model.ckpt"  `
    --dataset_config=".\dataset.toml"  `
    --output_dir=".\outputs"    `
    --output_name=rolaoutput  `
    --save_model_as=safetensors  `
    --prior_loss_weight=1.0  `
    --max_train_steps=400  `
    --learning_rate=1e-4  `
    --optimizer_type="AdamW8bit"  `
    --xformers  `
    --mixed_precision="fp16"  `
    --cache_latents  `
    --gradient_checkpointing `
    --save_every_n_epochs=10  `
    --network_module=networks.lora

3. モデルのマージ

トレーニングが完了したら、以下のコマンドを使用してモデルをマージします。

.\venv\Scripts\activate
python .\networks\merge_lora.py --sd_model .\model.ckpt --models.\outputs\rolaoutput.safetensors --save_to .\model-merged.ckpt --ratios 0.5

このプロセスにより、カスタマイズされたStable Diffusionモデルのトレーニングとマージが完了します。これで、独自のデータセットに基づいたモデルを使用することが可能になります。

画像を生成してみる

1. 画像生成スクリプトのダウンロード

画像生成を行うために必要なスクリプトをダウンロードします。以下の手順に従ってファイルを取得し、展開します。

ダウンロードコマンド:

$downloadFilePath = ".\gen_img_diffusers.zip"
$url = "https://note.com/api/v2/attachments/download/220cb6eb7f1d93f675794dd0f946775a"
Invoke-WebRequest -Uri $url -OutFile $downloadFilePath

展開コマンド:

$extractPath = ".\gen_img_diffusers"
Expand-Archive -Path $downloadFilePath -DestinationPath $extractPath

2. 生成画像用ディレクトリの作成

生成された画像を保存するためのディレクトリを作成します。

New-Item -ItemType Directory -Path ".\generatedimg"

3. スクリプトの実行による画像生成

Pythonの仮想環境をアクティベートした後、ダウンロードしたスクリプトを実行して画像を生成します。

仮想環境のアクティベーション:

.\venv\Scripts\activate

画像生成スクリプトの実行:

python .\gen_img_diffusers\gen_img_diffusers.py `
--ckpt .\model-merged.ckpt  `
--outdir .\generatedimg `
--xformers  `
--fp16  `
--images_per_prompt 8  `
--prompt "shs girl" 

このプロセスを通じて、指定されたプロンプト(この例では “shs girl”)に基づいて複数の画像が生成され、.\generatedimgディレクトリに保存されます。

プロンプトジェネレーターで画像生成プロンプトの参考に!
  • Stable Diffusionのプロンプトの見本が知りたい
  • 画像生成が思ったようにできない
  • 色々なプロンプトを探したい
など、画像生成AIのプロンプトに関する疑問が解決するかもしれません。

「sd-scripts」のエラー対処法

「sd-scripts」をアップデートしたらエラーが出た

「sd-scripts」をアップデートする際にエラーが発生した場合、WebUIとは異なる特別な手順が必要です。

以下は、sd-scriptsを正しくアップデートするためのステップです。

1. sd-scriptsディレクトリの開き方

エクスプローラーを開き、sd-scriptsが保存されているディレクトリに移動します。

2. コマンドプロンプトの起動

アドレスバーに「cmd」と入力し、Enterキーを押します。その場所でコマンドプロンプトが開きます。

3. 最新の変更を取得

コマンドプロンプトで「git pull」と入力し、Enterキーを押します。最新の変更がダウンロードされます。

4. Pythonの仮想環境のアクティベーション

「.\venv\Scripts\activate」と入力し、Enterキーを押します。Pythonの仮想環境がアクティベートされます。

5. 必要な依存関係のインストール

「pip install –use-pep517 –upgrade -r requirements.txt」と入力し、Enterキーを押します。必要な依存関係がアップデートされます。

参考リンク: sd-scriptsのアップグレード方法

この手順は、sd-scriptsを直接使用している場合、またはLoRA_Easy_Training_Scripts以外の補助スクリプトを使用している場合に適用されます。WebUIを使用している場合は、この手順は必要ありません。

“subprocess.CalledProcessError”というエラーが出た

Stable Diffusionモデルを使用して学習を行う際に「subprocess.CalledProcessError」というエラーが発生することがあります。

このエラーは、モデルのバージョンとコマンドラインオプションの不一致が原因で起こります

1. Stable Diffusion v1.x系のモデルを使用する場合

もしStable Diffusion v1.x系のモデルを使用していて、学習コマンドに「–v2」オプションが含まれている場合、このエラーが発生する可能性があります。この場合、「–v2」オプションをコマンドラインから削除してください。

2. Stable Diffusion v2.x系のモデルを使用する場合

逆に、Stable Diffusion v2.x系のモデルで学習を行う場合は、コマンドラインに「–v2」オプションを追加する必要があります。このオプションがないと、同様のエラーが発生する可能性があります。

重要なポイント

  • 学習を行う前に、使用しているモデルのバージョンを確認し、適切なコマンドラインオプションを選択することが重要です。
  • エラーメッセージをよく読み、どのバージョンのモデルが必要かを理解することで、適切な修正を行うことができます。

“AttributeError”というエラーが出た

1. ‘Namespace’ object has no attribute ‘noise_offset’

対処法:

  1. 既に開いているコマンドプロンプトやターミナルを閉じます。
  2. こちらのページを開き、「名前をつけて保存」を選択して、train_util.pyを更新します。
  3. 保存先は、kohya_ssがあるフォルダ内のlibraryフォルダです。
  4. 既存のファイルを上書きして保存します。
  5. その後、学習を再実行します。

2. module ‘torch.nn.functional’ has no attribute ‘scaled_dot_product_attention’

特定の環境下で、LyCORISを使用して学習を開始すると、学習初期にこのエラーが発生します。原因は、Pytorch 1.12.1のコードとLyCORIS(およびXtransformer等)の定義の不一致です。

対処法:

sd-scripts\venv\Lib\site-packages\torch\nn\functional.pyを開き、_scaled_dot_product_attentionをscaled_dot_product_attentionに書き換えます。

その後の対応:

この問題はLyCORISの最新版で解決されています。LyCORISのVer.1.9.0以降では発生しません。

重要なポイント

  • これらのエラーは、特定のバージョンのライブラリやモジュール間の互換性の問題によって発生することが多いです。
  • エラーが発生した場合は、まず使用しているライブラリのバージョンを確認し、公式のドキュメントやGitHubのissueを参照してください。
  • トラブルシューティングの際は、他のライブラリとの競合も考慮する必要があります。

“TypeError”というエラーが出た

Stable Diffusionモデルのトレーニング中に「TypeError」というエラーが発生する場合、LoRA_Easy_Training_Scriptsが古いバージョンである可能性があります。

この問題を解決するためには、最新版のスクリプトをダウンロードして配置し直す必要があります。

1. 最新版のダウンロード

LoRA_Easy_Training_Scriptsの最新版を公式のGitHubリポジトリまたは配布サイトからダウンロードします。

2. 古いスクリプトの削除

既存のLoRA_Easy_Training_Scriptsのフォルダまたはファイルを削除します。

3. 新しいスクリプトの配置

ダウンロードした最新版のスクリプトを、適切なディレクトリに配置します。

4. 学習の再実行

スクリプトの更新後、学習プロセスを再開します。

重要なポイント

  • スクリプトを更新する際は、常に公式のソースからダウンロードすることをお勧めします。
  • 更新後は、依存関係や設定ファイルが変更されていないか確認し、必要に応じて修正してください。
  • トレーニング環境の他のコンポーネントも最新の状態に保つことが重要です。

“no kernel image is available for execution on the device”とエラーが出て止まる

Stable Diffusionモデルのトレーニング中に「no kernel image is available for execution on the device」というエラーが発生することがあります。

このエラーは、特にNVIDIAのGTX 10X0番台のような古いGPUを使用している場合に起こりやすいです。

1. エラーの原因

このエラーは、古いGPUが新しいトレーニングスクリプトの一部の機能に対応していないために発生します。特に、8ビット精度でのAdamオプティマイザ(–use_8bit_adamオプション)が原因であることが多いです。

2. 解決策

sd-scriptsの実行オプションから–use_8bit_adamを外して実行します。これにより、より互換性の高い設定でトレーニングが行われ、エラーが解消される可能性があります。

実行方法の変更

以下のように、トレーニングコマンドから–use_8bit_adamオプションを削除して実行します。

# 例: 元のコマンド
python train.py --use_8bit_adam ...

# 修正後のコマンド
python train.py ...

重要なポイント

  • 古いGPUを使用している場合、最新のトレーニングスクリプトやライブラリが完全にサポートされていない可能性があります。
  • エラーが解消されない場合は、GPUのドライバーを最新のものに更新するか、トレーニング環境を見直すことを検討してください。

まとめ

いかがでしたでしょうか?

LoRAを作成するツール「sd-scripts」の使い方について解説してきました。

今回のポイントをまとめると、以下のようになります。

  • 「sd-scripts」は、LoRA学習データの作成・編集ツール
  • 学習プロセスは、環境の準備、設定ファイルの作成、画像の準備、学習の実行、モデルのマージというステップで構成されている
  • エラーの多くは、モデルのバージョンとコマンドラインオプションの不一致、ライブラリやモジュール間の互換性の問題、古いGPUの使用などによって引き起こされることが多い

「sd-scripts」の使い方からLoRAの学習方法、エラー対処法まで、この記事で多くの情報をご紹介しました。

ぜひ、今回の記事で学んだ知識を活用して、あなたの活動の一助になれば幸いです!。

また、このトピックに限らず、AIや機械学習に関連する他の興味深い記事も多数ご用意しています。

最新の技術動向やヒントが満載の記事を読んで、さらに知識を深めてみませんか?次の発見があなたを待っています!

プロンプトジェネレーターで画像生成プロンプトの参考に!
  • Stable Diffusionのプロンプトの見本が知りたい
  • 画像生成が思ったようにできない
  • 色々なプロンプトを探したい
など、画像生成AIのプロンプトに関する疑問が解決するかもしれません。