【画像生成AI】 Flux.1 は VRAM 6GB で快適に動く! --novram のススメ
はじめに
こんにちは、きまま / Easygoing です。
AI画像生成について記事を書いていて、最近は Flux.1 についての投稿がメインになっています。
Flux.1 は高品質な画像生成ができる AIモデル ですが、VRAM の使用が多いことが難点です。
今日は、低スペックの PC でも Flux.1 を快適に動かす方法を考えます。
結論:--novram オプションを使う
まず結論です。Flux.1 は、--novram オプションを使うと VRAM 6GB で快適に動作します!
検証の環境
今回の検証は、以下の環境で行いました。
ComfyUI
システムRAM:32GB
GPU:RTX 4060 Ti(VRAM 16GB)
今回使ったのは、画像生成 → アップスケール で高画質のイラストを生成するワークフローです。
それぞれの過程の VRAM 使用量を測定して、グラフにしてみます。
実際の結果
まずは、シンプルにオリジナルの FP16 形式での VRAM 使用量を調べます。
T5xxl-fp16 9.6 GB
1回目の生成が青色のグラフ、2回目が緑色のグラフになります。
VRAM 使用量はいずれも 15 GB に到達しているので、VRAM 12GB 以下の環境だと生成時間が劇的に伸びて しまいます。
解像度を下げてもVRAM節約にはならない?
より少ない VRAM で画像を生成できる方法を探して、画像の解像度を下げてみます。
解像度を 128 x 128 (元の64分の1のサイズ)に設定すると、画像の生成時間は短くなりますが、VRAM の使用量はほとんど変わらない 結果でした。
解像度を下げるのは、VRAM の節約にあまり効果がないことがわかります。
VRAM 利用を抑えるほかの方法を探してみます。
--lowvram と --novram オプション
ComfyUI には、VRAM が少ないときに VRAM の利用を効率化する 2つのオプションがあります。
--lowvram
--lowvram は VRAM の使用を減らすために、モデルの一部を システム RAM に移すオプションです。
VRAM を節約できますが、全体の処理速度が遅くなります。
--novram
--novram は、さらにアグレッシブにVRAMを節約します。
VRAM使用量が極端に少なくなる一方で、処理速度はもっと遅くなります。
--lowvram はほとんど効果がない!
まずは、--lowvram オプションを使った時の VRAM 使用量を見てみます。
T5xxl-fp16 9.6 GB
--lowvram 設定では、VRAM 使用量はほとんど変わりませんでした。
--lowvram は SDXL で試してみると、ある程度 VRAM の節約に効果がありましたが、Flux.1 は登場から日が浅いためか、十分に最適化されていないようです。
--novram はかなり有効!
同じグラフで --novram を見てみると、VRAM の使用をかなり抑えて、全体の使用量がほぼ 6GB 以内 に収まっています。
アップスケール処理の段階のみ VRAM 利用が 6GB を超えていますが、この処理にかかる時間は短く、また解像度が 1440 x 1440 で足りている場合はアップスケール処理自体が必要ありません。
一方で、--novram は VRAM のデータを システム RAM に移して処理するため、システム RAM を 32GB フルに使って います。
システム RAM をもっと効率的に使えば、もう少し早く生成することができそうです。
チェックポイントを gguf 形式に変更
システム RAM の節約のため、ロードするチェックポイントを容量の小さい gguf 形式に変更してみます。
T5xxl-fp16 9.6 GB
blue_pencil-flux1_v001-Q_8.gguf 12.5 GB(-20GB)
モデル容量を小さくすることで システム RAM の利用が 32GB 以内に収まり、画像の生成が 2分 早くなりました。
生成時間は VRAM が 16GB の時とあまり変わらず、画質もほとんど劣化はありません。
gguf 形式は、RAM の節約に非常に有効 です。
システム RAM を 16GB に減らしてみる
今度は システム RAM が少ない条件で試してみます。
--novram の設定のまま、メインメモリを片方抜いて システム RAM を 16GB に減らしてみます。
RAM の使用量は最大値の 16GB に張り付いていて、メモリ不足から生成時間が 2分長くなっています。
これは、先ほどと同じくモデルの容量を減らせばもう少し速くなりそうです。
モデルをさらに軽量化する
システム RAM の利用を抑えるため、モデルをさらに軽くしてみます。
T5xxl-Q_5_K_M.gguf 3.4GB(-6.2 GB)
blue_pencil-flux1_v001-Q_4_K_M.gguf 6.8GB(-5.7 GB)
モデルを軽量化すると、画像の生成は元と同じ時間になりました。
ただし、Q_4 まで軽量化すると生成した画像は細部の描き込みが減っています。
システム RAM が 16 GB の環境では、普段は Q_4 を使い、画質を上げるときは Q_8 という使い分けが良いのではないかと思います。
検証結果のまとめ
今回の検証結果を表にまとめます。
Flux.1 は --novram と gguf 形式を利用すれば、VRAM 6 GB で十分に使えます。
システム RAM は 16GB あれば画像は生成できますが、画質と速度を両立するには 32GB が欲しいところです。
今回の検証で分かったのが、--novram はメリットが大きい一方で デメリットがほとんどない ということです。
--novram を使って適切にモデルの容量を調節すれば、ほぼ元の速さを維持できます。
オススメの設定は?
検証結果をもとに、おすすめの設定をご紹介します。
VRAM 16GB 以上
T5xxl-fp16
チェックポイント fp16
VRAM 6GB ~ 12GB
--novram 設定
T5xxl-fp16
チェックポイント Q_8.gguf
システムRAM 16GB 以下
T5xxl-Q_5_K_M.gguf
チェックポイント Q_4.gguf
--novram の設定方法
私が利用している Stability Matrix での --novram の設定方法です。
Stability Matrix を起動して、ComfyUI の設定ボタンを押して下にスクロールすると、--novram のチェックボタンがあります。
これにチェックを入れて ComfyUI を起動すれば OK です。
注意点
今回の検証はあくまで VRAM の使用量を測定したものであり、実際にGPU を差し替えて測定したわけではありません。
手元の GTX 1660Ti 6GB で試してみたところ、--novram をつけても VRAM 使用量がもっと多かったので、GPU の世代によって最適化がだいぶ進んでいるのだと思います。
しかし --novram を試すことに何もデメリットは無い ので、VRAM 使用量が超過する場合はまず試してみて良いと思います。
Forge には --novram 設定は無いの?
Stable Diffusion webUI Forge は VRAM の管理を自動化しているので、手動で --novram を設定することはできません。
代わりに Forge には VRAM 使用を抑える --always-offload-from-vram オプションがありますが、私の環境ではこれを利用しても VRAM使用量 は変わりませんでした。
今のところ、ComfyUI の方が細かく VRAM の設定ができるので低スペックの PC に有利ですが、Forge はかなり先進的な VRAM 管理 を行っているので、今後のアップデートで VRAM 運用 が改善する可能性もあると思います。
ComfyUI の導入は難しいんでしょう?
そんなことはありません。
2024.9.14 に Zuntan さんが、ComfyUI を 1クリックで導入するツール を公開されました!
(正確には、1クリックで Forge と ComfyUI の両方を導入するツール)
これから ComfyUI を使う場合は、この EasyForge + ComfyUI の導入をオススメ します。
これについては、次回の記事で詳しく紹介します。
まとめ
Flux.1 は VRAM 16GB で快適に動作
--novram 設定で VRAM 6GB あれば動く
システム RAM はできれば 32GB
最後までお読みいただきありがとうございます!
参考記事
FP16 / Q_8 / Q_4 形式の画質の比較
今回 ComfyUI で --novram が効果があることを知ったのは、こちらの GJL さんの記事がきっかけです。
大変参考になる情報をありがとうございます!