Stable‑Diffusion.cpp: 軽量 C++ ディフュージョン推論エンジン
stable‑diffusion.cpp とは何ですか?
stable‑diffusion.cpp は、C++ で書かれたオープンソースの純粋な実装で、現代のディフュージョンモデルを実行します。stable‑diffusion、Flux、Wan、Qwen‑Image、Z‑Image などの最新アルゴリズムを、C++ をコンパイルできるすべてのシステム(Linux サーバーから Windows ノートパソコン、Termux を介した Android まで)で利用可能にします。プロジェクトは次のように設計されています。
- ゼロ依存 – バンドルされた ggml ランタイム以外の外部ライブラリは不要です。
- クロスプラットフォーム – Linux、macOS、Windows、ARM ベースの Mac、Android で動作します。
- GPU フレンドリー – CUDA、Vulkan、Metal、OpenCL、SYCL、さらに AVX / AVX2 / AVX512 を備えた CPU 専用実行をサポートします。
- パフォーマンス志向 – メモリ使用の最適化、Flash‑Attention、VAE タイリング、キャッシュベースのアクセラレーションを備えています。
このライブラリは llama.cpp と ggml に触発されており、同様のエコシステムに慣れた開発者には自然な選択肢です。
主な機能の概要
| 機能 | 対応モデル | 備考 |
|---|---|---|
| 画像生成 | SD1.x, SD2.x, SD‑Turbo, SDXL, SDXL‑Turbo, SD‑v1.5, SD‑v2.5, SD‑3, SD‑3.5 | 標準のテキスト‑to‑画像パイプライン |
| 画像編集 / 画像再構築 | FLUX.1‑Kontext‑dev, Qwen‑Image‑Edit 系列 | プロンプトベースの編集をサポート |
| 動画生成 | Wan2.1, Wan2.2 | モーションアウェアな条件付けを含む |
| 高速アップスケール | ESRGAN | カスタムタイルサイズ |
| レイテンシ最適化デコード | TAESD | より高速な潜在デコード |
| LoRA & ControlNet | SD1.5 | stable‑diffusion‑webui と同一インターフェース |
| 潜在一貫性モデル | LCM, LCM‑LoRA | 2025年に追加 |
| バックエンド選択 | CPU, CUDA, Vulkan, Metal, OpenCL, SYCL | プラグイン方式 |
| 重み形式 | .ckpt/.pth, .safetensors, .gguf | 柔軟な重みロード |
| コマンドライン API | sd-cli |
ワンライナーで画像生成 |
| C API | sd.h / sd.cpp |
他プロジェクトへの埋め込み |
| Docker & CI | Docker イメージ | Linux ↔ Windows でビルド |
ビルドと実行の開始
1. 依存関係のインストール
# Ubuntu
sudo apt-get update && sudo apt-get install -y build-essential git cmake
# macOS (Homebrew)
brew install cmake git
2. リポジトリのクローン
git clone https://github.com/leejet/stable-diffusion.cpp
cd stable-diffusion.cpp
3. ソースからビルド
mkdir build && cd build
cmake .. -Dggml_backend=cpu # もしくは cuda, vulkan, metal など
make -j$(nproc)
4. モデル重みのダウンロード
git clone https://huggingface.co/stable-diffusion-v1-5
curl -L -O https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned-emaonly.safetensors
5. 画像生成
./bin/sd-cli -m ../models/v1-5-pruned-emaonly.safetensors -p "a cyberpunk city at dusk"
PNG 出力はウェブ UI 互換のトークン文字列としてモデル埋め込みも埋め込みます。
パフォーマンスヒント
| ヒント | 説明 |
|---|---|
| GGUF を使用 | .gguf フォーマットは量子化されており、読み込みが高速です |
| Flash‑Attention を有効化 | CUDA で VRAM 量を大幅に削減 |
| VAE タイリング | 大きな画像のピークメモリを削減 |
| キャッシュレイヤー | ./bin/sd-cli --use-cache で以前のモデル状態を再利用 |
| macOS で Metal を使用 | CPU と比較して約 40 % のスピードアップ |
2020‑MacBook‑Pro(10 コア CPU、3070 GPU)で 512×512 SD‑XL 画像を生成する際、CPU で約 32 秒、NVIDIA 3070 と CUDA + Flash‑Attention で約 2.5 秒となるベンチマークがあります。
ライブラリの拡張
API は意図的に軽量です。新しいモデルを追加するには:
1. モデル定義(.h/.cpp)を追加し、ggml フォーマットを参照する。
2. CMakeLists.txt を更新し、docs/ にエントリを追加する。
3. PR を送信すると次リリースで反映されます!
コミュニティ拡張の例:
- Python バインディング – stable-diffusion-cpp-python
- Go ラッパー – stable-diffusion
- Rust ランタイム – diffusion-rs
- Flutter ウィジェット – local-diffusion
コミュニティと貢献
リポジトリは 5,000 以上のスター、500 以上のフォーク、活発な貢献者コミュニティを誇ります。貢献に興味がある場合は:
- リポジトリをフォークする。
- 機能ブランチを作成する。
- 明確なコミットメッセージ付きで PR を送信する。
- make check でテストを実行する。
- イシュー スレッドで議論に参加する。
また、Docker イメージも用意されており、プロダクションや CI パイプラインへの素早いデプロイが可能です。
stable‑diffusion.cpp を選ぶ理由
- パフォーマンスとシンプルさの融合 – 新しいフレームワークを学ぶことなく、GPU を最大限に活用。
- 幅広いモデルサポート – SD の古典的モデルから最新の Flux・Wan まで網羅。
- カスタマイズ性 – バックエンドを切り替え、量子化を使用したり、独自の C++ サービスへ組み込むことが可能。
- ライブ開発 – 毎月アクティブリリース、新モデルの追加も月単位で実施。
試してみませんか?リリースページから事前ビルド済みバイナリを入手するか、独自にビルドしてください。ドキュメントは継続的に更新されており、コミュニティは非常に協力的です。
次のステップ:
1. ハードウェアに合ったエンジンバックエンドを選択する。
2. モデルをダウンロードし、テスト画像を生成する。
3. examples/ フォルダーを探索して、画像編集や動画生成などの高度なパイプラインに挑戦する。
楽しい Diffusion ライフを!