ბოლო დროს, კოდის გენერაციის მოდელებმა დიდი პოპულარობა მოიპოვეს, განსაკუთრებით კი ისეთი უახლესი ღია კოდის მოდელების გამოშვებით, როგორებიცაა BigCode-ის StarCoder და Meta AI-ის Code Llama. სულ უფრო მეტი ნაშრომი ფოკუსირებულია დიდი ენობრივი მოდელების (LLM-ების) ოპტიმიზაციასა და ხელმისაწვდომობაზე. ამ ბლოგში მოხარულნი ვართ გაგიზიაროთ LLM-ის ოპტიმიზაციის უახლესი შედეგები Intel Xeon-ზე, პოპულარული კოდის გენერაციის LLM-ზე, StarCoder-ზე ფოკუსირებით. StarCoder მოდელი არის უახლესი LLM, რომელიც სპეციალურად შექმნილია მომხმარებლის დასახმარებლად სხვადასხვა პროგრამირების ამოცანებში, როგორიცაა კოდის ავტოდავსება, შეცდომების გამოსწორება, კოდის შეჯამება და ბუნებრივი ენის აღწერიდან კოდის ფრაგმენტების გენერირებაც კი. StarCoder მოდელი StarCoder ოჯახის წევრია, რომელიც ასევე მოიცავს StarCoderBase ვარიანტს. კოდის ეს დიდი ენობრივი მოდელები (Code LLM-ები) გაწვრთნილია GitHub-ის უფლებამოსილი ლიცენზიით გაცემულ მონაცემებზე, მათ შორის 80-ზე მეტ პროგრამირების ენაზე, Git კომიტებზე, GitHub-ის საკითხებზე და Jupyter ნოუთბუქებზე. ამ ნაშრომში ჩვენ ვაჩვენებთ StarCoder-15B მოდელის 7-ჯერ მეტ ინფერენციის აჩქარებას Intel-ის მე-4 თაობის Xeon პროცესორზე, 8-ბიტიანი და 4-ბიტიანი კვანტიზაციის ინტეგრაციით ასისტირებულ გენერაციასთან ერთად. სცადეთ ჩვენი დემო Hugging Face Spaces-ზე, რომელიც მუშაობს მე-4 თაობის Intel Xeon Scalable პროცესორზე. ჩვენი საწყისი წერტილი დავადგინეთ StarCoder (15B) მოდელის, PyTorch-ისა და Intel Extension for PyTorch (IPEX)-ის გამოყენებით. არსებობს რამდენიმე მონაცემთა ნაკრები, რომლებიც შექმნილია ავტომატური კოდის ავტოდავსების ხარისხის შესაფასებლად. ამ ნაშრომში ჩვენ ვიყენებთ პოპულარულ HumanEval მონაცემთა ნაკრებს მოდელის ხარისხისა და პროდუქტიულობის შესაფასებლად. HumanEval შედგება 164 პროგრამირების ამოცანისგან, ფუნქციის ხელმოწერის სახით docstring-ით, ხოლო მოდელი ავსებს ფუნქციის კოდს. მოთხოვნის საშუალო სიგრძეა 139. ხარისხს ვზომავთ Bigcode Evaluation Harness-ის გამოყენებით და ვაფიქსირებთ pass@1 მეტრიკას. მოდელის პროდუქტიულობას ვზომავთ პირველი ტოკენის გენერაციის დროის (TTFT) და გამომავალი ტოკენის გენერაციის დროის (TPOT) გაზომვით HumanEval ტესტის ნაკრებზე და ვაფიქსირებთ საშუალო TTFT-სა და TPOT-ს. მე-4 თაობის Intel Xeon პროცესორებს გააჩნიათ ხელოვნური ინტელექტით გაძლიერებული აჩქარება, რომელიც ცნობილია როგორც Intel® Advanced Matrix Extensions (Intel® AMX). კონკრეტულად, მას აქვს ჩაშენებული BFloat16 (BF16) და Int8 GEMM აქსელერატორები ყველა ბირთვში ღრმა სწავლების წვრთნისა და ინფერენციის დატვირთვების დასაჩქარებლად. AMX-ით აჩქარებული ინფერენცია დანერგილია PyTorch 2.0-ისა და Intel Extension for PyTorch (IPEX)-ის მეშვეობით, სხვა ოპტიმიზაციებთან ერთად, რომლებიც განკუთვნილია LLM ინფერენციაში გამოყენებული სხვადასხვა საერთო ოპერატორებისთვის (მაგ. ფენების ნორმალიზაცია, SoftMax, სკალირებული წერტილოვანი ნამრავლი). საწყის წერტილად ვიყენებთ PyTorch-სა და IPEX-ში არსებულ სტანდარტულ ოპტიმიზაციებს, რათა BF16 მოდელის გამოყენებით განვახორციელოთ ინფერენცია. სურათი 1 გვიჩვენებს საწყისი მოდელის ლატენტურობას, ხოლო ცხრილები 1 და 2 აჩვენებს მის ლატენტურობასა და სიზუსტეს. სურათი 1. საწყისი მოდელის ლატენტურობა. LLM-ებში ტექსტის გენერაცია ხორციელდება ავტორეგრესიული წესით, რაც მოითხოვს მთელი მოდელის მეხსიერებიდან CPU-ში ჩატვირთვას ყოველი ახალი ტოკენის გენერაციისთვის. ჩვენ აღმოვაჩინეთ, რომ ჩიპგარე მეხსიერებას (DRAM) და CPU-ს შორის გამტარობა წარმოადგენს ყველაზე დიდ ბოთლნეკს ტოკენის გენერაციის პროცესში. კვანტიზაცია პოპულარული მიდგომაა ამ პრობლემის შესამსუბუქებლად. ის ამცირებს მოდელის ზომას და, შესაბამისად, მოდელის წონების ჩატვირთვის დროს. ამ ნაშრომში ჩვენ ვფოკუსირდებით კვანტიზაციის ორ ტიპზე: SmoothQuant არის წვრთნის შემდგომი კვანტიზაციის ალგორითმი, რომელიც გამოიყენება LLM-ების INT8-ისთვის კვანტიზაციისთვის მინიმალური სიზუსტის დაკარგვით. სტატიკური კვანტიზაციის მეთოდები ნაკლებად ეფექტური აღმოჩნდა LLM-ებზე, აქტივაციების სპეციფიკურ არხებში აღმოჩენილი დიდი სიდიდის გამონაკლისების გამო. ვინაიდან აქტივაციები ტოკენების მიხედვით არის კვანტიზებული, სტატიკური კვანტიზაცია იწვევს ან შეკვეცილ გამონაკლისებს, ან არასაკმარისი სიდიდის აქტივაციებს. SmoothQuant ალგორითმი ამ პრობლემას წყვეტს წინასწარი კვანტიზაციის ფაზის დანერგვით, სადაც დამატებითი გათანაბრების სკალირების ფაქტორები გამოიყენება როგორც აქტივაციებზე, ასევე წონებზე, რაც არბილებს აქტივაციებში არსებულ გამონაკლისებს და უზრუნველყოფს კვანტიზაციის დონეების უკეთეს გამოყენებას. სურათი 2. INT8 სტატიკური კვანტიზაციის გამოთვლითი დიაგრამა. IPEX-ის გამოყენებით, ჩვენ SmoothQuant-ი გამოვიყენეთ StarCoder მოდელზე. ჩვენ გამოვიყენეთ MBPP მონაცემთა ნაკრების სატესტო ნაწილი, როგორც ჩვენი კალიბრაციის მონაცემთა ნაკრები და წარმოვადგინეთ Q8-StarCoder. ჩვენი შეფასება აჩვენებს, რომ Q8-StarCoder-ს არ აქვს სიზუსტის დაკარგვა საწყისთან შედარებით (ფაქტობრივად, აღინიშნება მცირე გაუმჯობესებაც კი). პროდუქტიულობის თვალსაზრისით, Q8-StarCoder აღწევს ~2.19-ჯერ გაუმჯობესებას TTFT-ში და ~2.20-ჯერ გაუმჯობესებას TPOT-ში. სურათი 3 გვიჩვენებს Q8-StarCoder-ის ლატენტურობას (TPOT) BF16 საწყის მოდელთან შედარებით. სურათი 3. 8-ბიტიანი კვანტიზებული მოდელის ლატენტურობის აჩქარება. მიუხედავად იმისა, რომ INT8 ამცირებს მოდელის ზომას 2-ჯერ BF16-თან შედარებით (8 ბიტი თითო წონაზე 16 ბიტის წინააღმდეგ), მეხსიერების გამტარობა კვლავ ყველაზე დიდი ბოთლნეკია. მოდელის მეხსიერებიდან ჩატვირთვის დროის შემდგომი შემცირების მიზნით, ჩვენ მოდელის წონები კვანტიზირება გავუკეთეთ 4 ბიტამდე WOQ-ის გამოყენებით. აღსანიშნავია, რომ 4-ბიტიანი WOQ საჭიროებს 16-ბიტამდე დეკვანტიზაციას გამოთვლამდე (სურათი 4), რაც ნიშნავს, რომ არსებობს გამოთვლითი ზედნადები ხარჯი. სურათი 4. გამოთვლითი დიაგრამა რეჟიმისთვის.