見出し画像

【ai-diffusion】Kritaでnunchakuを利用した話②【Flux】

はじめに

下記記事のつづきです。

設定を見直すと大きな変化がありました。

変化とは

適切な解像度でnunchakuモデル生成すると、かなり高速化していました。

前回の記事は、(Kritaバグ?)内部の解像度が1.5倍になっており、設定しているものと異なる状況でした。

前回記事で利用した生成が遅いので、違いを調べたところ、GUI側のスケール設定が無視されていたようです。内部では1920x1360(1.5倍)で生成していました。

debugモードで内部ComfyUIのワークフローの差をとったもの

あらためて1280x900解像度でパフォーマンスを確認すると、

nunchakuモデル利用(svdq-int4_r32-flux.1-krea-dev):1280x900解像度で10秒
通常モデル利用(flux1 KreaDevFP8_fp8E4m3fn):30秒

つまり、通常のFLUX.1 devモデルと比べて1/3程度になっているという事です。10秒で生成できるなら、SDXLと同レベルだと思います。

もうひとつ気づいた点

上記のもっとも効率よくnuchakuが動く状況では、PCIEの転送速度(帯域)がボトルネックになります。筆者の環境は

  • ①PCIE4.0対応 RTX 3060 (4.0 x16動作)

  • ②PCIE3.0対応 RTX 3060 (3.0 x4動作)

なのですが、①では上記のように10秒で生成しますが、②では25秒必要でした。電力も半分ぐらいしか利用できていません。

nunchakuの仕組みとして、CPUへオフロードしたデータを逐次GPUへ転送しているのだと思いますが、①だと常にRXが10〜15GB/s出ていますが、②だと3〜4GB/s程度にとどまっていました。

① 4.0x16動作のRTX3060
② 3.0x4のRTX3060

AI推論の演算で、PCIEの帯域がボトルネックになるのは珍しいですが、それだけnunchakuが単純な量子化以外に、高度な(ヘテロな)バランシング手法を利用しているのだと思います。ヌンチャク名の由来なのかもしれません。

※ ただし解像度が上がると、PCIEのボトルネックが無くなりました。正確に言うと、ボトルネックの場所がGPUに移っただけです。つまり、より高速なGPUであれば、PCIEが依然として問題になるはずです

まとめ

解像度(1280x900前後)が限定されるとは言え、RTX3060で、FLUX.1 dev(Krea)モデルの20stepが10秒で生成できるのはかなりの高速化だと思います。

いいなと思ったら応援しよう!