見出し画像

Windows PCでLsmith(TensorRTで高速化された画像生成のWeb UI)を利用する手順(賞味期限切れ)

【重要】Lsmithは公開を停止し、さらに機能を増やしたRadiataに置き換えられました。本記事の手順では、セットアップや実行を行うことはできないと思います。


重要事項

※起動時に「dist」ディレクトリが消えて停止する場合は、Lsmithのディレクトリで「git pull」を実行して更新するか、「4-1.」を参考に対応してください。
※Stable Diffusion形式のモデル(ckpt, safetensors)を変換して、Lsmithで利用する方法を追記しました(6. 付録)。
※CUDA 11.6及び11.8での動作を確認しました。うまく動作しない場合は、GeForceのドライバーを更新してみてください(盲点)。
※おそらくGeforce RTX 20 series以降で動作し、ビルド中のonnxへの変換時に12GB、画像の生成時に8GB(これより少なくても動作する可能性あり)のVRAMが必要とみられます。
※PowerShellではなく、コマンド プロンプトを使用してください。少なくとも、pnpmのインストール時に詰まる可能性があります。

1. 概要

 だだっこぱんだ氏が、「TensorRT」を利用した高速な画像生成のWeb UIである「Lsmith」を公開し、さらにはWindowsにも対応してくださいました。本記事ではLsmith導入の手順について説明します(Docker版ではありません)。どなたでも試せるようにある程度のフォローはしていますが、今回は内容的に中級者以上とします。

2. 環境の準備

2-1. ディレクトリ構成

 本記事での作業ディレクトリは「\aiwork」ですが、特に従う必要はありません。お好きな場所に構築を行ってください。

C:\aiwork\Lsmith\                     Lsmith本体
C:\aiwork\Lsmith\models\              モデルのダウンロード、ビルドの場所
C:\aiwork\Lsmith\outputs\             生成画像の保存場所
C:\aiwork\Lsmith\launch-user.bat      Lsmithの起動バッチ

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.6\           CUDA, cuDNN
C:\Program Files\NVIDIA GPU Computing Toolkit\TensorRT-8.5.3.1      TensorRT

2-2. Python 3.10、Git、GeForceのドライバー、CUDA 11.6のインストール

 筆者の環境では、「GeForce RTX 3060(12GB)」「GeForce Game Ready ドライバー 528.49(執筆時の最新バージョン)」「CUDA Toolkit(以下、CUDA) 11.6及び11.8」にて動作を確認しています。記事ではCUDA 11.6に合わせた記述となっていますので、適宜読み替えてください。

 右も左も分からない方は、下記の記事の「2. ツールの準備」にて手順を確認しながら、「Python」、「Git」、「CUDA」のインストールを行ってください。また、「GeForceのドライバー」もなるべく更新しておいてください。なお、これ以降の手順はさらに難しく(というよりも面倒に)なりますので、予めご承知おきください。

2-3. NVIDIA Developerのアカウントを取得

 Lsmithの動作に必要な「cuDNN」と「TensorRT」をダウンロードするためには、NVIDIA Developerのアカウントが必要です。アカウントを持っていない場合は下記のURLにアクセスして、右上の「Join」からサインアップを行ってください。

https://developer.nvidia.com/

2-4. cuDNN 8.6.0のインストール

 下記のURLにアクセスして、「cuDNN Download」「Archived cuDNN Releases」の順に進んで、「Download cuDNN v8.6.0 (October 3rd, 2022), for CUDA 11.x」にある「Local Installer for Windows (Zip)」をダウンロードしてください。

https://developer.nvidia.com/cudnn

 ダウンロードが終わったらファイルを解凍して、CUDAのインストールディレクトリに全てコピーしてください。ディレクトリ名が被っているので、どのようにすれば良いのかが分かりやすいと思います。

bin, include, libディレクトリとLICENSEがコピーされた

2-5. TensorRT 8.5.3.1のインストール

 下記のURLにアクセスして、「Download now」「TensorRT 8」の順に進んで、「I Agree …」にチェックを入れます。次に「TensorRT 8.5 GA Update 2」にある「TensorRT 8.5 … for Windows 10 and CUDA 11.0, 11.1, 11.2, 11.3, 11.4, 11.5, 11.6, 11.7 and 11.8 ZIP Package」をダウンロードしてください。

https://developer.nvidia.com/tensorrt

 ダウンロードしたファイルを解凍すると中に「TensorRT-8.5.3.1」のディレクトリがありますので、「C:\Program Files\NVIDIA GPU Computing Toolkit」にコピーしてください。

TensorRTを指定のディレクトリにコピーした

2-6. TensorRTのDLLはコピーしないこと

 TensorRTの利用方法を検索すると、TensorRTの「lib」ディレクトリにあるDLLファイルを、CUDAの「bin」ディレクトリにコピーするという手順を見かけました。Lsmithは特定のDLLを探してパスを調べているようなので、DLLをコピーした状態ではパスを見誤ってしまい、「Couldn't find the python folder in TensorRT's directory.」のエラーを出して停止する恐れがあります。

2-7. 環境変数の編集

 cuDNNやTensorRTはコピーしただけでは利用できないため、環境変数の設定を行います。最初に、Windowsのスタートボタンを右クリックして「システム」を開いてください。次に、Windows 10の場合は「関連設定」に、Windows 11の場合は「関連リンク」にある「システムの詳細設定」を開くと、「システムのプロパティ」が表示されます。下の方にある「環境変数」のボタンをクリックしてください。

 まず、システム環境変数に「CUDA_PATH」と「CUDA_PATH_V11_6」が登録されていることを確認してください。次に、その下の「新規」をクリックして、変数名「CUDNN_PATH」と変数値「%CUDA_PATH%」を入力して「OK」をクリックしてください。

cuDNNのパスを設定する(お手軽な方法)

 下記の状態になっていれば大丈夫です。

CUDAとcuDNNのパスが設定された状態

 次に、TensorRTにパスを通します。ユーザー環境変数の「Path」の行を選択してから「編集」をクリックしてください。

ユーザー環境変数の「Path」を「編集」する

 編集画面が表示されたら「新規」をクリックするか、空欄をダブルクリックすると入力できるようになります。TensorRTのlibディレクトリのパスを入力して、「OK」をクリックしてください。また、CUDA 11.6のbinディレクトリのパスが含まれていることも、あわせて確認してください。

TensorRTのlibディレクトリを設定する

 これで、環境変数の設定はすべて完了しました。残ったウインドウも順番に「OK」をクリックして閉じてください。

2-8. node.jsのインストール

 Lsmithが必要とする「node.js」の推奨バージョンは18です。下記のURLにアクセスして、左上の「Windows Installer」からダウンロードしてください(執筆時の最新バージョンは18.14.0)。ダウンロードしたファイルを実行して進めるだけでインストールできます。途中で表示される画面では、特にチェックを入れる必要はありません。

https://nodejs.org/ja/download/

2-9. pnpmのインストール

 node.jsをインストールした後で、コマンド プロンプトを開いてから下記のコマンドを実行して、「pnpm」をインストールしてください。バージョンも調べておきました(執筆時は7.26.3、現在は上がっています)。

npm install -g pnpm
pnpm -v

2-10. PCの再起動

 (しなくても動いたとの報告はありますが)念のため、このあたりでPCを再起動しておいた方が良いかもしれません。再起動が難しい状態の場合は、そのまま試してみてください。

3. Lsmithの準備

 コマンド プロンプトを開いて、Lsmithをインストールしたいディレクトリに移動してください。次に、Lsmithのディレクトリが存在しない状態で「git clone」コマンドにてダウンロードしてから、「submodule」の更新を行ってください。詳細な手順は下記を参考にしてください。

cd \aiwork
git clone https://github.com/ddPn08/Lsmith.git
cd Lsmith
git submodule update --init --recursive

 さらに、下記のコマンドを順番に実行して「dist」ディレクトリを生成してください。なお、現在のバージョンは起動時に同様の処理が行われているようです。「--skip-build-frontend」のオプションを付けずに利用する場合は、この手順は必要ないと思います(下記「4-1.」も参照)。

cd frontend
pnpm i
pnpm build --out-dir ../dist

4. Lsmithの実行

4-1. バッチファイルの修正(現行版では不要)

 2月9日の夜に「launch.py」「build.py」が更新された際、「dist」ディレクトリが削除されて起動できない現象が発生していました。現行版では修正されていますので、Lsmithのディレクトリで「git pull」を実行してください。

 なお、distディレクトリが削除された場合は、「frontend」のディレクトリで「pnpm build --out-dir ../dist」を実行すると回復します。

 現行版は毎回distディレクトリを再構築する仕様です。これを回避するには「launch-user.bat」をテキストエディタで開いて、オプション設定の行を「set COMMANDLINE_ARGS=--skip-build-frontend」に変更してください。この場合は、frontendディレクトリが更新されてもdistディレクトリが更新されないため、適宜対応してください。素直にskip無しで使うか、別途skip無しのバッチファイルを用意するのが良いでしょう。

4-2. Lsmithの起動

 コマンド プロンプトを開いて、下記の例のようにLsmithのディレクトリに移動してから「launch-user.bat」を実行してください。

cd \aiwork\Lsmith
launch-user

 初回はパッケージのインストール等を行うため、それなりの時間を要します。2回目以降の起動は早いのでご安心ください。下記のような表示が出たら、指示されたURLにWebブラウザでアクセスしてください。

INFO:     Uvicorn running on http://127.0.0.1:3000 (Press CTRL+C to quit)

4-3. モデルのビルド(初回時、モデル追加時のみ)

 画面が表示されたら「Engine」をクリックしてください。最初はビルド済みのモデルが無いので、何もできません。

最初は「Engine」に移動する

 モデルはDiffusers形式に対応しています。PCに保存されたモデル(ckptやsafetensorsからの変換方法は「6. 付録」を参照)や、Hugging Faceに掲載されたDiffusers形式のモデル(どのモデルが利用可能かは未確認)が指定できます。Hugging Faceにあるモデルの一部は、ダウンロードの際に「Access Token」が必要(アカウントも必要)かもしれません。詳細は割愛します。

 ここでは動作確認のため、「Stable Diffusion v1-4」を使用します。「Model ID」の欄に「CompVis/stable-diffusion-v1-4」を入力して「Build」をクリックしてください。「Access Token」は必要ありません。

モデルIDを入力してBuildを行う

 この画面にある「Max Batch size」は、画像生成時における「Batch Size」の上限を決定する数値のようです。VRAMが12 GBの場合は「2」が設定できましたが、Batch Size=2 では2枚目が正常に生成できませんでした。12GBを超える環境の場合は上げてみてください(同時に生成するとさらに高速です)。ただし、上げすぎるとビルド時にエラーが出て正常に動作しなくなったので、Lsmithを起動し直してください。

 話を戻します。Buildをクリックすると処理中の表示に変わり、モデルのダウンロードとビルドが続けて行われます。

この表示が出ている間は処理中

 ビルド処理は、GeForce RTX 3060では16分ほどかかりました。コマンド プロンプト上に赤字のエラーが出ても、表示が処理中であれば動作しています。止めたりせずにそのままお待ちください。

エラーが出ていても処理中なので止めないこと

 処理が完了するか異常終了すると、処理中の表示から変化します。

ビルドが完了した時の表示

4-4. 画像の生成

 画面を「Generator」に戻してから右上のリロード(?)ボタンを押すと、ビルド済みのモデルが選択されます。複数ある場合は選択できます。

ビルドしたモデルを選択

 プロンプトを入れて「Generate」ボタンを押せば生成が始まりますので、心ゆくまで楽しんでください。

 「Batch Count」を上げると連続で画像が生成されるはずなのですが、正常な画像が生成できない場合があるようです。「Batch size」は、1回で同時に生成する画像の枚数です(生成枚数はBatch sizeとBatch Countの積)。詳細は、ビルドの解説にある「Max Batch size」の説明をご覧ください。

画像を生成(512x640, Euler A, Steps=20で1枚あたり2秒未満)

 生成した画像は、「Lsmith\outputs」の中に保存されます。

生成された画像を確認

 また、画像ファイルをLsmithの画面にドラッグ&ドロップすると「img2img」の動作になります。

img2imgで生成したところ

5. 補足

 Lsmithの関連情報は、Lsmithのissuesや、redditの投稿あたりが参考になるかもしれません。

 Lsmithを停止したい場合は、コマンド プロンプト上でCtrlを押したままCを押してください。おもむろにコマンドプロンプトを閉じても大丈夫だと思います。

 Lsmithをアンインストールしたい場合は、停止した状態でLsmithディレクトリを削除してください。モデルと仮想環境も削除されて、数GB以上の空き容量が増えます。

6. 付録

PC上にあるStable Diffusion形式のモデル(ckpt, safetensors)をDiffusers形式に変換してLsmithで使用する手順

※Lsmithにて、Stable Diffusionモデルが直接指定できるようになる予定とのことです。また、本項で使用するリポジトリの本来の用途(DreamBooth等)が必要無ければ、変換のためだけに5GB以上のディスクを消費します。これらを理解の上で実施してください。

 Lsmithの「Model ID」欄には、PC上に保存されたDiffusersモデルのパスも指定できることが判明しました。Stable Diffusion形式のモデルを変換して、Lsmithで使用する手順について説明します。

 ここではKohya氏のリポジトリを使用しますので、他にできることや詳細な利用方法については下記のURLにて確認してください。
https://github.com/kohya-ss/sd-scripts/blob/main/README-ja.md

 コマンド プロンプトを開いてリポジトリをインストールしたいディレクトリに移動し、sd-scriptsのディレクトリが存在しない状態で下記のコマンドを実行してください。

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

 下記のコマンドで仮想環境を作成して中へ移動してください。

cd sd-scripts
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

 パスをよく確認した上で、変換スクリプトを実行してください。見やすいように行を分けていますので、1行にまとめてください。出力先ディレクトリの末尾には必ず「\(半角の¥)」を入れてください。指定したディレクトリが無ければ生成されます。

python tools\convert_diffusers20_original_sd.py モデルのパス 出力先ディレクトリ
 --reference_model CompVis/stable-diffusion-v1-4 --v1

 下記は実行例です。anything-v3ディレクトリが生成されて、その中に出力されました。

python C:\aiwork\sd-scripts\tools\convert_diffusers20_original_sd.py
 C:\aiwork\stable-diffusion-webui\models\Stable-diffusion\anything-v3-fp16-pruned.safetensors
 C:\aiwork\temp\anything-v3\
 --reference_model CompVis/stable-diffusion-v1-4 --v1
指定のディレクトリにDiffuser形式のモデルが出力された

 変換の必要がなくなったら、仮想環境から抜けてください。

deactivate

 最後に、LsmithのModel ID欄にパスを入力して、ビルドを行ってください。不要になったDiffusers形式のモデルは、適宜削除してください。

Model IDの代わりにパスを入力する

 このリポジトリ自体が必要無くなった場合は、sd-scriptsディレクトリを削除してください。5GB以上の空き容量が増えます。

6. twitterの連絡先

 noteのアカウントはメインの@Mayu_Hiraizumiに紐付けていますが、記事に関することはサブアカウントの@riddi0908までお願いします。


この記事が気に入ったらサポートをしてみませんか?