見出し画像

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 ninja

3. 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-pr

4. CUDAヘッダーの欠損バグへの対応(CUDA 12.8環境特有)

CUDA 12.8 SDKに同梱されている CCCL 2.7.0 には、一部のヘッダーファイル(cuda/std/__type_traits/is_convertible.h など)が欠損している不具合があります。

これを回避するため、公式のCCCLリポジトリから正常なヘッダーファイルを取得し、ローカルに配置します。

  1. GitHubの NVIDIA/cccl リポジトリから不足しているファイルをダウンロードします。

  2. 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."

うまく実行できれば、以下のように推論できるようになります。

DiffusionGemma実行結果

主要な起動オプションの解説

  • `-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の技術検証をガシガシ公開していきますので、フォローもぜひよろしくお願いします!

いいなと思ったら応援しよう!

かみもと|ローカルAI生成 若輩者ですが、サポートいただけると、もっとがんばって記事作成します!