DiffusionGemma用 llama.cpp セットアップ手順 (Windows環境)
こんにちは、かみもとです!
前回はDiffusionGemmaをWindows11, RTX4070で動かしてみました。
結局、VRAM不足で通常Gemmaの1/4の速度しか出なかったですが、一応やったことの手順は残しておきたいと思います。ご参考になれば幸いです!
このドキュメントは、ローカルのWindows環境(CUDA 12.8)でDiffusionGemmaを動かすための、llama.cpp`の導入からコンパイル、実行までの手順をまとめたものです。
もし読むのが面倒であれば、この記事の内容をChatGPTやClaudeに入力して環境構築してもらえればOKです!
1. 実行環境
OS: Windows11 Pro (PowerShell)
GPU: RTX4070 (VRAM 12GB)
CUDA Toolkit: 12.8 がインストール済みであること
Python: 3.x 系がインストール済みであること
2. ビルド用ツールのインストール
Pythonの仮想環境を作成し、コンパイルに必要なツール(`cmake`, `ninja` 等)をインストールします。
# 仮想環境の作成
python -m venv .venv
# 必要なパッケージのインストール
.\.venv\Scripts\python.exe -m pip install huggingface_hub psutil cmake ninja3. llama.cpp のクローンとPRブランチの取得
2026/6/11現在、DiffusionGemmaは通常の llama.cpp のメインブランチでは動作しません。現在開発中の専用プルリクエスト(PR #24423)のブランチを取得する必要があります。
# llama.cpp リポジトリをクローン
git clone https://github.com/ggml-org/llama.cpp.git llama.cpp
# DiffusionGemma対応のPRブランチを取得してチェックアウト
git -C llama.cpp fetch origin pull/24423/head:diffusiongemma-pr
git -C llama.cpp checkout diffusiongemma-pr4. CUDAヘッダーの欠損バグへの対応(CUDA 12.8環境特有)
CUDA 12.8 SDKに同梱されている CCCL 2.7.0 には、一部のヘッダーファイル(cuda/std/__type_traits/is_convertible.h など)が欠損している不具合があります。
これを回避するため、公式のCCCLリポジトリから正常なヘッダーファイルを取得し、ローカルに配置します。
GitHubの NVIDIA/cccl リポジトリから不足しているファイルをダウンロードします。
llama.cpp/vendor/cccl-fix のようなディレクトリを作成し、そこにヘッダーを配置します。
この辺りもAIに聞いて対応して貰えばOKと思います。
5. コンパイル(ビルド)の実行
インストールした CMake と Ninja を使用してビルドを行います。その際、手順4で作成した修正用ヘッダーファイルのパスをコンパイラに教える必要があります。
cd llama.cpp
# ビルド環境の構成 (-DGGML_CUDA=ON でCUDAを有効化。CMAKE_CUDA_FLAGS で修正ヘッダーを読み込ませる)
..\.venv\Scripts\cmake.exe -B build -G Ninja -DGGML_CUDA=ON -DCMAKE_CUDA_FLAGS="-I../vendor/cccl-fix/include"
# llama-diffusion-cli ターゲットのビルドを実行
..\.venv\Scripts\cmake.exe --build build -j --config Release --target llama-diffusion-cliビルドが成功すると、llama.cpp/build/bin/ フォルダ内に llama-diffusion-cli.exe が生成されます。
私の環境(CPU: Core i3 12100F)だと20分くらいコンパイルにかかったので、気長に待ちましょう。
6. DiffusionGemma の実行
12GBなどのVRAM容量が限られている環境では、モデル全体をGPUに載せるとメモリ不足(OOM)でクラッシュします。そのため、はみ出るMoE(Mixture of Experts)層をCPUとメインメモリに退避させるオプション(-cmoe)を使用します。
また、マルチGPU構成の場合、自動的に高速化機能がオフになってしまう制約があるため、1枚のGPUに固定して実行する設定が最速となります。
# GPU 0(例: RTX 4070)のみを使用するように環境変数を設定
$env:CUDA_VISIBLE_DEVICES="0"
# 実行コマンドの例
.\build\bin\llama-diffusion-cli.exe `
-m "..\models\diffusiongemma\diffusiongemma-26B-A4B-it-Q4_K_M.gguf" `
-ngl all `
-cmoe `
-sm none `
-mg 0 `
-c 2048 `
-n 256 `
-p "Answer in English. What is 84 * 3 / 2? Explain briefly."うまく実行できれば、以下のように推論できるようになります。

主要な起動オプションの解説
`-m`: モデルファイル(.gguf)のパスを指定
`-ngl all`: 可能な限り多くのレイヤーをGPUにオフロードする
`-cmoe`: (重要) MoE(Mixture of Experts)層をCPU/RAMで処理し、VRAM消費を抑える
`-sm none -mg 0`: テンソル分割を無効にし、単一GPU(Main GPU 0)で処理させる
`-c 2048`: コンテキスト長(生成領域を含めた確保メモリ)
`-n 256`: 最大生成トークン数(キャンバスサイズ)
まとめ
DiffusionGemmaをllama.cppで動かす手順を整理した
VRAM 12GBでも動かせるオプションを示した
速度は 21.3token/sec とノーマルGemmaの81.1token/secより遅い
VRAM使用量だけ改善されれば魅力的な技術ではあります。今後に期待!
最後まで読んでいただき、ありがとうございました!
もしこの記事が「参考になった!」「開発のヒントになった!」「絵が可愛い!」と少しでも感じていただけたら、画面下の【スキ(ハートマーク)】を押していただけると、検証の苦労が吹き飛ぶほど励みになります!
今後も生成AIの技術検証をガシガシ公開していきますので、フォローもぜひよろしくお願いします!
いいなと思ったら応援しよう!
若輩者ですが、サポートいただけると、もっとがんばって記事作成します!