教科書 › 第III部 深層学習:何の前提を足すか
CHAPTER 11

作ったものを使うとき ── 推論の値段

★ 会員16分

第8章は学習の予算、第9章は人に合わせる工程、第10章は外から引く仕組みでした。どれも「どう作るか」の話です。

この章は使うときに払うものを数えます。学習は一度きりですが、推論は応答のたびに起きます。どこに値段が付いているかが分かると、速くする方法が2つしかないことも分かります。

1. 1トークンの値段と、学習に並ぶ回数

第8章で C≈6NDC \approx 6ND を数えたとき、内訳は前向き 2N2N・逆向き 4N4N でした。推論は前向きだけなので、1トークンあたり

Ctoken  ≈  2NC_{\text{token}} \;\approx\; 2N
(1)

N=7×109N = 7\times10^{9} なら1トークンで 1.4×10101.4\times10^{10} FLOPs。1,000トークンの応答で 1.4×10131.4\times10^{13} です。

学習のほうは 6ND6ND で一度きり。だから「推論の合計が学習に並ぶ」のは、応答が LL トークンのとき

6ND2NL  =  3DL\frac{6ND}{2NL} \;=\; \frac{3D}{L}
(2)

回です。NN が消えるのが面白いところで、モデルの大きさに依りません。D=1012D = 10^{12} なら

応答の長さ LL 学習に並ぶ応答数
100 3.0×10103.0\times10^{10}
1,000 3.0×1093.0\times10^{9}
10,000 3.0×1083.0\times10^{8}
学習は一度、推論は毎回。$3D/L$ 回の応答で逆転します。 作るときの予算(第8章)だけを見ていると、使うときの合計を見落とします。

2. 作り直さないために置いておく ── KVキャッシュ

自己回帰は1トークンずつ出します。素直にやると、tt 番目を出すたびに先頭から全部計算し直すことになります。

どれだけ無駄かは数えられます。TT トークン出すのに、tt 番目で tt トークンぶんの前向きを回すなら合計 T(T+1)/2T(T+1)/2。取っておけば TT です。

TT 作り直しあり 取っておく 倍率
1,024 5.25×1055.25\times10^{5} 1,024 513倍
8,192 3.36×1073.36\times10^{7} 8,192 4,097倍
131,072 8.59×1098.59\times10^{9} 131,072 65,537倍

だから過去のトークンの KK と VV(第6章)を取っておきます。これがKVキャッシュです。代わりに記憶を使います。KK と VV の2本、層ごと、トークンごと、dd 次元、1要素 bb バイトで

bytes  =  2×L層×T×d×b\text{bytes} \;=\; 2 \times L_{\text{層}} \times T \times d \times b
(3)

層 dd TT bb 大きさ
32 4,096 8,192 2 4.29 GB
32 4,096 131,072 2 68.7 GB
80 8,192 8,192 2 21.5 GB
32 4,096 8,192 1 2.15 GB

1トークンあたりは層32・dd=4,096・2バイトで 0.524 MB。同時に8人を相手にすれば、TT=8,192 でも 34.4 GB がキャッシュだけで要ります。

長い文脈の値段は、第6章の $T^2$(計算)だけではありません。$T$ に比例する記憶でも付きます。しかも計算と違い、こちらは同時に相手をする人数ぶんかかります。

3. 速さを決めているのは計算ではなく読み出し

1トークン作るには、重みを全部1回読む必要があります。NN 個の重みが1個 bb バイトなら NbNb バイト読んで、計算は 2N2N FLOPs。割ると

2NNb  =  2bFLOP/byte\frac{2N}{Nb} \;=\; \frac{2}{b} \quad \text{FLOP/byte}
(4)

16ビット(2バイト)なら 1 FLOP/byte。1バイト読むあいだに1回しか掛け算しません。

同時に BB 件まとめて進めると、重みは1回読めば全員に使えるので

重み 同時 BB FLOP/byte
16ビット 1 1.0
16ビット 8 8.0
16ビット 64 64.0
8ビット 1 2.0
4ビット 1 4.0
4ビット 64 256.0
速くする道は2つしかありません。①読む量を減らす(ビット数を下げる)か、②1回読んだ重みでもっと計算する(まとめて進める)か。どちらも「計算を速くする」話ではありません。

実機で読み出しと計算のどちらが先に詰まるかは機種によります。本書で出せるのは比そのものだけで、どの機械でどちらが律速かは測っていません。

4. 読む量を減らす ── 量子化

重みを bb ビットに丸めます。いちばん素朴なやり方は、ある範囲の最大値 mm を取り、2b−1−12^{b-1}-1 段に等間隔で割ることです。

step  =  m2b−1−1\text{step} \;=\; \frac{m}{2^{b-1}-1}
(5)

丸め誤差が ±step/2\pm\text{step}/2 に一様に散るなら、分散は step2/12\text{step}^2/12。確かめます。標準正規の重み 4,096 個 × 64 行で測りました。

ビット 目盛りの間隔 理論 step/12\text{step}/\sqrt{12} 実測 rmse
8 0.0298 0.00861 0.00865
6 0.1222 0.03528 0.03536
4 0.5413 0.15625 0.15668
3 1.2630 0.36459 0.36589
2 3.7889 1.09377 0.90824

8〜3ビットは理論と0.5%以内で合い、2ビットだけ外れます。理由も測れました。2ビットだと目盛りは {−m,0,+m}\{-m, 0, +m\} の3段しかなく、93.9% の重みが0に丸められます。「誤差が一様に散る」という前提のほうが先に壊れているのです。

スケールを誰と共有するか

上の表は、1行4,096個で最大値を1つだけ取りました。128個ごとに取り直すと

ビット まとめて1つ 128個ごと
8 0.00865 0.00646
4 0.15668 0.11730
3 0.36589 0.27383

どのビット数でも 1.34倍 良くなります。ここまでは「少し得」という程度の話です。

§

この先は会員限定です

全42章と全ラボが読み放題。月額¥490、いつでも解約できます。

コメント

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