- 対象
- batch 1・単一利用者。速度とprefillは構造確認済みモデル・単一GPUだけ
- 出力
- Q4_0・Q8_0・FP16/BF16別の必要VRAM、生成開始速度、128トークン平均速度、入力処理(prefill)
- 最終確認日
- 2026-07-30(日本時間)
- 編集
- KITSUNODE
必要VRAMを3つに分けて計算
必要VRAMは、モデルの重み、予定コンテキスト分のKVキャッシュ、推論ソフトが使う作業領域の合計です。GPUの公称VRAMと同じ二進容量基準へそろえて比較します。
必要VRAM = モデル重み + KVキャッシュ + 作業領域
モデル重み
bit数の理想値ではなく、llama.cppのblock layoutを使います。総パラメータ数をPとしたとき、重み容量はP × 1パラメータ当たりbyte数です。
- Q4_0
- 0.5625 byte / parameter(18 ÷ 32)
- Q8_0
- 1.0625 bytes / parameter(34 ÷ 32)
- FP16 / BF16
- 2 bytes / parameter
Q4_K_M、IQ、GPTQ、AWQ等は、block、scale、混合テンソル、対応kernelが異なります。本計算では同じ「4bit」または「8bit」として扱いません。
KVキャッシュ
KVキャッシュはモデルの層数、KV head数、head dimension、コンテキスト長から求めます。重みをQ4_0へ量子化しても、KVキャッシュまで自動的に4bitになるとはみなしません。
KV = 2 × 層数 × KV heads × head dimension × 2 bytes × tokens
GQAやsliding windowは、公開元のconfigやコードで確認できた構造だけを反映します。構造を確認できないモデルは総パラメータ数からKVを推測しません。この場合は重み容量だけを表示し、KV、必要VRAM、適合、速度、prefillは「算出不可」とします。
必要VRAMは、予定コンテキスト全体のFP16 / BF16 KVを確保する保守的な前提です。dynamic cache、paged allocation、KV量子化、sliding window等により、実際の確保量は変わります。
作業領域
推論エンジン固有のバッファへ、1枚構成では重みの5%または0.75 GiBの大きい方を安全幅として加えます。複数GPUではmax(0.75 GiB, 1枚当たりの重み × 5%)をGPUごとに確保します。この値は物理法則ではなく、実装差を吸収する明示的な仮定です。
生成開始時と128トークン平均を分ける
単一GPUで1 tokenを生成するdecode処理は、モデル重みと使用中KVキャッシュを読む速度が上限になりやすいため、GPUのメモリ帯域を基準にします。
生成速度(context) = 実効メモリ帯域 ÷ その時点の重み・KV読出し量
生成中はKVキャッシュが1トークンずつ増えます。このため、入力直後の「生成開始時」と、各トークンの所要時間を合計した「128トークン平均」を分け、比較表では128トークン平均を主に表示します。
帯域利用率の幅は、llama.cpp repositoryで公開されたRTX 5090、RTX 4090、RTX 6000 Ada、RTX A6000のLlama 2 7B Q4_0投稿記録から検算しています。Q4_0でGPU仕様が記録と一致するときだけ、そのGPUの記録を校正に使います。それ以外はGPU vendorと対象量子化別の広いrooflineシナリオです。対象モデルとbenchmark指定は共通ですが、投稿者、commit、OS、driver等を統制した同一試験ではありません。選択したモデルとGPUそのものの実測値ではないため、結果は低め・中心・高めの範囲と根拠区分を表示します。
入力処理(prefill)はTTFTではない
入力文を処理するprefillでは、モデル計算量とattention計算量を合算し、GPU演算性能から求めた時間とメモリ転送時間の長い方を「入力処理(prefill)」として表示します。
実際のTTFTにはtokenization、待ち行列、最初のdecode、sampling、stream、通信等も含まれます。この計算には必要な条件がないため、TTFTは算出せず、prefillを「最初の文字が出るまで」とは表示しません。
3つの固定課題を32トークン単位で比較
会話デモでは、「知識を答える」「数値を計算する」「コードを書く」の3つから固定課題を選びます。128トークン生成の計算を32トークンずつの4ブロックに分け、知識は64、計算は96、コードは128トークンの比較予算に必要な先頭ブロックを合計します。
32トークンブロック = その区間の各トークン時間の合計課題の生成時間 = 使用する先頭ブロックの合計モデル内部の完了目安 = prefill + 課題の生成時間
各課題は「回答前生成(固定仮定)」と回答生成に分けます。知識は32+32、計算は64+32、コードは64+64トークンです。後半ほどKVキャッシュの読み出しが増えるため、128トークン平均を短い課題へそのまま掛け戻さず、計算コアと同じ1トークンごとの時間から作った32トークンブロックを使います。
64・96・128トークンはGPUと量子化を比べるための固定予算であり、モデルの実際の思考量、正答、回答品質、課題別能力を表しません。thinking非対応モデルでは回答前生成が独立した段階にならない場合があります。画面の質問と回答は固定テンプレートの要約で、モデル固有tokenizerのtoken数や実生成内容を再現しません。prefillには要約文ではなく、計算画面で指定した入力トークン数を使います。回答フェーズ開始と完了目安はモデル内部の値で、実際のTTFTやend-to-end完了時間ではありません。
複数GPUは容量の参考だけ
複数GPUでは、合計VRAMとGPUごとの作業領域を使って容量上の参考を示します。一方、生成速度とprefillは算出しません。
llama.cppのlayer splitは層を順に処理し、tensor splitは層ごとのGPU間通信を必要とします。PCIe、NVLink、P2P、分割方法、推論エンジンを入力せずに、GPU枚数だけから速度倍率を決めることはできません。合計容量へ収まる表示も、各GPUへの実配置や通信バッファまで保証するものではありません。
VRAMを超えた場合
- 95%以内
- VRAMに収まると判定
- 95〜100%
- 余裕が少ない状態として注意表示
- 100%超
- VRAM超過。速度を算出せず、起動しない可能性を表示
VRAM超過時にCPUオフロードできる場合もありますが、推論ソフトの対応、十分なシステムメモリ、PCIe帯域、明示設定が必要です。この計算にはCPUやRAMの条件がないため、正常起動を仮定した速度は表示しません。
信頼度・根拠・前提を一緒に表示
- 信頼度
- 現在はmediumまたはlow。選択構成そのものの実測がないためhighは表示しない
- 根拠
- 狭い測定で検算した範囲、NVIDIA Data Center向け保守係数、vendor別roofline、算出不可を区別
- 前提
- 量子化形式、KV dtype、単一GPU、未校正backend等を結果ごとに表示
結果に含まれないもの
- 選択モデルそのものの実測ベンチマークや動作保証
- 同時利用、batching、speculative decoding、prefix cache
- CPUオフロード速度、PCIe、複数GPUの接続方式
- Q4_K_M、IQ、GPTQ、AWQ等、Q4_0・Q8_0以外の量子化
- 実際のTTFT、モデル読込み、ドライバー、推論エンジン固有の待ち時間
数値の位置づけ
主な根拠資料
- NVIDIA: Mastering LLM Techniques — Inference Optimization
- Berkeley: Roofline performance model
- llama.cpp: Tensor Encoding Schemes
- vLLM: Quantization formats and hardware support
- llama.cpp: llama-bench
- llama.cpp: CUDA benchmark
- llama.cpp: Multi-GPU
- vLLM: Parallelism and Scaling
- NVIDIA GenAI-Perf: TTFT and inter-token latency
- Qwen3: thinking / non-thinking mode
- Ollama: Thinking
