KV ქეშირება nanoVLM-ში: 38%-იანი აჩქარება გენერაციაში
ეს ბლოგ-პოსტი აღწერს KV ქეშირების ტექნიკას, რომელიც nanoVLM საცავში ნულიდან დავნერგეთ და რომელმაც ენობრივი მოდელების გენერაციაში 38%-იანი აჩქარება მოგვცა. სტატია განმარტავს ავტორეგრესიულ მოდელებში გამოთვლითი სიჭარბის პრობლემას და იმას, თუ როგორ აგვარებს მას KV ქეშირება Q, K, V მნიშვნელობების შენახვით. მოცემულია თეორიული საფუძვლები, nanoVLM-ში პრაქტიკული იმპლემენტაცია და ზოგადი გაკვეთილები, რომლებიც ყველა ავტორეგრესიული ენობრივი მოდელის გენერაციას ეხება. ეს ოპტიმიზაცია აუცილებელია LLM-ების ეფექტუ
ჩვენ ნულიდან დავნერგეთ KV ქეშირება ჩვენს nanoVLM საცავში (მცირე კოდების ბაზა თქვენი საკუთარი ვიზუალური ენობრივი მოდელის (Vision Language Model) სუფთა PyTorch-ით მოსამზადებლად). ამან გენერაციის პროცესში 38%-იანი დაჩქარება მოგვცა. ამ ბლოგ-პოსტში განვიხილავთ KV ქეშირებას და ჩვენს გამოცდილებას მისი დანერგვისას. მიღებული გაკვეთილები ზოგადია და შეიძლება გამოყენებულ იქნეს ყველა ავტორეგრესიული ენობრივი მოდელის გენერაციაზე. ნულიდან დანერგვა მცირე კოდების ბაზაზე შესანიშნავი სასწავლო გამოცდილებაა, შემოგვიერთდით ამ მოგზაურობაში!
ავტორეგრესიული ენობრივი მოდელები ტექსტს თითო ტოკენის ერთდროულად შერჩევით წარმოქმნიან. ინფერენსის დროს, მოდელი ამუშავებს მოცემულ შეყვანის მიმდევრობას, პროგნოზირებს შემდეგ ტოკენს, ამატებს მას მიმდევრობას და იმეორებს ამ პროცესს შეჩერების კრიტერიუმის დაკმაყოფილებამდე. ეს ნაბიჯ-ნაბიჯ გენერაცია არსებითად თანმიმდევრულია: ეს გამეორება ასევე იწვევს გამოთვლით სიჭარბეს. ამ პოსტში ჩვენ განვიხილავთ KV ქეშირებას, ოპტიმიზაციის ტექნიკას, რომელიც ამ არაეფექტურობას ამცირებს.
**სარჩევი:** ქეშირებაში ჩაღრმავებამდე, მოდით გადავხედოთ, თუ როგორ მუშაობს ყურადღება ტრანსფორმერულ მოდელებში. ტრანსფორმერული ენობრივი მოდელი შედგება დაწყობილი ფენებისგან, რომელთაგან თითოეული მოიცავს: იმის გასაგებად, თუ სად გვეხმარება KV ქეშირება, ყურადღებას ვამახვილებთ თვით-ყურადღების (self-attention) მექანიზმზე, კერძოდ, ერთ ყურადღების თავში (attention head). მოდით განვიხილოთ მარტივი PyTorch-ის იმპლემენტაცია ძირითადი გამოთვლების ვიზუალიზაციისთვის. T შეყვანის ჩანერგვების მიმდევრობისთვის, წარმოდგენილი როგორც X∈RT×D, თვით-ყურადღება გამოითვლება შემდეგნაირად: საბოლოო გამოსავალია: Attention(X;Q,K,V)=softmax(QK⊤⋅Mdk)V აქ მოცემულია მინიმალური PyTorch ეკვივალენტი მიზეზობრივი ნიღბის (causal mask) გამოყენებით: ავტორეგრესიული გენერაციისას, მოდელი წარმოქმნის თითო ტოკენს ერთდროულად. ყოველი ნაბიჯისას, ის ხელახლა ითვლის Q, K და V-ს მთელი მიმდევრობისთვის, მიუხედავად იმისა, რომ ადრეული ტოკენები არ შეცვლილა. სიჭარბის დასადასტურებლად: ეს შემოწმებები აჩვენებს, რომ უახლესი ტოკენის გარდა, K და V იდენტურია ადრე გამოთვლილი მნიშვნელობებისა. ყურადღების გამოთვლების უმეტესი ნაწილი უმიზეზოდ მეორდება. ეს უფრო ძვირი ხდება, რადგან მიმდევრობები იზრდება.
ამ არაეფექტურობის აღმოსაფხვრელად, ჩვენ ვიყენებთ KV ქეშირებას: ეს ცვლის გენერაციას სრული მიმდევრობის ხელახალი გამოთვლიდან მსუბუქ, ინკრემენტულ განახლებაზე. ✅ პრაქტიკაში, ეს ქეში არის თითოეული ფენისთვის განკუთვნილი ლექსიკონი, რომელსაც აქვს გასაღებები "key" და "value", თითოეული ფორმის (batch_size, num_heads, seq_len_cached, head_dim). ეს არის საფუძველი იმისა, თუ როგორ შეუძლიათ თანამედროვე დიდ ენობრივ მოდელებს (LLM) გრძელი გამოსავლების ეფექტურად გენერირება.
ახლა, როცა გვესმის KV ქეშირების თეორია, მოდით ვნახოთ, როგორ არის ის პრაქტიკაში დანერგილი ჩვენს nanoVLM საცავში. ეს იდეალური სატესტო გარემოა, რადგან ის ზედმეტად ლაკონური და თვითკმარი კოდების ბაზაა. KV ქეშირება ჩართულია ჩვენი მოდელის სამ ძირითად კომპონენტში: `LanguageModelGroupedAttention` კლასში, ჩვენ ვცვლით `forward` ფუნქციას, რათა მიიღოს და განაახლოს გასაღებებისა და მნიშვნელობების ქეში (`block_kv_cache`). ადრე, მოდელი ყოველი გენერაციის ნაბიჯზე ხელახლა ითვლიდა K და V-ს. ახლა ჩვენ მხოლოდ Knew და Vnew-ს ვითვლით მიმდინარე ტოკენისთვის და ვამატებთ მათ ქეშირებულ მნიშვნელობებს. `LanguageModel` კლასში, ჩვენ შემოგვაქვს ფენა-ფენა ქეშის თვალყურის დევნება. `start_pos` არგუმენტი ეხმარება მოდელს სწორი მბრუნავი პოზიციური კოდირების (rotary positional encodings) გამოთვლაში ახლად გენერირებული ტოკენებისთვის. ყველაზე დიდი არქიტექტურული ცვლილება არის `VisionLanguageModel`-ის `generate()` მეთოდში. ჩვენ გენერაცია ორ ეტაპად დავყავით: აქ მოცემულია შესაბამისი კოდი: ამ ფაზების გამოყოფით, ჩვენ თავიდან ავიცილებთ ჭარბ გამოთვლებს და დრამატულად ვაჩქარებთ ინფერენსს, განსაკუთრებით გრძელი მოთხოვნებისთვის (prompts).
KV ქეშირება გამორიცხავს ზედმეტ გამოთვლებს ავტორეგრესიული გენერაციის დროს, რაც უზრუნველყოფს უფრო სწრაფ და ეფექტურ ინფერენსს, განსაკუთრებით გრძელ მიმდევრობებსა და რეალურ დროში აპლიკაციებში. ეს არის კომპრომისი სიჩქარესა და მეხსიერებას შორის, და მის ნაკლოვანებად შეიძლება ჩაითვალოს უფრო რთული კოდი და უფრო დახვეწილი ინფერენსის სქემების შეზღუდვა, როგორიცაა beam-search და ა.შ. KV ქეშირება არის პოპულარული მეთოდი დიდი ენობრივი მოდელების (LLM) ინფერენსის დასაჩქარებლად, რაც მათ სამომხმარებლო აპარატურაზე გაშვებას შესაძლებელს ხდის, და ახლა თქვენც იცით, როგორ მუშაობს ის!
თეგები:
#ხელოვნური ინტელექტი
#llm
#მანქანური სწავლება
#ოპტიმიზაცია
#pytorch
#ინფერენსი
#nanovlm
#kv ქეშირება
#ყურადღების მექანიზმი
#ვიზუალური ენობრივი მოდელი
წყარო: huggingface.co
AI-ით გადამუშავებული
მსგავსი სტატიები
ხელოვნური ინტელექტი
Anthropic-ის Claude-ის აღზევება Apple App Store-ის რეიტინგებში პენტაგონთან მოლაპარაკებების ფონზე
ხელოვნური ინტელექტი
ტრამპის ადმინისტრაცია Anthropic-ს სანქციებს უწესებს ხელოვნური ინტელექტის გამოყენებაზე უარის გამო: ექსპერტი ინდუსტრიის უსაფრთხოების ხარვეზებზე საუბრობს
ხელოვნური ინტელექტი