こんにちは!悠です!
今回は「Stable Diffusion WebUI」で、画像の生成速度を格段に速くできる拡張機能「ToMe(a1111-sd-webui-tome)」の導入方法を紹介していきます。

環境によっては生成速度が1.5倍になることもあるそうです。
ただ生成速度と引き換えに、画像のディテールをある程度犠牲にするというデメリットもあります。
そのあたりも比較していきますので、ぜひ参考にしてください!
「ToMe」とは?
「ToMe」とはToken Mergingの略で、プロンプトに使用する冗長なトークンを統合して処理を高速化する技術です。
RTX4090を使用した場合、60%のトークンをマージしてもほぼ出力結果に影響を与えることなく、生成速度を約2倍にし、使用するVRAMの量を1/5にできるそうです。

出典:https://github.com/dbolya/tomesd
xformsersと併用することもでき、特にアップスケーラーを使った高画質化で効果を発揮するといわれています。
なお、上のGitHubのページにある「ToMe」は技術の紹介で、拡張機能として導入する場合は「a1111-sd-webui-tome」を導入する必要があります。
「a1111-sd-webui-tome」の導入方法
この拡張機能は導入方法が少し特殊なため、Google Colaboratory版で導入するやり方についてはいったん保留にさせてください。
ローカル版の導入方法
コマンドプロンプトを開き、cdコマンドで下記のディレクトリに移動します。パスの前半は個人の環境によって変わりますので注意してください。
cd C:\Users\name\Desktop\SD_Test_Version\webui\venv\Scripts
ディレクトリを移動したら、下記のコマンドを入力します。
pip install tomesd
Successfully installed tomesd-0.x.xと表示されるまで待って、コマンドプロンプトを閉じてください。
WebUIを起動し、「Extensions」→「Install from URL」の「URL for extension’s git repository」に下記のURLを入力しInstallをクリックしましょう。
https://github.com/SLAPaper/a1111-sd-webui-tome
WebUIを再起動して、Seedの下にEnable ToMe optimizationのチェックボックスが表示されていれば導入成功です。
「a1111-sd-webui-tome」の使い方
まずはSettingsタブに追加されているToMe Settingsを開いてください。
一番上にあるToMe merging ratioを大きくするほど、生成速度が上がりますが出力画像のディテールが下がります。
基本はデフォルトの0.5、上げても0.6くらいまでがおすすめです。
その下にある2つのスライダーはToMeを有効化する画像サイズの境界値です。
例えばToMeを有効化して512×512の画像を生成する場合は、境界値のwidthとheightを512以下に設定しておく必要があります。
高画質化でしか使用しない場合はデフォルトのままでOKですが、txt2imgでも使いたい場合は適宜数値を変更してください。
あとはtxt2imgまたはimg2imgタブのSeedの下にあるEnable ToMe optimizationにチェックを入れて、Generateボタンを押すだけでToMeが有効化されます。
「ToMe」の有無による生成速度の比較
では実際に、ToMeを有効化した場合と無効化した場合の生成速度と生成画像のディテールの差を比較していきます。
私の環境は次の通りです。
- GPU: GTX1660Ti(VRAM6GB)
- torch: 2.0.0+cu118
- xformers: 0.0.19
- commit: a9fed7c3
txt2imgで768×512の画像を1枚生成
ToMe以外の設定は全て同じもの(プロンプト・Seed、サンプラー、ステップ数など)を使用しています。
- Sampling method: DPM++ 2M Karras
- Sampling steps: 30
- Batch count: 1
- Batch size: 1
- Model: MomijiMix
- ToMe merging ratio: 0.5
【ToMe無効化(time taken:33.00s)】
【ToMe有効化(time taken:28.50s)】
生成速度が約1.15倍高速化しました。
ただ女の子の洋服や背景の竹の部分のディテールが若干省略されていますね。
正直それほど生成時間も変わりませんし、txt2imgで使用する必要はないかなと思います。
MultiDiffusionで2倍に拡大(1536×1024)
上項で紹介したtxt2imgで生成した画像を、MultiDiffusionを使って2倍に拡大したときのtime takenを比較します。
なお素材画像には、両方ともToMeを無効化したもの(下記)を使用しています。
【ToMe無効化(time taken:2m33.31s)】
【ToMe有効化(time taken:2m00.74s)】
今回は生成速度が約1.27倍高速化しました。ToMeは高解像度で真価を発揮するというのは本当ですね。
やはり有効化した方は、若干ですが背景や服のディテール(服のしわとかわかりやすいですね)が省略されているように思います。
個人的には許容できる範囲なので、アップスケーラーを使う際は有効化するのもありだと思いましたね。

ただそもそも2分が長すぎるため、どっちでもいい感は否めませんが…おそらくRTX40xxクラスだと更に差が顕著に表れるのではないでしょうか。
まとめ
以上が「Stable Diffusion WebUI」で、多少のディテールと引き換えに画像の生成速度を格段に速くできる拡張機能「ToMe(a1111-sd-webui-tome)」の紹介でした。
個人的な感想としては、txt2imgにおける低解像度の画像出力ではデメリットの方が大きく、MultiDiffusion等による高解像度でのアップスケールを行う際は明確に速くなるため導入するのもあり、という結論です。

「ToMe」に対する感想は、使っているGPUや環境によってかなり変わってくると思いますので、ぜひ皆さんも試してみてくださいね!
では、ここまで読んでいただきありがとうございました。
コメント