目次はじめに概要セットアップベンチマーク最後にはじめにこんにちは、GPU有効活用シリーズの第2弾...ではなく1.5弾です。第2弾のネタはあるのですが、まだ動作検証がうまくいってないのでしばらくお待ちください(今年中に出せればいいなぁ)。いうことで第1.5弾の今回は第1弾の前編で使ったStable-Diffusionによる画像生成がさらに速くなるとのことで、実際に試してみました。UIの拡張機能がTensorRTです。生成する画像の条件に合わせてモデルを変換することで高速で生成できるようになる..らしいです。使用するモデル、生成する画像サイズによって変換をやり直さなければいけないので色々試行錯誤するには向いてないかもしれないですね。セットアップ公式のサポートページにセットアップガイドがあるので、それにならって準備していきます。ドライバーのバージョンを確認します。Experienceでドライバーのアップデートしましょう。アップデートが完了したら、docker-compose.ymlを書き換えます。デフォルトではenvironmentのCLI_ARGSに--medvramがついているのですが、TensorRTではこれがついていると動かないようなので消しておきます。UIを起動しましょう。-dでコンテナを起動します。ページが開けたら、まずは拡張機能のインストールを行います。repositoryテキストボックスにhttps://github.com/NVIDIA/Stable-Diffusion-WebUI-TensorRTと入力してInstallをクリックします。完了するとTrainとSettingsの間にTensorRTというタブが出てきます。出てこない場合は1度コンテナを停止して再起動するといいと思います。Engineをクリックします。Successfullyがでたら変換完了です。条件で生成して時間比較するため、1024×1024も生成できるようにします。Engineをクリックします。Successfullyがでたら完了です。Unet)を選べるようにします。listにsd_unetを追加します。Unetを選ぶリストが現れます。これで準備ができました。ベンチマーク第1弾と同じ条件で、何回も生成するためにapiを叩くスクリプトを用意しました。PngImageFile.save(result1.image,f'{root_dir}{end_time}.png')print(times)このコードを実行すると全く同じ条件で30枚の画像が生成されます。実行結果は以下の通りです。見にくいですが、おおよそ36秒という結果になりました。続いてTensorRTで変換したSD-Unetを使って生成します。スクリプトを少し書き換えました。)これで再度実行してみましょう。実行結果は以下の通りです。こちらはおよそ30秒という結果になりました。思ったよりも速くなりませんでしたね。付けていてすでにある程度早かったリサイズにはあまり有効ではなかったあたりが考えられるかなと思います。最後に満を持して?公開されたNVIDIA謹製の拡張機能TensorRTを試してみましたが、思ったよりも速くならなくて少し残念です。この症状が報告されているのを見ていないのですが、この拡張機能をインストールするとコンテナをたてたときに正常に立ち上がらず、一度再起動が必要になります。個人的には積極的には使わないかなぁという感じです。将来的にLoraにも対応するらしいので、それが動くようになったらまた試してみたいと思います。りょうたろう)23卒エンジニア。SBCでNAS、VPN、マイクラとかのサーバを建てて遊んでる人。動的型付けよりは静的型付けが好き。本記事に記載の情報に起因するいかなる損害に対しても弊社は一切の責任を負わないものとします。お客様のご判断と責任のもとにご活用ください。