CPUは一つひとつの仕事を賢くこなす部品で、GPUは小さな計算を大量に並べて処理する部品。そう聞くと、少し変な感じがしないでしょうか。賢い人が少数で丁寧にやるより、単純な人が大量に並んだほうがAIでは強い。なぜそんなことが起きるのか。
以前、GPUが速いのは行列のかけ算が「独立」だからという話を書きました。あの記事では「なぜ同時に計算できるのか」を見ました。今回はその先で、「なぜ1個ずつ賢く速いより、大量に流せるほうが効くのか」を見てみます。
速い、には二種類ある
「速い」と聞くと、1件の仕事がどれだけ短時間で終わるかを思い浮かべます。ボタンを押してから結果が返るまでが短い。これはレイテンシ、つまり1件あたりの待ち時間の短さです。
でも、大量の仕事をさばく場面では、もう一つの速さがあります。1秒あたりに何件処理できるか。これはスループット、つまり流せる量の多さです。
CPUは、1件の処理をなるべく速く終わらせる方向に強い部品です。GPUは、1件ずつの器用さではCPUに負けることがあっても、同じ形の仕事を大量に並べて流すのが得意です。AIの計算では、この「大量に流す」が効きます。
レジが一つ速い店と、レジが大量にある店
コンビニのレジで考えてみます。ものすごく手際のいい店員が1人いる店と、普通の店員が20人いる店。客が1人だけなら、手際のいい1人のほうが気持ちよく終わるかもしれません。
でも、店の前に何百人も並んでいるなら話が変わります。1人の店員がどれだけ速くても、同時に相手できる客は1人です。20人の店員がいれば、一人ひとりの処理が少し遅くても、列全体はどんどん前に進みます。
AIの計算でも似たことが起きます。大きな行列のかけ算は、小さな積和を大量に抱えています。客が何百人も並んでいるような状態です。ここでは「1件をどれだけ鋭くこなすか」より、「同時にどれだけ抱えて流せるか」が効いてきます。
GPUがAIで強い理由を、並列化率という別の式から見た記事もあります。
待ち行列の式で読んでみる
この違いを、待ち行列の式で読んでみます。待ち行列は、レジ待ちや通信待ちのように、仕事が並んで処理される仕組みを扱う数学です。代表的な関係に、リトルの法則があります。
$$L = \lambda W$$
$L$ は、処理中や待機中として同時にシステムの中にいる仕事の数です。レジなら、店内で並んでいる客と会計中の客を合わせた数です。$\lambda$ は、単位時間あたりに入ってくる仕事の数です。1秒あたり何件来るか、という到着の速さです。$W$ は、1件の仕事がシステムの中にいる時間です。待って、処理されて、出ていくまでの時間です。
この式は、「同時に抱えている数」は「入ってくる速さ」と「1件が中にいる時間」の掛け算で決まる、と読めます。
AIの計算にそのままレジの式を当てはめる、というより、この関係で設計思想の違いを見てみます。CPUは $W$、つまり1件あたりの時間を短くする方向に強い。一方GPUは、たくさんの仕事を同時に抱えて、$L$ を大きくできる方向に強い。大量の小さな計算が最初から存在しているなら、$L$ を大きく取れる部品のほうが、全体として流せる量を増やしやすい。

ここでのポイントは、1件あたりの処理時間だけを見ても全体の速さは決まらない、ということです。列全体をさばく速さは、同時に何件抱えられるかにも強く左右されます。
もう少し言えば、GPUは一つの仕事を人間の店員のように順番待ちで処理しているわけではありません。ここで使っているレジのたとえは、待ち行列の式が持つ「中に抱える数」「流入の速さ」「滞在時間」の関係を、計算機の設計思想に読み替えるためのものです。厳密な実装説明ではなく、レイテンシとスループットを切り分けるための地図だと思ってください。
賢さより、流せる量が効く場面
もちろん、CPUが弱いという話ではありません。複雑な分岐が多い処理や、1件ずつ順番に判断しなければならない処理では、CPUの強さが効きます。GPUが得意なのは、同じ形の小さな仕事が大量にあり、それらをまとめて流せる場面です。
AIの学習や推論には、この条件に合う計算がたくさんあります。だから「賢い少数」より「平凡な大量」が勝つことがある。ここで勝っているのは、1件の器用さではなく、流れを詰まらせずに処理し続ける力です。
次に「GPUが足りない」という話を聞いたとき、それは単に計算機の数が足りないという話ではなく、同時に流したい仕事の量が、それを受け止める幅を超えているという話かもしれません。そう見ると、AIの速さは「1個の頭の良さ」ではなく、「どれだけ詰まらせずに流せるか」の問題として見えてきませんか?
