Sobes.tech
Middle — Senior

Kako se implementira KV keš u inferenciji autoregresivnog transformatora?

sobes.tech АИ

Одговор од АИ

U autoregresivnim transformatorima, tokom inferencije, važno je efikasno koristiti računanja kako se cela sekvenca ne bi ponovo računala od početka. Za to se koristi KV keš, koji čuva ključeve (Key) i vrednosti (Value) iz slojeva samostalne pažnje (self-attention).

Ideja je da smo već izračunali ključeve i vrednosti za sve prethodne tokene prilikom generisanja sledećeg tokena. Umesto da ih ponovo računamo, čuvamo ih u memoriji (keš) i prilikom računanja pažnje za novi token koristimo taj keš.

Ovo funkcioniše otprilike ovako:

  • Za svaki sloj transformatora, tokom obrade tokena, ključevi i vrednosti se čuvaju u odvojenim baferima.
  • Pri generisanju sledećeg tokena, računaju se samo ključevi i vrednosti za njega, a zatim se kombinuju sa već sačuvanim.
  • Mehanizam pažnje koristi objedinjeni skup ključeva i vrednosti za računanje konteksta.

Ovo značajno ubrzava inferencu, smanjujući složenost iz kvadratne na linearnu u dužini sekvence.

Primer pseudokoda za jedan sloj:

# kv_cache čuva ključeve i vrednosti prethodnih tokena
new_key, new_value = compute_kv(new_token)
kv_cache.keys = concatenate(kv_cache.keys, new_key)
kv_cache.values = concatenate(kv_cache.values, new_value)
output = attention(query=new_key, keys=kv_cache.keys, values=kv_cache.values)

Tako, KV keš je mehanizam za čuvanje međuzavršnih ključeva i vrednosti za ubrzavanje sekvencijalne generacije u transformatorima.