← 概念辨析に戻る

Concept Contrast Fable

プリフィルとデコードの段階。一方は問題を丸ごと飲み込んで全量アテンションを一度計算し、もう一方は文字を一つずつ吐き出しながら進む

先に結論:プリフィル段階では入力シーケンスの全トークンを一度に処理し、それらのアテンションを並列計算して、最初のトークンの生成状態を出力する。デコード段階ではその後、各後続トークンを自己回帰的に一つずつ生成し、毎回新しいトークンの履歴に対するアテンションのみを計算する。二つの段階が合わさって一回の完全な推論呼び出しになるが、計算特性とボトルネックは全く異なる。

プリフィル段階では入力シーケンスの全トークンを一度に処理し、それらのアテンションを並列計算して、最初のトークンの生成状態を出力する。デコード段階ではその後、各後続トークンを自己回帰的に一つずつ生成し、毎回新しいトークンの履歴に対するアテンションのみを計算する。二つの段階が合わさって一回の完全な推論呼び出しになるが、計算特性とボトルネックは全く異なる。

寓話

駅道には二つのカーブがあり、最初のカーブでは車馬が一斉に山へ入り、二つ目のカーブでは一台ずつ吊り橋を渡る

北地に駅道があり、京城から辺関まで全八百里、途中で最も時間がかかるのは二つの区間だ。第一区間は龍門湾と呼ばれ、隊列は平原から突然、両側を山に挟まれた峡谷に入る。すべての車馬が谷口で並んで進み、前方の道は広く、十騎が並行できる——この区間は速く、激しく、一気に全隊を峡谷の向こうへ押し出す。第二区間は一線橋と呼ばれ、峡谷を出ると狭い木の吊り橋があり、一度に一騎しか渡れない。一騎ずつ続き、並行はできない。

駅道の调度官である老秦はこの道を十五年管理してきた。彼は時間を計算するとき、決して総距離では計算せず、龍門湾と一線橋を分けて計算した。龍門湾の所要時間は隊列の総重量と編成幅だけに依存する——編成が広く馬力が十分なほど速く通過できる。一線橋の所要時間は総長を各騎の速度で割ったものに依存する——編成とは無関係で、天気、風速、各騎の制動反応に関係する。

ある年、朝廷は駅道に速度向上の予算を割り当てた。老秦の最初の案はすべて龍門湾に集中していた。谷口を広げ、硬い地面を敷き、速い馬を十頭多く買う。三つの工事が終わると、龍門湾は二倍速くなった。しかし一線橋は動かなかった。年間全体の所要時間は一割しか減らなかった——龍門湾はもともと通過全行程のうち二割にも満たない区間だったのだ。良馬も駄馬も谷口では差が出るが、橋のたもとでは皆が列に並ぶ運命だった。

二年目は方案を替え、予算を二つに分けた。第一の資金は龍門湾の路面を舗装し直すため、第二の資金は一線橋に滑軌を取り付け、木の吊り橋を二騎並行の小さなアーチ橋に替えるためだった。二つの工事は同時に進み、年間の全体所要時間は四割減った。老秦は年末の帳簿で新しく来た駅務主管に語った。龍門湾はバッチ処理の並行段階、一線橋は一つずつ通過する直列段階だ。速度向上は二段に分けて見ねばならない。片端だけに金を燃やせば、残りはすべて浪費になる。

老秦はこの経験を駅道の手引きに書き込んだ。まず隊全体が並んで進める広い道があり、次に一騎ずつしか通れない狭い橋がある。広い道では総重量、編成、馬力を見る。狭い橋では各騎の蹄の間隔を見る。前の区間は一度により多くを押し通すことを追求し、後の区間は一歩ごとに途切れないことを追求する。

老秦は後に、沿線の各駅に路線図を一枚ずつ掛けた。図には龍門湾は「並行・スループット優先」、一線橋は「直列・遅延優先」と記されていた。彼は駅卒に言った:隊伍がどの区間で詰まっているかを見て、その区間の戦略で調整せよ。谷口を修繕する方法で橋を修繕してはならない、橋は馬力を認めない。

後に新しい调度官が引き継ぎに来て、老秦に第一線の橋はまだ遅すぎると愚痴った。老秦は記録を開いた。昨年お前たちが橋に投じた予算はすべて、騎手が橋に上がるたびの提示灯を替えただけだ。それは龍門湾でやるべきこと——並列区間こそ事前に馬を用意する必要がある。直列区間が本当に必要とするのは、橋を渡る間隙を最小限にし、各馬が蹄を下ろすとき橋面が反発しないようにすることだ。

プリフィル段階

推論の最初の段階。入力の全トークンが一度にモデルに入り、注意と中間状態を並列計算する。計算集約的でスループット優先、ボトルネックは計算能力。最初に生成されるトークンの隠れ状態を出力する。

デコード段階

推論の第2段階では、新しいトークンを1つずつ自己回帰的に生成する。各回で新しいトークンの履歴に対する注意だけを計算する。メモリアクセスが集中し、レイテンシに敏感で、ボトルネックはKVキャッシュの読み書きにある。

物語の対応

  • 龍門湾谷口:prefill——入力を一度に並列処理し、スループット志向
  • 一線橋木懸橋:decode——トークンを一つずつ直列生成、レイテンシ志向
  • 老秦は時間を二段階で計算する:prefill と decode の計算特性とボトルネックを分離する
  • 初年度は龍門湾だけに投資:prefill は最適化したが decode が足を引っ張る——全体の遅延改善は限定的
  • 二年目は両方を投入:prefill と decode をそれぞれ最適化して初めて全体の高速化を実現
  • 路線図は並列と直列を示す:システム監視で prefill と decode の指標パネルを分ける
  • 指示灯の浪費:prefill の最適化手法で decode を最適化しようとするのは、まったく的外れ

推論性能の最適化に落とし込む

推論遅延を調べるときは、まずボトルネックが prefill か decode かを切り分ける。Prefill が遅い場合は初回トークン遅延が高い形で現れる——入力が長いほど遅くなり、最適化の方向はバッチ処理、並列計算、VRAM 帯域である。Decode が遅い場合は後続の各トークンの間隔が長い形で現れる——最適化の方向は KV キャッシュのレイアウト、メモリアクセスパターン、投機的デコーディングである。GPU を買うとき、業務が長い入力と短い出力を主とする場合(翻訳、要約など)は prefill の計算能力がより重要であり、長い出力を主とする場合(コード生成、執筆など)は decode のメモリ帯域とキャッシュアーキテクチャを先に見るべきである。二つの段階は同じハードウェア上で動くが、カードを買うときはどちらの段階が金を食っているのかをはっきり見極めなければならない。

京ICP备2026014272号