検証のしくみ④:計算の量は増えるのに、なぜ時間は増えない?
「5個ぶんをまとめて計算するなら、結局5倍の手間では?」と思った人は鋭いです。掛け算の総量は、たしかに5個ぶんに増えます。 増えないのは「かかる時間」のほうです。
図は、横幅が「かかる時間」、面積が「計算の量」を表しています。前のページの5行が、上の段では横に5回並び、下の段では1つの箱に縦に積まれています。
理由1:GPUは、並んだ計算を同時にこなせる
LLMの計算の正体は、巨大な数の表(行列)どうしの掛け算です。入力は「トークンの数 × 数千個の数値」の表になっていて、モデルの重み(学習で身につけた数値のかたまり)を全トークンにまとめて掛けます。5トークン入れれば、5個ぶんの答えが一度に出ます。GPUは、こういう並んだ計算を同時に処理するのが得意な部品です。
1個ずつ書くときにこれができないのは、2個目の入力が1個目の答えで決まるからです。順番に待つしかありません。検証では、下書きのおかげで入力が最初から全部そろっているので、並べて一気に計算できます。
理由2:時間の多くは「重みを読む」ことに使われている
ターゲットの重みは数十億個の数値で、データにすると十数GB以上あります。1回の計算のたびに、これを全部メモリから読み出します。1トークンだけ計算するとき、GPUの計算能力は余っていて、時間を決めているのは主にこの読み出しだと言われています(実際には、ほかの細かい待ち時間も混ざります)。
- 1個ずつ5回書く → 重み全体を5回読む
- 5個まとめて検証 → 重み全体を読むのは1回。そこに5個ぶんの計算を載せる
エレベーターにたとえると、1人ずつ5往復するか、5人まとめて1往復するかの違いです。
ただし、載せすぎると遅くなる
GPUの余力には限りがあります。あとのページに出てくる「ブロックを長くしすぎると、かえって遅くなる」「同時に処理する依頼が増えると、速度向上が小さくなる」は、この限界が見えている例です。
(このページは論文の外の一般的な補足です。参考:SARATHI の3章に、1トークンずつの生成ではGPUの計算能力が余ることの測定があります)