Research
NVIDIA Dory 4B をllama.cppで動かす:ループ別コスト完全ガイド
2026/11/08
NVIDIA Dory 1.0 4B とは
NVIDIAのNemotron Labsが開発したDory 1.0 4Bは、中間層に「共有ブロック」を持つ小型推論モデルだ。この共有ブロックはトークンごとに1〜4回繰り返し適用できる設計になっており、追加のパラメータなしに計算量だけを増やせる。つまりひとつのチェックポイントで4種類の計算予算に対応でき、再トレーニングは不要と報告されている。
MarkTechPostが公開したチュートリアルでは、このDory 1.0 4BをNVIDIAのモデルカードが指定するllama.cppのフォークブランチでビルドし、ループ数ごとのコストを実測する手順が詳細に解説されている。
llama.cppのDory専用ブランチをビルドする
現時点でDoryのサポートはllama.cppの本家にはまだ取り込まれておらず、NVIDIA公式のプルリクエストもドラフト段階とされている。そのため、NVIDIAのモデルカードが固定しているコミット(98a74c97ea09ac72f6ceda1559808fc0a2f447ce)からビルドする必要がある。
チュートリアルのコードは実行環境を自動検出し、MacではMetalフラグを、ColabなどGPU環境ではCUDAカーネルを適切に設定してビルドする。フラッシュアテンション(--flash-attn off)はモデルカードが使用しない設定のため無効化しており、T4 GPU環境でもビルドが現実的なサイズに収まるよう工夫されている。
GGUFファイルのダウンロードと検証
使用するファイルはQ5_K_M量子化のGGUF(約3.67 GB)で、Hugging Faceのnvidia/NVIDIA-Nemotron-Labs-Dory1.0-4B-GGUFリポジトリから取得する。チュートリアルでは、ダウンロード後にSHA-256チェックサムでファイルを検証する手順が組み込まれている。
なお、モデルカードのコマンド例ではファイル名をdory-q5_k_m.ggufと記載しているが、実際のリポジトリ上のファイル名はNVIDIA-Nemotron-Labs-Dory1.0-4B-Q5_K_M.ggufであり、カードのコマンドをそのままコピーすると失敗すると同チュートリアルは指摘している。
アーキテクチャの読み解き:3グループのレイヤー構成
GGUFヘッダーを解析すると、モデルのアーキテクチャが確認できる。72のレイヤーエントリは次の3グループに分かれているとチュートリアルは報告している。
- 入力ブロック:16エントリ(8ブロック)
- 共有リカレントブロック:40エントリ(20ブロック)
- 出力ブロック:16エントリ(8ブロック)
アテンションのパターンはスライディングウィンドウ方式(S)とフルアテンション(*)が交互に配置されており、フルアテンション1層に対してスライディングウィンドウ3層という比率になっている。テンソルのパラメータ数をグループ別に集計すると、共有リカレントブロックだけでモデル全体の約39.8億パラメータのうち1.84億パラメータを占めると報告されている。
また、GGUFのヘッダーに「落とし穴」があることも指摘されている。ヘッダーに記録されているデフォルトのループ数は4だが、モデルカードが推奨しているのは2である。設定を上書きせずにサーバーを起動すると、最もコストの高いモードで動作してしまうことになる。
ループ数ごとの演算コスト予測
グループ別のパラメータ数から、ループ追加のコストを事前に計算できる。トークンは入力ブロック・リカレントブロック(ループ回数分)・出力ブロック・LMヘッドを通過するため、4ループは1ループに比べて2.51倍のパラメータを適用し、読み出す重みのバイト数は2.28倍になると算出されている(バイト数の比率はメモリバウンドなデコーダーではより直接的なコスト指標とされている)。
KVキャッシュについても2つのモードが解説されている。
- per_loopモード:各ループ×各リカレントアテンション層に独立したキャッシュを確保する。4,096トークンのコンテキストで1ループあたり306 MiB、4ループで816 MiBに達すると予測されている。
- last_loopモード:最後のループのキャッシュのみ保持するため、ループ数によらず306 MiBに抑えられると報告されている。
GSM8K評価:精度・回答長・解答時間の変化
チュートリアルではサーバーを実際に起動し、各ループ数での推論速度(デコード速度)を計測するとともに、GSM8K(算数ベンチマーク)を用いてループ数ごとの精度・回答長・問題あたりの所要時間を対比評価する構成になっている。KVキャッシュモードを切り替えたときに予測結果が変化するかどうかも検証の対象とされている。
まとめ
Dory 1.0 4Bの「ループ数を変えるだけで計算予算を調整できる」という設計は、エッジ環境や限られたGPUメモリでの推論に興味深いアプローチを提供する。一方で、llama.cppのDoryサポートがまだドラフト段階であるため、特定のコミットに固定したビルドが必要な点や、ファイル名の不一致など実際に動かすには注意点も多い。同チュートリアルは再現可能な形でその手順をまとめており、今後のDory正式サポートに向けた一次資料として参考になる内容となっている。
出典: How to Run NVIDIA Dory 4B with llama.cpp: Loop by Loop Guide