【Flux.1】 モデル形式はどれが良い? FP16 / Q_8 / Q_4 / NF4 を徹底比較!
はじめに
こんにちは、kimamanaDr です。
今回は Flux.1 を使う上で悩みどころであるモデルの圧縮形式について考えてみます。
Flux.1 のモデルには様々な圧縮形式があるので、分かりやすく整理してみました。
圧縮形式を比較する時の注意!
まず、検証を始める前にいくつか気をつけたいポイントがあります。
Forge 及び NF4 形式 の提供者の Illyasviel 氏は、量子化圧縮技術はばらつきが大きいので一つの画像で比較するべきではない と述べています。
また、今回検証で使った blue_pencil-flux1_v001 は試作バージョンなので、細かい比較を想定していない可能性もあります。
この記事の内容も、今後の技術の進歩によって大きく変わるかもしれませんので、その点もご承知おきください。
モデルの容量が劇的に増えている!
画像生成AIの性能向上とともに、モデルの容量も大きくなっています。
私が普段使っている blue_pencil シリーズの FP16 形式 のモデルの容量を比較してみます。
SD1.5:blue_pencil-v10 2.2 GB
SDXL:blue_pencil-XL-v7.0.0 7 GB
Flux.1:blue_pencil-flux1-v0.0.1 33.7 GB
Flux.1 のモデルは非常に大きいので、従来とは違った圧縮方法が必要になってきます。
モデルの圧縮形式
blue_pencil-flux1 の v0.0.3 も公開されていますが、今回は私が以前から使っている v0.0.1 を使って検証します。
それぞれの圧縮形式の容量は以下の通りです。
FP16 33.7 GB
FP8 17.1 GB
Q_8.gguf 12.7 GB
Q_4_K_M.gguf 6.8 GB
NF4 16.6 GB
NF4 形式 は配布されていませんが、Forge の Checkpoint マージ機能を使えば、FP16 形式 から作ることができます。
それぞれの略称はどんな意味?
FP16(Floating Point 16bit) 32.7 GB
16ビット浮動小数点方式です。生成AIでは一般的な方式で、SD1.5 や SDXL のモデルでも標準で使われています。
FP8(Floating Point 8bit) 17.1 GB
8ビット浮動小数点方式。FP16 に比べて精度は下がりますが、容量が半分になります。
Q_8.gguf(8bit GPT-Generated Unified Format) 12.7 GB
8ビット量子化GPT生成統一形式です。FP8 よりも精度が高く、容量がさらに少なくなります。
Q_4_K_M.gguf(4bit K-quants Mixed-precision GPT-Generated Unified Format) 6.8 GB
4ビットK量子化混合精度GPT生成統一形式です。アルゴリズムの工夫で、通常の Q_4 よりも精度が上がっています。
NF4(Noral Float 4bit) 16.6 GB
4ビット正規化浮動小数点方式です。FP8 より軽量で、画質が優れているとされます。
RTX 2000番台 以降の GPU では、高速に処理することができます。
実際の画像を比較
それでは、実際に画像を比較してみます。
FP16
FP8
Q_8.gguf
Q_4_K_M.gguf
NF4
FP16 がやっぱり一番きれい
それぞれの画像を比較するとき、ネオンの文字とバイクの赤い塗装部分を比べると分かりやすいです。
Q_8 は FP16 の 3分の1 の容量しかありませんが、ネオンの文字を一番オリジナルに近く再現 しています。
塗装部分については、FP16 が一番きれいで、他の形式では圧縮によってグラデーションが単純化 されてしまっています。
個人的には、JPEG の圧縮率を上げると退色していく感じに似ています。
Q_4_K_M と NF4 を比較すると?
NF4 はオリジナルの再現性がかなり低下します。
Q_4_K_M と比較しても、全体の質感は Q_4_K_M の方が良い と感じました。
一方で、私の環境では NF4 の方が Q_4_K_M よりわずかに VRAM 使用量が少ない 結果でした。
最適な条件は人によって変わってくるので、両方試してみて自分の環境に合った方を選択するのが良いと思います。
EasyForge に gguf 変換機能が搭載!
2024年8月25日、EasyForge に gguf 変換機能 が追加されました。
これでオリジナルの FP16 形式 から、任意の gguf 形式 に変換できるようになりました。
ベストな圧縮方法を探そう!
こちらのサイトでは gguf 形式 の精度を比較しています。さらに、別のサイトに分かりやすいグラフがあったので引用します。
グラフによると、gguf 形式 では Q6_K、Q5_K_M、Q4_K_M が容量と精度のバランスが良いようです。
それぞれの形式を比較してみた!
実際にそれぞれの形式を比較してみます。
Q_8
Q_6_K
Q_5_K_M
Q_4_K_M
Q_8 はディティールが保持されている
同じ gguf 形式 の比較なので、違いは大きくないですが、やはり Q_8 がディティールがしっかり保持されていてきれいです。
圧縮していくと、特に バイクのホイール部分に違い が出ています。
比べると違いがありますが、最も軽い Q_4_K_M でも Flux.1 の高い質感をかなり高いレベルで表現できているといえます。
VRAM使用量が鍵になる
Flux.1 を使うとき、一番のネックは VRAM 使用量 です。
VRAM 使用量 が超過すると生成速度が一気に遅くなるので、GPU の VRAM 容量 に合わせた圧縮形式を選びます。
ミドルレンジ以下の GPU では、多くの場合 Q_4_K_M が適切 です。
2024.9.19 追記
圧縮形式と VRAM 使用量 についてまとめた記事を書きました。
ComfyUIでは VRAM 6GB で Q_8 形式を使うことが可能です。
高解像度化は効果があるか?
次に Flux.1 の高解像度化を試してみます。
なお、SDXL の高解像度化については以前の記事を御覧ください。
今回の画像のオリジナル解像度は 1536 x 1536 ですが、Hires.fix を使って1.55 倍 に拡大して 2376 x 2376にしてみます。
アップスケーラーは、一番ナチュラルな仕上がりになる 4x_NMKD-Superscale-SP_178000_G を使用しました。
私の環境では Q_6_K で VRAM 使用量 が超過したので、Q_5_K_M 以下で比較します。
Q_5_K_M 元画像(1536 x 1536)
Q_5_K_M 高解像度(2376 x 2376)
Q_4_K_M 高解像度(2376 x 2376)
Flux.1 も高解像度化でさらにきれいに!
アップスケラーを通すと質感がさらに上がります。
一方で、Flux.1 はもともとかなりクリアーな画質なので、高解像度化でシャープになり過ぎないように今後プロンプトを調整したいところです。
圧縮形式を比較すると、Q_5_K_M と Q_4_K_M で背景の描き込みにかなり差があります。
Q_4_K_M では、特に遠景の建物の多くが省略 されています。
高解像度化すると VRAM 管理 がさらにシビアになりますが、モデルの圧縮率と解像度のベストなバランスを引き続き探っていきたいと思います。
まとめ
Flux.1 の圧縮型式について。
圧縮形式で画質は変わる
Flux.1 でも高解像度化は有効
VRAM に合わせて選ぶ
画像生成AIは凄まじい速さで進歩しています。Flux.1の登場からまだ1ヶ月ですが、その間に新技術が次々と公開されています。
2024.8.1 Flux.1 リリース
2024.8.9 Forge が Flux.1 対応、NF4 形式 をサポート
2024.8.11 EasyForge リリース
2024.8.15 Forge が gguf 形式をサポート
2024.8.25 EasyForge が gguf 形式変換をサポート
これほどの新技術が、週単位で無料で公開されていくのが信じられません。
今までこれほどエキサイティングな時代はあったでしょうか?
Flux.1 の可能性を探す旅はまだまだ続きます。
最後までお読みいただきありがとうございます!
4コマ漫画のプロンプト
赤い文字で「comic」と書かれた白いTシャツを着た茶髪の漫画家志望の男子高校生が、自室でノートパソコンを見ながら「FP16 はキレイだけど重い」と考えている。
次に上を向きながら「Q_8 と Q_4 はもっと軽い」と考えている。
次に横を向きながら「NF4 は早いけど精度が落ちる」と考えている。
最後に笑顔で「VRAM と相談だ!」と納得している。
Anifusion で生成。
この記事が参加している募集
この記事が気に入ったらサポートをしてみませんか?