Sobes.tech
Middle — Senior

როგორ ხორციელდება KV-კეში ავტორეგრესიული ტრანსფორმატორის ინფერენციაში?

sobes.tech AI

პასუხი AI-სგან

ავტომრეგრესიული ტრანსფორმატორების დროს, ინფერენციისას მნიშვნელოვანია ეფექტურად გამოიყენოს გამოთვლები, რათა მთელი სერიული თავიდან არ გამოთვალოს. ამისთვის გამოიყენება KV-კეში, რომელიც ინახავს თვითშეფასების (self-attention) ფენების გასაღებს (Key) და მნიშვნელობებს (Value).

მხოლოდ იმ დროს, როდესაც ჩვენ ვქმნით შემდეგ ტოკენს, უკვე გამოთვლილია ყველა წინამორბედი ტოკენის გასაღებები და მნიშვნელობები. მათ თავიდან გამოთვლას ნაცვლად, ჩვენ ინახავთ მათ მეხსიერებაში (კეში) და ახალი ტოკენის ყურადღების გამოთვლაში ვიყენებთ ამ კეშს.

ეს დაახლოებით ასე მუშაობს:

  • თითოეულ ტრანსფორმატორის ფენაში, ტოკენის დამუშავების დროს, გასაღებები და მნიშვნელობები ინახება ცალკეულ ბუფერებში.
  • როდესაც ვქმნით შემდეგ ტოკენს, მხოლოდ მისთვის გამოთვლილია გასაღებები და მნიშვნელობები, და შემდეგ ისინი იკვრება უკვე შენახულებთან.
  • ყურადღების მექანიზმი იყენებს გაერთიანებულ გასაღებს და მნიშვნელობებს კონტექსტის გამოთვლისთვის.

ეს მნიშვნელოვნად აჩქარებს ინფერენციას, ამცირებს გამოთვლით სირთულეს კვადრატული სიგრძიდან ლინეურზე.

პსევდოკოდი ერთ ფენაზე:

# 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-კეში არის მექანიზმი, რომელიც ინახავს შუამავლო გასაღებს და მნიშვნელობებს, რათა გაადვილოს სერიული გენერაცია ტრანსფორმატორებში.