Sobes.tech
Middle — Senior

Как се реализира KV кешът при инференса на авторегресивен трансформър?

sobes.tech AI

Отговор от AI

В авторегресивните трансформатори по време на inference е важно да се използват изчисленията ефективно, за да не се пресмята цялата последователност отново. За това се използва KV кеш, който съхранява ключовете (Key) и стойностите (Value) от слоевете на вниманието (self-attention).

Идеята е, че при генериране на следващия токен вече сме изчислили ключовете и стойностите за всички предишни токени. Вместо да ги пресмятаме отново, ги запазваме в паметта (кеш) и при изчисляване на вниманието за новия токен използваме този кеш.

Това работи приблизително така:

  • За всеки слой на трансформатора, при обработката на токен, ключовете и стойностите се съхраняват в отделни буфери.
  • При генериране на следващия токен, се изчисляват само ключовете и стойностите за него, след което се обединяват с вече запазените.
  • Механизмът на вниманието използва обединения набор от ключове и стойности за изчисляване на контекста.

Това значително ускорява inference, като намалява сложността от квадратична по дължина на последователността до линейна.

Пример за псевдокод за един слой:

# kv_cache съхранява ключовете и стойностите за предишните токени
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)

Така KV кешът е механизъм за съхраняване на междинните ключове и стойности за ускоряване на последователната генерация в трансформаторите.