Lesson 1 — AI推論の基本:Prefill vs Decode

推論 2026-02-27 軸: 技術 / 金流

AIモデルが「回答を生成する」プロセスの内部構造を理解する。Prefill(入力処理)とDecode(トークン生成)の違い、主要メトリクスの意味、そしてなぜ「速さ」と「コスト」がトレードオフになるのかを図解で学ぶ。

1. 推論(Inference)とは何か

一言で言うと

推論とは、学習済みのAIモデルにユーザーの質問(プロンプト)を入力し、回答(テキスト)を生成するプロセス。ChatGPTやClaudeに質問するたびに、裏側で「推論」が走っている。

推論の全体像
ユーザーの質問
(プロンプト)
Prefill
入力を一括処理
Decode
1トークンずつ生成
回答テキスト
(レスポンス)
← 学習(Training)とは別のプロセス。学習は数週間、推論は数秒。 →

💻 プログラミングで例えると

// Training = コンパイル(一度だけ、時間がかかる)
model = train(data, epochs=100000)  // 数週間〜数ヶ月

// Inference = 実行(毎回、高速)
answer = model.generate("半導体の将来は?")  // 数秒

推論は2つのまったく性質の異なるフェーズから成る。これが以降のすべての話の土台になる。

2. Prefill(プリフィル)— 入力を一括処理する

Prefillとは

ユーザーが入力したプロンプトのトークンをすべて同時に並列処理するフェーズ。全入力を読み込み、各トークン間の関係(Attention)を計算する。

Prefill: 全トークンを並列処理
入力: 半導体 将来 どう なる
↓ 全7トークンを同時に処理 ↓
KV Cache: K₁V₁ K₂V₂ K₃V₃ K₄V₄ K₅V₅ K₆V₆ K₇V₇

Prefillの特徴

ボトルネック
計算量(Compute-bound)
理由
全トークン間のAttention計算 = O(n²) の行列演算。GPUの演算コアをフル稼働させる。
ユーザー体感
「送信」を押してから最初の文字が出るまでの待ち時間(TTFT)

3. Decode(デコード)— 1トークンずつ生成する

Decodeとは

Prefillで作ったKV Cacheを使い、出力トークンを1つずつ逐次的に生成するフェーズ。新しいトークンが生成されるたびに、KV Cacheが1行ずつ追加されていく。

Decode: 1トークンずつ順番に生成
ステップ1: AI ← KV Cache全体を読み込み → 次のトークンを1つ予測
ステップ2: AI 半導体
ステップ3: AI 半導体
ステップ4: AI 半導体 成長
ステップ5: AI 半導体 成長 する

🧠 Decodeの特徴

ボトルネック
メモリ帯域幅(Memory-bandwidth-bound)
理由
1トークン生成するだけでも、モデル全体の重み + KV Cache全体をメモリから読み出す必要がある。計算量は少ないが、データの移動量が膨大。
ユーザー体感
文字がポツポツ出てくる速さ(tok/s/user)

4. Prefill vs Decode — なぜ分けて考えるのか

Prefill

処理方式
全トークン並列
ボトルネック
計算量
GPUの使い方
演算コアをフル回転
メトリクス
TTFT
例え
📖 本を一気読みして内容を記憶する

🧠 Decode

処理方式
1トークンずつ逐次
ボトルネック
メモリ帯域幅
GPUの使い方
メモリ→演算コアへのデータ転送待ち
メトリクス
TPOT / tok/s/user
例え
✍️ 記憶を頼りに一文字ずつ書く

📐 なぜこの区別が重要か

  • Prefillには高い演算性能(FLOPS)が効く → GPUの性能が直接反映
  • Decodeには高いメモリ帯域幅(GB/s)が効く → HBMの性能が直接反映
  • 2つの性質が異なるため、同じGPUで両方を同時に動かすと干渉が起きる(→ Lesson 9で解説)

5. KV Cache — なぜメモリが爆発するか

KV Cacheとは

Prefillで計算した各トークンの「Key(鍵)」と「Value(値)」のペアを保存したもの。Decodeの各ステップで、新しいトークンが過去の全トークンを「振り返る」ために使う。KV Cacheがないと、毎ステップで全入力を再計算することになる。

KV Cache: 出力が増えるとメモリ消費が線形に増加
入力 7tok
7
+100 tok
107
+500 tok
507
+1024 tok
1,031
+8192 tok
8,199
DeepSeek R1(671Bパラメータ): 8192トークンのKV Cache ≈ 500MB(FP8の場合)

KV Cacheの問題は「メモリを食う」だけでなく、同時に対応できるユーザー数を制限すること。HBM(高帯域メモリ)の容量がそのまま「何人同時に相手できるか」の上限になる。

📐 KV Cacheサイズの概算

  • KV Cache = 2 × レイヤー数 × ヘッド数 × ヘッド次元 × シーケンス長 × バイト数
  • DeepSeek R1: 61レイヤー × FP8 → 約 500MB / 8192トークン
  • 100ユーザー同時 = 50GB のHBMがKV Cacheだけで消える

6. 主要メトリクス — InferenceXダッシュボードの「軸」

InferenceXダッシュボードでは、推論性能を複数の軸で測定する。まずは4つの基本メトリクスを理解しよう。

tok/s(トークン毎秒)

tok/s = 全ユーザーの生成トークン合計 / 秒

システム全体の総スループット。サーバー事業者にとっての「生産量」。この値が高いほど、同じハードウェアで多くのリクエストを捌ける = コストが下がる

例: 10,000 tok/s = 1秒間に1万トークンを全ユーザーに分配

tok/s/user(ユーザー毎秒トークン)

tok/s/user = 1 / TPOT

1人のユーザーが体感するレスポンス速度。InferenceXでは「インタラクティビティ」と呼ぶ。この値が高いほど文字の出が速い。

例: 60 tok/s/user ≈ 人間の読解速度とほぼ同じ

TTFT(Time To First Token)

TTFT = Prefill完了までの時間

「送信」を押してから最初の文字が表示されるまでの待ち時間。入力が長いほどTTFTは長くなる。

例: TTFT 0.5秒 = 送信後0.5秒で最初の文字が出る

TPOT(Time Per Output Token)

TPOT = 1トークン生成にかかる時間

Decodeフェーズの速度。tok/s/userの逆数。ユーザー体験の核心

例: TPOT 16.7ms = 60 tok/s/user(1/0.0167 ≈ 60)
tok/s vs tok/s/user の違い
システム全体: 300 tok/s(3人同時利用)
👤
100 tok/s/user
👤
60 tok/s/user
👤
40 tok/s/user
同じシステムでも、ユーザーごとの体感速度は異なる

トレードオフの核心

tok/s(スループット)と tok/s/user(インタラクティビティ)はトレードオフの関係にある。

  • ユーザーを多く詰め込む → 1人あたりの速度は落ちるが、総スループットは上がる → コストが下がる
  • 1人あたりの速度を上げる → 同時ユーザー数を減らす必要 → コストが上がる

このトレードオフの「どこまで行けるか」の限界線がパレートフロンティア(Lesson 10 で解説)。

7. 経済メトリクス — コストとエネルギー

$/Million tokens(百万トークンあたりコスト)

CPMT = TCO / 生成トークン数 × 10⁶

推論サービスの単位経済性。API利用料の原価に直結する。

実データ(DeepSeek R1 @ 36 tok/s/user):
入力: $1.35/M tokens | 出力: $5.40/M tokens

perf/TCO(性能÷総所有コスト)

perf/TCO = tok/s / (ハード償却+電気代+運用費)

コスト効率。同じ予算でどれだけのトークンを生成できるか。ハードウェア選定の最重要指標。

GB200 NVL72 は H100 の約55倍の perf/TCO を実現

picoJoules/token(pJ/tok)

pJ/tok = 総消費電力 / 生成トークン数

エネルギー効率。データセンターの電力コストと環境負荷を示す。

新世代GPU → pJ/tokが桁違いに改善 → 電力問題の緩和

TCO(Total Cost of Ownership)

TCO = ハード償却 + 電力 + 冷却 + 場所代 + 運用人件費

ハードウェアの購入価格だけでなく、3〜5年の運用期間全体の総コスト。GPU本体は全体の一部に過ぎない。

GPU価格が2倍でもperf/TCOが3倍なら、トータルでは安い

🧠 セルフチェック

Q1: 推論の「Prefill」フェーズのボトルネックは何か?

回答を見る

計算量(Compute-bound)。全入力トークン間のAttention計算(O(n²)の行列演算)がボトルネック。GPUの演算コア(FLOPS)の性能が直接効く。

Q2: 「tok/s」と「tok/s/user」の違いを一言で説明せよ。

回答を見る

tok/s はシステム全体のスループット(全ユーザー合計の生成量)。tok/s/user は1人のユーザーが体感する速度。tok/s が高くても、ユーザーを大量に詰め込んでいれば tok/s/user は低くなる。

Q3: KV Cacheがメモリを大量に消費すると、実運用上どんな問題が起きるか?

回答を見る

同時に対応できるユーザー数が制限される。HBMの容量は有限なので、1ユーザーあたりのKV Cache(DeepSeek R1で約500MB/8192tok)× 同時ユーザー数がHBM容量を超えると、新しいリクエストを受けられない。100ユーザー同時 = 50GB がKV Cacheだけで消える。

Q4: tok/s/user = 60 のとき、TPOT(1トークンあたり生成時間)は何ミリ秒か?

回答を見る

約16.7ms。TPOT = 1 / tok/s/user = 1/60 ≈ 0.0167秒 = 16.7ms。

Q5: 推論コストを下げるには「tok/s を上げる」のと「tok/s/user を上げる」のと、どちらが直接的に効くか? 理由も述べよ。

回答を見る

tok/s を上げる方が直接的にコストを下げる。$/Million tokens = TCO ÷ 生成トークン数 × 10⁶ なので、同じハードウェアコスト(TCO)でトータルの生成量(tok/s)が上がれば、1トークンあたりのコストは下がる。一方、tok/s/user はユーザー体験の質に影響するが、これを上げると同時ユーザー数が減り、むしろ $/M tokens は上がる方向に働く。これがスループットとインタラクティビティのトレードオフ。

📖 用語集

用語説明
Inference(推論)学習済みモデルで回答を生成するプロセス
Prefill入力トークンを一括並列処理するフェーズ。compute-bound
Decode出力トークンを1つずつ生成するフェーズ。memory-bandwidth-bound
KV CachePrefillで計算したKey/Valueペアの保存領域。Decode時に参照
tok/sシステム全体の1秒あたりトークン生成数(スループット)
tok/s/user1ユーザーが体感する1秒あたりトークン速度(インタラクティビティ)
TTFTTime To First Token — 最初のトークンが出るまでの待ち時間
TPOTTime Per Output Token — 1トークンの生成時間。tok/s/userの逆数
TCOTotal Cost of Ownership — ハード償却+電力+運用の総コスト
HBMHigh Bandwidth Memory — GPUに搭載される高速大容量メモリ