დიდი ენობრივი მოდელების კონტექსტის ფანჯრის გამოწვევები: KV Cache-ის მეხსიერების ოპტიმიზაცია KVPress-ით
დიდი ენობრივი მოდელების (LLM) გაფართოებული კონტექსტის ფანჯრები წარმოუდგენელ შესაძლებლობებს იძლევა, თუმცა KV Cache-ის მიერ მოხმარებული მეხსიერების მართვას ართულებს. მაგალითად, 1 მილიონი ტოკენის დამუშავება Llama 3-70B-ით 330 GB-ს მოითხოვს მხოლოდ KV Cache-ისთვის. NVIDIA-ს მიერ შემუშავებული KVPress ამ პრობლემის გადასაჭრელად კომპრესიის ინოვაციურ ტექნიკას გვთავაზობს, რომელიც მეხსიერების მოხმარებას ამცირებს მოდელის სიზუსტის შენარჩუნებით.
დიდი ენობრივი მოდელების (LLM) ერთ-ერთი მთავარი მახასიათებელია მათი კონტექსტის ფანჯარა — ტოკენების მაქსიმალური რაოდენობა, რომლის დამუშავებაც მათ ერთ მოთხოვნაში შეუძლიათ. LLM-ების განვითარებასთან ერთად, მათი კონტექსტის ფანჯრები სულ უფრო იზრდება. უფრო დიდი კონტექსტის ფანჯრები წარმოუდგენელ შესაძლებლობებს ხსნის, თუმცა ამ გაფართოებულ ფანჯრებს თან ახლავს ხარჯი — KV Cache-ში გრძელი კონტექსტის მიერ დაკავებული მეხსიერების მართვა რთულდება. მაგალითად, 1 მილიონი ტოკენის დამუშავება Llama 3-70B-ით float16-ში მოითხოვს 330 GB-ს KV Cache-ისთვის, რაც მას მიუღებლად ხდის მრავალი აპლიკაციისთვის. ამ სტატიაში განვიხილავთ ამ პრობლემის გადაჭრის ერთ-ერთ გზას: KV Cache-ის კომპრესია უფრო ეფექტური გენერაციისთვის.
(იხილეთ ნახატი 1: Key Value ქეში ყურადღების მოდულის შიგნით; წყარო: NVIDIA)
ავტორეგრესიულ მოდელებში ტექსტის გენერაცია ხდება ტოკენ-ტოკენით, სადაც ყოველი პროგნოზი ეყრდნობა ყველა წინამორბედ ტოკენს კონტექსტისთვის. ეს განმეორებადი გამოთვლა არაეფექტური ხდება, როდესაც მიმდევრობა იზრდება, განსაკუთრებით დიდი მოდელებისთვის. KV Cache ოპტიმიზაციას უკეთებს ამ პროცესს შუალედური შედეგების — key (K) და value (V) — შენახვით ყურადღების შრეებიდან, რათა მოდელმა შეძლოს მათი ხელახლა გამოყენება სამომავლო ტოკენებისთვის, ხელახალი გამოთვლის ნაცვლად.
მიუხედავად იმისა, თუ რამდენად ძლიერია KV Cache, მას აქვს მნიშვნელოვანი ნაკლი – ის წრფივად იზრდება კონტექსტის ფანჯრის ზომასთან ერთად. მიუხედავად იმისა, რომ ეს თავიდან შეიძლება არ ჟღერდეს საგანგაშოდ, მოდით განვიხილოთ, რატომ ხდება ეს სერიოზული შეფერხება. KV Cache-ში შენახული მნიშვნელობები მოდელის მიერ გამოყენებული ყველა ყურადღების ბლოკიდან მოდის. ამიტომ, მისი ზომა დამოკიდებულია მოდელის არქიტექტურაზე, რომელიც კარნახობს ყურადღების „თავების“ (attention heads) რაოდენობას.
უფრო კონკრეტულად, KV Cache-ის მიერ მოხმარებული მეხსიერება განისაზღვრება შემდეგი ფორმულით:
`Size(KV) = 2 x precision x n_layers x n_heads x d x n_tokens`
თითოეული ეს ფაქტორი ხელს უწყობს მეხსიერების მოხმარების მკვეთრ ზრდას. ამ ყველაფრის უფრო ხელშესახები გასახდელად, განვიხილოთ კონკრეტული მაგალითი — Llama 3-70B, რომელიც მუშაობს bfloat16 სიზუსტით (მოდელის ავტორების რეკომენდაციით) 1 მილიონი ტოკენის კონტექსტის ზომით:
`Size(KV) = 2 x 2 x 80 x 8 x 128 x 1M = 327.6GB`
რადგან bfloat16 იყენებს 2 ბაიტს თითო პარამეტრზე, მოდელის წონები თავისთავად მოითხოვს 140 GB-ს (70B x 2 ბაიტი). ეს ნიშნავს, რომ მოდელის გაშვება 1 მილიონი ტოკენის კონტექსტის ზომით მოითხოვს დაახლოებით 470 GB მეხსიერებას, საიდანაც KV cache-ზე მოდის ამ მთლიანი მოცულობის 70%.
როგორც ვნახეთ, KV Cache არის როგორც კრიტიკული ხელშემწყობი, ასევე მნიშვნელოვანი შეფერხება დიდი ენობრივი მოდელების (LLM) გრძელი კონტექსტის ფანჯრებით გამოსაყენებლად. წრფივად მზარდი მეხსიერების პრობლემის გადასაჭრელად საჭიროა ინოვაციური კომპრესიის ტექნიკა, და სწორედ აქ შემოდის KVPress.
KVPress, შემუშავებული NVIDIA-ს მიერ, არის Python-ის ინსტრუმენტთა ნაკრები, რომელიც შექმნილია დიდი KV Cache-ების მეხსიერების გამოწვევების მოსაგვარებლად, კომპრესიის უახლესი ტექნიკის საშუალებით. ის ასევე ინტეგრირდება სხვა მიდგომებთან, როგორიცაა KV Cache Quantization, მეთოდი, რომელიც ჩაშენებულია transformers ბიბლიოთეკაში მეხსიერების მოხმარების შესამცირებლად (precision ტერმინი ზემოთ მოცემულ ფორმულაში), რაც კიდევ უფრო აფართოებს მის გამოყენებას.
კომპრესიაზე სპეციალიზებული მკვლევრებისთვის, KVPress გთავაზობთ მოქნილ და მოდულურ ჩარჩოს, რაც აადვილებს ახალი მეთოდების გაგებასა და გაფართოებას. დეველოპერებისთვის, KVPress ამარტივებს ამ უახლესი ტექნიკის დანერგვის პროცესს, რაც უზრუნველყოფს სწრაფ და ეფექტურ ინტეგრაციას რეალურ აპლიკაციებში.
თავის არსში, KVPress იყენებს „პრესებს“ (presses), რომლებიც მოწინავე კომპრესიის ალგორითმებია, სპეციალურად შექმნილი KV Cache-ის მეხსიერების ნაკვალევის შესამცირებლად. ბევრი ასეთი „პრესი“ ეყრდნობა შეფასებას, რომელიც გამოიყენება თითოეულ „თავში“ (head) ყველაზე ნაკლებად მნიშვნელოვანი KV წყვილების ამოსაღებად (prune). მაგალითად, KnormPress ამცირებს KV წყვილებს ყველაზე დაბალი key value ნორმით, ხოლო SnapKVPress ამცირებს KV წყვილებს, რომლებიც დაკავშირებულია უახლესი მოთხოვნების დაბალ ყურადღების წონებთან. ეს „პრესები“ უნაკლოდ არის ინტეგრირებული მოდელის ყურადღების შრეებში „forward hooks“-ის გამოყენებით.
(იხილეთ ნახატი 2: KV კომპრესიის ვიზუალიზაცია; წყარო: NVIDIA)
ტექსტის გენერაციის დროს, ისინი დინამიურად შეკუმშავენ KV Cache-ს, ამცირებენ მეხსიერების მოხმარებას მოდელის მიერ თანმიმდევრული და ზუსტი გამომავალი მონაცემების გენერირების უნარის დარღვევის გარეშე. თითოეული „პრესი“ ხასიათდება `compression_ratio` ატრიბუტით, რომელიც განსაზღვრავს KV Cache-ზე გამოყენებული კომპრესიის ხარისხს. ეს „პრესები“ უნაკლოდ ინტეგრირდება მორგებულ transformer-ის მილსადენთან, რაც აადვილებს გამოყენებას და ექსპერიმენტებს. მაგალითად, შესაძლებელია ერთ-ერთი მრავალი „პრესის“, ExpectedAttentionPress-ის გამოყენება, რომელიც ამცირებს KV წყვილებს მომავალი მოთხოვნებისთვის ყველაზე დაბალი მოსალოდნელი ყურადღების წონით.
თეგები:
#ხელოვნური ინტელექტი
#llm
#მანქანური სწავლება
#nvidia
#კომპრესია
#კონტექსტის ფანჯარა
#kv cache
#მეხსიერების მართვა
#kvpress
წყარო: huggingface.co
AI-ით გადამუშავებული