やりたいこと
stable-diffusion.cppを使用してコマンドラインからStableDiffusionを実行します。
AMDのGPUでもCPUでも実行可能です。
環境構築
stable-diffusion.cpp
以下のページから自分の環境にあったZipファイルをダウンロードします。
Releases · leejet/stable-diffusion.cpp
Diffusion model(SD,Flux,Wan,Qwen Image,Z-Image,...) inference in pure C/C++ - leejet/stable-diffusion.cpp
AMDのGPUで動かしたい場合はvulkanとつくものかrocmとつくものです。
(基本的にはvulkanでいいと思います。rocmはどうするGPUが限られるはずです。)

NVidiaのGPUはcudaが付くものが対象です。
avx512,avx2,avx,noavxはCPU動作です。お使いのCPUで使用できるavxのバージョンを調べてダウンロードしてください。(私は誤解していたのですがAMDのCPUもAVX使えるようです。どのバージョンが使用できるかはAIに聞いちゃうのが楽です。)
対象のダウンロードしたファイルを任意のフォルダに解凍したら準備完了です。
モデル
StableDiffusionのモデルをローカルに持っていない場合は以下のページを参考にダウンロードしてください。(モデルの保存先はどこでもいいです)
実行
コマンドラインを起動してstable-diffusion.cppを解凍したフォルダに移動します。
以下のコマンドを実行します。(モデルパス部分は使用するmodelのパスに置き換えてください)
sd-cli -m モデルパス -p "a lovely cat" -s -1
./output.pngに猫の画像が生成されれば成功です。
オプション(引数)
オプションは以下のページにまとめられています。
stable-diffusion.cpp/examples/cli/README.md at master · leejet/stable-diffusion.cpp
Diffusion model(SD,Flux,Wan,Qwen Image,Z-Image,...) inference in pure C/C++ - leejet/stable-diffusion.cpp
よく使われる基本的なものだけ以下に記載します。
| -m | モデルのパス |
| -p | プロンプト |
| -s | シード値 ランダムで生成するには-1を指定する。 指定しない場合、毎回同じ画像が生成されるため注意。 |
-H | 画像高さ |
| -W | 画像幅 |
--vae | VAEのパス |
--steps | ステップ。初期値20 モデルによっては少ない数字の方がいいので注意。 |
動作確認
以下のモデルで動作することを確認しました。
- bluePencilXL_v700.safetensors
- v1-5-pruned-emaonly.safetensors
実行速度
画像の生成速度は以下の通りです。(モデルのロード時間やイテレーション後の時間は含んでいません)
| 生成時間(s) | |
| CPU(StableDiffusionWebui) | 263 |
| GPU(StableDiffusionWebui) | 63 |
| CPU(stable-diffusion.cpp AVX2) | 249 |
| GPU(stable-diffusion.cpp Vulkan) | 36 |
参考


コメント