Stable Diffusionを使用して絵を描こうとした場合、使用しているビデオカードの種類やスペックによっては意外と時間がかかってしまいますよね。
今回はそんな「AIで絵を描くのに時間がかかってしまう」という課題を解決します。
「Stable-Diffusion-WebUI-TensorRT」とは
そもそも「TensorRT」とはなんなのか。という話ですが、TensorRTとは、NVIDIA社がNVIDIA製GPU製品向けに提供しているSDKで、ディープラーニング推論を高速に実行するためのものです。
Stable Diffusionで絵を描く場合、使用しているモデルの特徴を抽出して描いています。
その際に使われる「ディープラーニング」というのは、Stable Diffusionに限っていうのであれば、絵の特徴ある部分を際立たせて他の不要な情報との差や境を覚えていく。ということを何万回も繰り返した時の、学習データ(学習モデル)になります。
そして普通にStable Diffusionを使用する際は、この学習データから指定されたプロンプトなどに合うように特徴を作っていき(削っていき)、絵を描いていきます。
Stable-Diffusion-WebUI-TensorRTとはは、Stable-Diffusion-WebUIでTensorRTを使用するための拡張機能のことを指し、この学習モデルを自身の環境に合うように作り直してそれを使用することで、より効率的に画像を生成できる。というものになります。
自身の環境に合うように作り直したモデル(TensorRT形式)への変換時に、通常のStable Diffusionで絵を描くよりも多くのVRAMを消費するため注意が必要です。
「Stable-Diffusion-WebUI-TensorRT」の使い方
nvidia ドライバの更新
使用するビデオカード(nvidia)のドライバは最低でも 537.58以降、可能ならば545.84以降を使用してください。
※Stable DiffusionはNVIDIAのグラボ(GeForce等)推奨のため、nvidia以外を使用している方は別途nvidiaのグラボを用意することをお勧めします。
「Stable-Diffusion-WebUI-TensorRT」のインストール
「Stable-Diffusion-WebUI-TensorRT」をインストールするために、「Extensions」タブからInstall from URLを開きます。
URL for extension’s git repositoryに下記のアドレスを張り付けて、Installボタンをクリックしてます。
https://github.com/NVIDIA/Stable-Diffusion-WebUI-TensorRT
次にInstalledで「Apply and restart UI」 ボタンをクリックして適用して再起動します。
念のため再起動後、一度Webとコマンドプロンプトを停止し、Stable Diffusion web UI自体を再起動させて下さい。
再起動時、下記のようなエラーが出た場合は何度か「OK」を押すと起動できます。
「TensorRT」というタブが追加されていれば、正常にインストールされた証拠です。
もし項目が出てきていないときは再起動ができておらず反映がされていないか、インストール途中でエラーになっている可能性がありますので、再起動とコマンドプロンプトの確認をしてください。
「Stable-Diffusion-WebUI-TensorRT」を使うためのモデルの準備
モデル(Stable Diffusion checkpoint)を使用したいモデルに変更しておきます。
「TensorRT」タブを選択し、「Export Default Engine」をクリックしてTensorRT 形式にモデルを変換します。
「Preset」は「Default」のままか、使用しているビデオカードのVRAMが少ない場合は「512×512 | Batch Size 1 (Static)」を選択してください。
画面下部のoutputに「Export Successfully」と表示されれば変換成功です。
output下の「Available TensorRT Engine Profiles」という文章の隣に、更新ボタンがあるのでそれおをクリックします。
今回変換したモデルが対応している生成条件などが表示されていますので、その条件に合うように画像を出力していきます。
「sd_unet」を表示させる
先ほどまでで準備は整っているのですが、そのままではTensorRTのON/OFFを切り替えることができません。
モデルを変えるたびにモデルを変換して準備するのは大変なので、場合によってはOFFにすることもあると思います。
簡単にON/OFF部分を表示できるので設定しておいて損はありません。
「Setting」タブに移動し、画面左側のUser interfaceを選択します。
「Quicksettings list」に「sd_unet」を追加します。
その後「Apply settings」と「Reload UI」を続けて行ってください。
画面上部のモデル選択の横にSD Unetと出ていれば、準備完了です。
「Stable-Diffusion-WebUI-TensorRT」を使い方
モデル変更後の初回は「SD Unet」の右側にある更新ボタンを押して変換したモデルを認識させてください。
「SD Unet」は「Automatic」のままであれば変換したモデルが使用されますが、以前変換したモデルを手動で設定したい場合は「SD Unet」で変換したモデルを選択するだけではなく、通常モデル選択(Stable Diffusion checkpoint)でも変換前のモデルを選ばないとうまくいかないようです。
その後は通常の「txt2img」で好きなプロンプトとネガティブプロンプトを設定して実行します
注意点としては、下記になります。
1.先ほどモデルを変換した時に出てきた制限以内であること(画像サイズは64の倍数であること)
2.ControlNetの一部は対応していないこと
今回は簡単なプロンプトで実行できるかを確認してみます。
プロンプト
best quality, masterpiece, a GIRL
ネガティブプロンプト
worst quality, low quality
サイズは512×512で出力します。
今まで通り出力されました。
また時間は11秒でした。
- Stable Diffusionのプロンプトの見本が知りたい
- 画像生成が思ったようにできない
- 色々なプロンプトを探したい
「Stable-Diffusion-WebUI-TensorRT」ではどのくらい高速化されるのか?
先ほどは簡単な命令だったので、プロンプトを少し複雑にしてみます。
またSamling Stepsも「50」と少し多めにしてあります。
プロンプト
front shot, beautifully painted, girl, young,20 years old, medium long hair, straight hair , beautiful dark brown hair, shiny hair, (detailed cute anime face)+++, gray eyes, light smile, white skin, masterpiece, (white background:1.3), white t-shirts, create a blank space above the head
ネガティブプロンプト
flat color, flat shading, nsfw, retro style, poor quality, bad face, bad fingers, bad anatomy, missing fingers, low res, cropped, signature, watermark, username, artist name, text, hair ornaments, tie, cap, bow tie
OFF/ 15秒
OFF/ 7秒
公式から発表されている3倍には届きませんでしたが、それでも相当高速に出力することが出来ました。
同じクオリティの絵で、高速に出力されるのは効率が上がって良いですね。
まとめ
いかがでしたでしょうか?
Stable DiffusionをNVIDIAのツール『TensorRT』を使って高速化する方法について解説してきました。
今回のポイントをまとめると、以下のようになります。
- 何もしていない状態に比べて、2倍以上の速さで生成できる
- ただしControlNetなど一部の機能は使えなくなる
- インストールするのに手間がかかる
TensorRTを使用したモデル生成は通常より約3倍、高速なxformersより約2倍ほど速いと言われています。
ただしControlNetなどの便利な拡張機能は使えなくなるので、手足を変えたりなどの微修正には向かないので、初めにTensorRTを使用して大量に画像を生成して、構図を決めるときにはとても有用な機能ではないでしょうか。
ぜひこの機能を使って、絵の生成が遅いという悩みから解放されて、たくさんの絵を出力してみてください。
- Stable Diffusionのプロンプトの見本が知りたい
- 画像生成が思ったようにできない
- 色々なプロンプトを探したい