【ai-diffusion】Kritaでnunchakuを利用した話②【Flux】
はじめに
下記記事のつづきです。
設定を見直すと大きな変化がありました。
変化とは
適切な解像度でnunchakuモデル生成すると、かなり高速化していました。
前回の記事は、(Kritaバグ?)内部の解像度が1.5倍になっており、設定しているものと異なる状況でした。
前回記事で利用した生成が遅いので、違いを調べたところ、GUI側のスケール設定が無視されていたようです。内部では1920x1360(1.5倍)で生成していました。

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


つまり、通常の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程度にとどまっていました。


AI推論の演算で、PCIEの帯域がボトルネックになるのは珍しいですが、それだけnunchakuが単純な量子化以外に、高度な(ヘテロな)バランシング手法を利用しているのだと思います。ヌンチャク名の由来なのかもしれません。
※ ただし解像度が上がると、PCIEのボトルネックが無くなりました。正確に言うと、ボトルネックの場所がGPUに移っただけです。つまり、より高速なGPUであれば、PCIEが依然として問題になるはずです
まとめ
解像度(1280x900前後)が限定されるとは言え、RTX3060で、FLUX.1 dev(Krea)モデルの20stepが10秒で生成できるのはかなりの高速化だと思います。
