How to install Stable Diffusion WebUI A1111 with TensorRT 

自分自身への備忘録を兼ねて、Windows環境にStable Diffusion WebUI A1111をインストールし、尚且つTensorRTをもインストールする手順書を作成しました。

TensorRTを使用するので、基本的に12GB以上のVRAMを持つnVidia製VGAを搭載しているパソコンへのインストールを前提にした記述です。

また、GeForce用のドライバーは最新のものに更新しておいてください。

Python 3.10.6以降の3.10.xバージョンとgitはインストールしている前提で以下、記述します。

まず、任意のインストール用フォルダを作成し、下図のようにそのフォルダにパスを通した状態でpowershellを起動してください。管理者権限である必要はありません。
![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661150/0cc6ee5c-4998-a8b0-5e1c-6e075d789822.png)

次に下図のように、「git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
」と入力して実行してください。これにより、インストール用のファイルが任意のフォルダにダウンロードされます。
![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661150/29c8c9d5-a4b3-9e6e-185e-abc598a705b5.png)

ダウンロードが完了したら、下図のように「cd stable-diffusion-webui」と入力して実行し。、カレントフォルダをダウンロードしたフォルダ内に移動させます。
![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661150/c25688f4-0b3f-6f8b-aa89-4984e20424e3.png)

ここから先は、最新のPytorch環境やxformers、TensorRT用のPythonライブラリーをインストールする為に、私が工夫した独自の手順になります。

まず、下図のように「python -m venv venv」と入力して実行し、Python用の仮想環境を構築します。
![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661150/d1b14974-f614-5975-0e2c-30159c44a937.png)

次に下図のように、「venv/scripts/activate」と入力して実行し、仮想環境をアクティベートします。
![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661150/11d80965-f60b-3e82-3d17-7e3fc78dd887.png)

次に、Pytorchの公式サイト(https://pytorch.org/get-started/locally/
)から、CUDA用torchをインストールする為のコマンドをコピーします。
![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661150/010db0a7-6cad-8d65-dd2d-6bdb69367257.png)

対応するCUDAのバージョンは随時更新されていきますが、Pytorch公式サイトからコマンドをコピーしてくることにより、その時の最新のバージョンが使用できます。

2024年5月21日現在、Pyorchは2.3.0、対応するCUDAは12.1が最新のものとなります、

次に下図のように、コピーしてきたコマンドを張り付けて実行します。
![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661150/a74499c4-73bb-229a-d8ba-301048cfb8ef.png)

この時、インストールされるライブラリーは、torch、torchvision、torchaudioの3つですが、torchaudioは後でアンインストールしても支障はありません。

また、この時「pipのバージョンを更新してください」というメッセージが表示されるので、下図のように「python.exe -m pip install --upgrade pip」と入力して実行します。
![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661150/354e14a2-f0da-5db7-1b8f-489b43457ead.png)

次に下図のように、「pip install xformers」と入力して実行し、xformersをインストールします。
![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661150/d65a4cde-d7ac-c0db-597d-7b4f307b980e.png)

但し、この時インストール時の最新のxformersが最新のPytorchに対応していない場合、xformersの前にインストールしておいたtorch+cuライブラリーが強制的にアンインストールされ、CUDAに対応していないCPU用のtorchがインストールされてしまう場合があります。
(ちなみに、この問題はComfyUIでも発生し、その時はComfyUI自体が起動しなくなります。)

その場合は、一度「pip uninstall torch」を実行してCPU用のtorchを削除し、前述のCUDA対応Pytorch用のインストールコマンドを再度実行してください。

xformersとPytorchのインストールが完了したら、次にTensorRT用のPythonライブラリーをインストールしていきます。

まず、下図のように「python -m pip install nvidia-cudnn-cu12==9.1.1.17 --no-cache-dir」と入力して実行してください。
![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661150/ea51dd31-cd0f-9eb0-9a96-3b1ba828e0a7.png)


次に下図のように、「python.exe -m pip install --extra-index-url https://pypi.nvidia.com/ tensorrt tensorrt-bindings tensorrt-libs --no-cache-dir」と入力して実行してください。
![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661150/fb80972c-8482-22e1-1f82-69f6cca122b5.png)

TensorRT用のライブラリーは現在10.0.1が最新のバージョンとなります。

次に、onnxruntime関係のライブラリーをインストールしていきます。

以前は、これらのライブラリーは手動でインストールしなくても、SDからTensorRT拡張機能をインストールした時に自動的にインストールされていた筈なのですが、どこかの時点で、インストールされなくなったようです。

ここで手動インストールしておけば確実なので、ここでインストールしておきます。

まず、下図のように「python.exe -m pip install importlib_metadata onnx polygraphy」と入力して実行してください。
![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661150/2dd86fc6-5c23-b72a-5266-5f9bb1bdf601.png)

次に、onnxruntimeの公式サイト(https://onnxruntime.ai/docs/install/
)から、最新のCUDAに対応したライブラリーのインストール用コマンドをコピーします。
![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661150/dfbb5775-82e8-b143-ca0e-0c4ebdf0bd81.png)

2024年5月21日現在、CUDA12.xに対応したライブラリーが最新のものとなります。

次に下図のように、そのコマンドを張り付けて実行します。
![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661150/fc89aaaf-4f7f-b6b2-3597-e3eadca73dd4.png)

※2024年5月26日現在、CUDA対応onnxruntime-gpuの最新バージョン、1.18以降をインストールすると、TensorRTには問題は生じませんが、Controlnetの一部機能に障害が発生します。

Controlnetがその問題に対応するまで、onnxruntime-gpuのインストールに関しては、下記のように、バージョンを1.17.1に固定してインストールしてください。

```
pip install onnxruntime-gpu==1.17.1 --extra-index-url https://aiinfra.pkgs.visualstudio.com/PublicPackages/_packaging/onnxruntime-cuda-12/pypi/simple/
```

これで、事前に用意すべきPythonライブラリーのインストールは完了です。ここで一度powershellは閉じてください。

次に、下図のようにstable-diffusion-webuiフォルダ内にあるwebui-uer.batファイルを実行してください。
![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661150/74141b0d-61bc-c390-2dc0-df921b97d30a.png)

すると、下図のようにA1111のインストールが開始されます。しばし時間がかかります。
![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661150/35e5e1f1-95c6-5667-91d1-1faebd69da04.png)

インストールが完了すると、下図のようにWebUIが起動します。
![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661150/084ac841-6bce-04bf-e7f5-3e216a4bf3aa.png)

次に、TensoRTの拡張機能をインストールしていきます。

下図のようにExtentionsタブ内のInstall from URLタブを開き、アドレスは「https://github.com/NVIDIA/Stable-Diffusion-WebUI-TensorRT
」と入力して、Installをクリックしてください。
![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661150/9f46446a-fc64-cd3c-be8c-b4d8c4877107.png)

インストールが完了したら、下図のようにInstalledタブからApply and restart UIをクリックして、A1111を再起動してください。
![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661150/ab9486de-ee5c-cf5b-c3f9-0ec7658680e0.png)

A1111再起動後、下図のようにTensorRTタブが追加されていれば、TensorRTのインストールも成功です。
![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661150/fd760e88-6947-ac7b-dadc-f5cf0b994885.png)

...

それでは次に、TensorRT用のモデルを作成していきます。

下図のように、TensorRT上で使用したいモデルを選択した状態でTensorRTタブを開き、PresetはDefaultのまま、Export Default Engineをクリックします。
![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661150/3d73a525-5bd0-758a-7c3f-2a338bfe9510.png)

処理速度はパソコンのスペックに依存しますが、しばらく時間がかかります。
![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661150/ca68e850-a7fe-ade2-1275-544b4e845b23.png)

下図のように、Exported Successfullyと表示されたら、初期モデルの作成完了です。
![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661150/07e3b163-8aaf-1990-d13a-ef818373d333.png)

但し、これだけではTensorRTを使用することは出来ません。実際にTensorRTを使用する為には、実際に使用する環境に合わせて２つ目のモデルを再度作成する必要があります。初期モデル作成後、一度A1111を再起動してください。

再起動後、下図のように再度TensorRTタブを開き、今度はDefault設定ではなく、自分が使用したい環境に近い選択肢を選びます。また必ずUnetタブに作成したモデルを適用してください。

ここでは768x768 - 1024x1024 | Batch Size 1-4を選択しています。そして更にAdvanced Settingsを開きます。
![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661150/a16cc457-f266-803b-7d14-b82a78949a9e.png)


下図のように各種のパラメーターを設定しますが、TensorRTではここで設定した範囲内でしか画像生成が出来ません。この場合は縦横共に、最小832最大1024に設定しています。
![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661150/3e2028c3-05db-273c-7d4d-773fe743f78f.png)

また、Tokenサイズはプロンプトを長く設定できるようにする為に、最適値と最大値はMax750にしておくことを推奨します。

2つめの実用の為のモデル作成が完成したら、下図のようにTensorRTによる画像生成が可能になります。
![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661150/f8d90cac-9312-0ef8-c03b-e925047e4056.png)

この場合、縦横の設定は最小832、最大1024ですから、解像度指定はその範囲でしかできません。

...

手順としては以上となります。

TensorRT自体がまだ発展途上の技術であり、更にnVidiaは最新のTensorRTライブラリー10.xに正式対応したVer3を開発中のとことで、何かしら追記すべき事項があり次第、後日追記するかもしれません。