作ったものを使うとき ── 推論の値段
第8章は学習の予算、第9章は人に合わせる工程、第10章は外から引く仕組みでした。どれも「どう作るか」の話です。
この章は使うときに払うものを数えます。学習は一度きりですが、推論は応答のたびに起きます。どこに値段が付いているかが分かると、速くする方法が2つしかないことも分かります。
1. 1トークンの値段と、学習に並ぶ回数
第8章で を数えたとき、内訳は前向き ・逆向き でした。推論は前向きだけなので、1トークンあたり
なら1トークンで FLOPs。1,000トークンの応答で です。
学習のほうは で一度きり。だから「推論の合計が学習に並ぶ」のは、応答が トークンのとき
回です。 が消えるのが面白いところで、モデルの大きさに依りません。 なら
| 応答の長さ | 学習に並ぶ応答数 |
|---|---|
| 100 | |
| 1,000 | |
| 10,000 |
2. 作り直さないために置いておく ── KVキャッシュ
自己回帰は1トークンずつ出します。素直にやると、 番目を出すたびに先頭から全部計算し直すことになります。
どれだけ無駄かは数えられます。 トークン出すのに、 番目で トークンぶんの前向きを回すなら合計 。取っておけば です。
| 作り直しあり | 取っておく | 倍率 | |
|---|---|---|---|
| 1,024 | 1,024 | 513倍 | |
| 8,192 | 8,192 | 4,097倍 | |
| 131,072 | 131,072 | 65,537倍 |
だから過去のトークンの と (第6章)を取っておきます。これがKVキャッシュです。代わりに記憶を使います。 と の2本、層ごと、トークンごと、 次元、1要素 バイトで
| 層 | 大きさ | |||
|---|---|---|---|---|
| 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・=4,096・2バイトで 0.524 MB。同時に8人を相手にすれば、=8,192 でも 34.4 GB がキャッシュだけで要ります。
3. 速さを決めているのは計算ではなく読み出し
1トークン作るには、重みを全部1回読む必要があります。 個の重みが1個 バイトなら バイト読んで、計算は FLOPs。割ると
16ビット(2バイト)なら 1 FLOP/byte。1バイト読むあいだに1回しか掛け算しません。
同時に 件まとめて進めると、重みは1回読めば全員に使えるので
| 重み | 同時 | 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 |
実機で読み出しと計算のどちらが先に詰まるかは機種によります。本書で出せるのは比そのものだけで、どの機械でどちらが律速かは測っていません。
4. 読む量を減らす ── 量子化
重みを ビットに丸めます。いちばん素朴なやり方は、ある範囲の最大値 を取り、 段に等間隔で割ることです。
丸め誤差が に一様に散るなら、分散は 。確かめます。標準正規の重み 4,096 個 × 64 行で測りました。
| ビット | 目盛りの間隔 | 理論 | 実測 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ビットだと目盛りは の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倍 良くなります。ここまでは「少し得」という程度の話です。
コメント
コメントにはログインが必要です