JA EN
体系数値計算
·★ 会員·10分で読めます

行列積のコスト — AIの計算はほぼここに帰着する

なぜGEMMが全てなのか。O(n³)の内訳、メモリ帯域と演算強度、GPUが速い理由、タイル化の直感。最後に、AIモデルの学習・推論に必要なFLOPsを自分の手で見積もれるところまで持っていきます。

対象textタスクnumerical

比喩: 加工機とトラック

工場に、猛烈に速い加工機を1台入れたとします。1秒で1000個の部品を削れる。ところが材料を運ぶトラックは1秒に10個しか届けられません。この工場の生産量は、加工機の性能ではなくトラックの本数で決まります。加工機は99%の時間、手を止めて待っている。

現代の計算機はこの工場そのものです。演算器は猛烈に速く、メモリからデータを運ぶ帯域はそれに追いつきません。だから「何回計算するか」だけを数えても実行時間は当たらず、何バイト運ぶかを同時に見る必要があります。

そしてAIの計算時間は、その大半が1種類の演算に集中しています。行列積です。

なぜ行列積が全てなのか

Transformerの中身を分解すると、出てくるのはほとんど行列積です。Q・K・Vへの射影、注意スコアの計算、注意の重み付き和、出力射影、そしてFFNの2枚の線形層。畳み込みも、im2colやそれに類する変形で行列積に落として実行されるのが普通です。

だからライブラリの世界では、この演算に GEMM(General Matrix Multiply, 一般行列積)という専用の名前が付き、何十年も最適化され続けてきました。「AIを速くする」という工学課題の実体は、かなりの部分が「GEMMを速くする」ことです。

O(n3)O(n^3) の内訳

m×km \times k の行列 AAk×nk \times n の行列 BB を掛けて m×nm \times nCC を作ります。出力の1マスの定義はこれです。

Cij=p=1kAipBpjC_{ij} = \sum_{p=1}^{k} A_{ip} B_{pj}
(1)

CCiijj 列は、AAii 行目と BBjj 列目を端から掛けて足したもの」——つまり内積1回です。CC にはマスが mnmn 個あり、1マスにつき掛け算 kk 回と足し算がほぼ kk 回。掛け算と足し算を1回ずつ数えると、必要な演算回数は

FLOPs=2mkn\text{FLOPs} = 2\,m\,k\,n

つまりこの式は「出力のマスの数 mnmn × 1マスを埋めるのに要る積和の回数 kk × 積和1回で2演算」を並べて掛けただけのものです。難しいことは何も起きていません。

正方行列(m=k=nm = k = n)なら 2n32n^3 です。nn が2倍になれば計算量は8倍。これが O(n3)O(n^3) の中身で、AIモデルの「計算量」と呼ばれるものの正体でもあります。

数を入れると規模感が出ます。n=4096n = 4096 の正方行列積は約 1.4×10111.4 \times 10^{11} FLOPs——たった1回の掛け算に1000億回超の演算が要る。Transformerの層はこれを何十枚も重ね、それをトークンごと、層ごとに繰り返します。

行列積の原子が内積であることは、手で動かして掴んでおく価値があります。

FIG 1内積は「1本の行と1本の列」を1つの数に潰す操作。GEMMはこれを m×n 回、それぞれ長さ k で繰り返す

ここまでが演算回数の話です。しかし実行時間は 2n32n^3 だけでは決まりません。冒頭のトラックの話——運ぶ側の制約が、ここから効いてきます。

演算強度: 1バイト運ぶごとに何回計算できるか

冒頭の工場の話を式にします。演算強度(arithmetic intensity)を次で定義します。

I=実行するFLOPsメモリから運ぶバイト数I = \frac{\text{実行するFLOPs}}{\text{メモリから運ぶバイト数}}
(2)

つまり、分子が「どれだけ働いたか」、分母が「そのために何バイト運んだか」。II はデータの燃費だと思ってください。「運んだデータ1バイトあたり、何回の演算に使い回せたか」という比率です。これが小さい演算は、演算器がいくら速くても帯域で頭打ちになります(メモリ律速)。大きければ演算器の性能をそのまま使えます(演算律速)。実際に出る性能はおおよそ次で押さえられます。

つまり、実際に出る速さは「演算器が出せる上限」と「運べるデータで許される上限」の低いほうで頭打ちになる、ということです。前者は機械の限界、後者は「帯域で運べる量 × 1バイトあたりの仕事量」。この2本の直線で性能の上限を描いたものがルーフラインモデルです。

この先にあるもの

§

ここから先は会員限定です

解説記事371本・教科書26章・学生モード48単元・論文精読6本が、月額¥490ですべて読み放題になります。新しい解説は毎日3本ずつ増えます。いつでも解約でき、解約後も期間の終わりまで読めます。

会員の方はログインすると続きが表示されます

コメント

コメントにはログインが必要です