Transformer (attention layer)
Q
N
d
・ KT
d
N
QKT = = QKT
N
N
Attention : QKT
N
N
V
N
d
・ = N
d
N: sequence length, d: head dimension 実装上はQ,K,Vのサイズはともに [batch_size, num_heads, N, d]
Attention is all you need (arxiv)
Slide 9
Slide 9 text
QKT
Q, K, V
softmax(QKT/sqrt(d))V
https://github.com/huggingface/transformers/blob/main/src/transformers/models/llama/modeling_llama.py#L313
実装例
Slide 10
Slide 10 text
10
attention layerの困りごと
⾏列積の計算負荷が⾼い(正確には無駄が多い)。上式だと 2dN2 FLOPS の演算が必要
⼊⼒・出⼒トークン数 (N) が⻑いと、N2のオーダーで負荷がかかる
(無邪気にcontext lengthを⻑くすると詰む)
N
d
・ d
N
= N
N
実際はこの演算がhead数、レイヤー数、バッチサイズ数で掛け算される
23
そもそもKV cacheのメモリスペースを動的に割り当てられたら良いのに…
The sky is gray and ・・・ [EOS] 無駄 無駄 無駄 無駄 無駄 無駄 無駄 無駄 無駄 無駄 無駄
固定⻑のKV cache領域
1 2 3 200K
😣
Slide 24
Slide 24 text
24
PagedAttention
KV cacheを物理的に連続したメモリアドレスに配置するのではなく分割されたブロックに格納する。PagedAttention kernelはBlock
tableを参照して論理的(仮想的)に連続した値として読み込む。これによりcache間でのトークン⻑を揃える必要がなくなり動的なメ
モリ管理が可能になる。結果として2-4倍のスループットが向上が⾒込める
コンピュータで古くより使われてきた仮想メモリとページングのテクニックをKV cacheに応⽤
Efficient Memory Management for Large Language Model Serving with PagedAttention (arxiv)