🐷

stable-diffusion.cpp で CPU で FLUX.1 Schnell を動かす

2024/08/28に公開

Flux.1 しゅごいね...

しかし十分な GPU 持っていないユーザーでもちょっと試したいときがある...
stable-diffusion.cpp で Flux.1 対応されたので CPU で動かしてみます!

https://github.com/leejet/stable-diffusion.cpp

手順

cmake でフツーにビルドします.

https://github.com/leejet/stable-diffusion.cpp/blob/master/docs/flux.md

weight とか取得します. 特に難しいことはありません.

FLUX dev は登録とかいるので, とりあえずは vae は Schnell のを使います.

https://huggingface.co/black-forest-labs/FLUX.1-schnell/tree/main/vae

生成する

q8 版を使いました.
WSL2 で, メモリは 24 GB 程消費, Ryzen 3900X 12 threads(CPU usage 50%)で 75.57s/it くらいでした.

./build/bin/sd --diffusion-model  models/flux1-schnell-q8_0.gguf --vae ./models/ae.safetensors --clip_l ./models/clip_l.safetensors --t5xxl ./models/t5xxl_fp16.safetensors  -p "a lovely cat holding a sign says 'flux.cpp'" --cfg-scale 1.0 --sampling-method euler -v

Voila~

20 iters, 512x512(upscale 前) で 1440 secs(~= 25 分ほど)

さすがに CPU だけだと時間かかる感じですが, Ryzen 9950X とかなら GPU(4070 あたり?)の 1/3 ~ 1/4 くらいは見込めそ?

TODO

  • メモリに余裕があれば fp16 とかで動かしてみる(q8 以下の quantize だと毎回デコードとかで CPU だとボトルネックになりそう)
  • CPU でフレキシブルなのを生かして, 生成状態を プログレッシヴ に表示できないか調査する
  • BLAS などアクセラレーション有効でどれくらい改善するか試す.
  • GPU ありで動かしてみる
  • CPU マイニングしつつ, CPU サーバで画像生成代行業してがっぽがっぽしたい
    • GPU 処理である程度設定詰めて, 夜間バッチ処理で高品質なの生成とか

Discussion