Чӣ тавр cache-и KV дар инференси трансформатори аўтарэгрэсивӣ амалӣ мешавад?
sobes.tech AI
Ҷавоб аз AI
Дар трансформаторҳои авторегрессивӣ, дар вақти инференс муҳим аст, ки ҳисобҳоро самаранок истифода барем, то тамоми пайдарпайро аз нав ҳисоб накунем. Барои ин, истифода мешавад KV-cache, ки калидҳо (Key) ва арзишҳо (Value) -ро аз қабатҳои диққат (self-attention) нигоҳ медорад.
Ҳикоя ин аст, ки вақте ки мо токени навро мебарорем, аллакай калидҳо ва арзишҳоро барои ҳамаи токенҳои қаблӣ ҳисоб кардаем. Ба ҷои ҳисоб кардани онҳоро такрор, онҳоро дар ёддошт (cache) нигоҳ медорем ва ҳангоми ҳисоб кардани диққат барои токени нав, аз ин cache истифода мебарем.
Ин тақрибан чунин кор мекунад:
- Барои ҳар як қабати трансформатор, ҳангоми коркарди токен, калидҳо ва арзишҳо дар буферҳои алоҳида нигоҳ дошта мешаванд.
- Вақте ки токени нав мебарорем, танҳо калидҳо ва арзишҳо барои он ҳисоб карда мешаванд ва бо онҳое, ки аллакай нигоҳ дошта шудаанд, пайваст карда мешаванд.
- Механизми диққат истифода мекунад маҷмӯи пайвастшудаи калидҳо ва арзишҳоро барои ҳисоб кардани контекст.
Ин ба таври назаррас суръат мебахшад, ки мураккабии ҳисобро аз квадратичӣ ба хаттӣ дарозии пайдарпай коҳиш медиҳад.
Масалан, барои як қабат:
# 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-cache механизмест барои нигоҳ доштани калидҳо ва арзишҳои миёнаравӣ, ки суръатбахшии истеҳсоли пайдарпайро дар трансформаторҳо таъмин мекунад.