AI მოდელების ლოკალური ოპტიმიზაცია Intel-ის აპარატურაზე: OpenVINO და Optimum Intel-ის გამოყენებით
ხელოვნური ინტელექტის მოდელების საკუთარ მოწყობილობაზე გაშვება, მიუხედავად მათი გამოთვლითი სირთულისა, მნიშვნელოვან უპირატესობებს გვთავაზობს, მათ შორის გაუმჯობესებულ კონფიდენციალურობასა და სიჩქარეს. ეს სტატია განმარტავს, თუ როგორ შეიძლება მოდელების ოპტიმიზაცია Optimum Intel-ისა და OpenVINO-ს, ასევე მცირე ზომის მოდელების, როგორიცაა SmolVLM, გამოყენებით. ნაბიჯ-ნაბიჯ განხილულია კვანტიზაციის (Weight-only და Static) ტექნიკა, რაც ხელს უწყობს მეხსიერების შემცირებას და ინფერენსის დაჩქარებას, ძვირადღირებული
მიუხედავად იმისა, რომ ხელოვნური ინტელექტის (AI) მოდელების საკუთარ მოწყობილობაზე გაშვება შეიძლება რთული იყოს, რადგან ისინი ხშირად გამოთვლითად მომთხოვნია, ამ პროცესს მნიშვნელოვანი უპირატესობებიც აქვს: მათ შორის გაუმჯობესებული კონფიდენციალურობა, რადგან თქვენი მონაცემები თქვენს მანქანაზე რჩება, და გაზრდილი სიჩქარე და საიმედოობა, ვინაიდან არ ხართ დამოკიდებული ინტერნეტ კავშირზე ან გარე სერვერებზე.
სწორედ აქ ერთვება ისეთი ხელსაწყოები, როგორიცაა Optimum Intel და OpenVINO, მცირე ზომის, ეფექტურ მოდელთან, SmolVLM-თან ერთად. ამ ბლოგ პოსტში, ჩვენ განვიხილავთ სამ მარტივ ნაბიჯს VLM-ის ლოკალურად გასაშვებად, ძვირადღირებული აპარატურის ან GPU-ების გარეშე (თუმცა, ამ ბლოგ პოსტის ყველა კოდის ნიმუშის გაშვება Intel GPU-ებზეც შესაძლებელია).
SmolVLM-ის მსგავსი მცირე ზომის მოდელები შექმნილია დაბალი რესურსების მოხმარებისთვის, მაგრამ მათი შემდგომი ოპტიმიზაცია შესაძლებელია. ამ ბლოგ პოსტში ჩვენ განვიხილავთ, თუ როგორ უნდა მოახდინოთ თქვენი მოდელის ოპტიმიზაცია მეხსიერების მოხმარების შესამცირებლად და ინფერენსის დასაჩქარებლად, რაც მას უფრო ეფექტურს გახდის შეზღუდული რესურსების მქონე მოწყობილობებზე განთავსებისთვის.
ამ გაკვეთილის გასაგრძელებლად, უნდა დააინსტალიროთ `optimum` და `openvino`, რაც შეგიძლიათ გააკეთოთ შემდეგნაირად: პირველ რიგში, დაგჭირდებათ თქვენი მოდელის OpenVINO IR-ად (Intermediate Representation) კონვერტაცია. ამის გასაკეთებლად მრავალი ვარიანტი არსებობს: ახლა დროა თქვენი მოდელის ოპტიმიზაციისთვის. კვანტიზაცია ამცირებს მოდელის წონების და/ან აქტივაციების სიზუსტეს, რაც იწვევს უფრო მცირე ზომის და სწრაფ მოდელებს. არსებითად, ეს არის მაღალი სიზუსტის მონაცემთა ტიპის, მაგალითად, 32-ბიტიანი მცურავწერტილიანი რიცხვების (FP32), დაბალი სიზუსტის ფორმატზე, როგორც წესი, 8-ბიტიან მთელ რიცხვებზე (INT8) ასახვის გზა. მიუხედავად იმისა, რომ ეს პროცესი რამდენიმე ძირითად უპირატესობას გვთავაზობს, მას ასევე შეუძლია გავლენა იქონიოს სიზუსტის პოტენციურ დაკარგვაზე.
Optimum მხარს უჭერს პოსტ-ტრენინგის კვანტიზაციის ორ ძირითად მეთოდს: მოდით, განვიხილოთ თითოეული მათგანი. წონითი კვანტიზაცია (Weight-only quantization) ნიშნავს, რომ მხოლოდ წონებია კვანტიზებული, ხოლო აქტივაციები რჩება მათ თავდაპირველ სიზუსტეში. შედეგად, მოდელი ხდება უფრო მცირე ზომის და მეხსიერების თვალსაზრისით ეფექტური, რაც აუმჯობესებს ჩატვირთვის დროს. მაგრამ რადგან აქტივაციები არ არის კვანტიზებული, ინფერენსის სიჩქარის ზრდა შეზღუდულია. წონითი კვანტიზაცია არის მარტივი პირველი ნაბიჯი, რადგან ის, როგორც წესი, არ იწვევს სიზუსტის მნიშვნელოვან დეგრადაციას. OpenVINO 2024.3 ვერსიიდან მოყოლებული, თუ მოდელის წონები დაკვანტიზებულია, შესაბამისი აქტივაციებიც დაკვანტიზდება გაშვების დროს, რაც დამატებით სიჩქარეს გამოიწვევს მოწყობილობის მიხედვით. მის გასაშვებად, დაგჭირდებათ კვანტიზაციის კონფიგურაციის OVWeightQuantizationConfig შექმნა შემდეგნაირად: ან ეკვივალენტურად CLI-ის (ბრძანების ხაზის ინტერფეისის) გამოყენებით:
სტატიკური კვანტიზაციის (Static Quantization) დროს, როგორც წონები, ასევე აქტივაციები კვანტიზდება ინფერენსამდე. აქტივაციის კვანტიზაციის პარამეტრებისთვის საუკეთესო შეფასების მისაღწევად, ჩვენ ვასრულებთ კალიბრაციის ნაბიჯს. ამ ნაბიჯის განმავლობაში, მცირე წარმომადგენლობითი მონაცემთა ნაკრები მოდელს მიეწოდება. ჩვენს შემთხვევაში, გამოვიყენებთ კონტექსტუალური მონაცემთა ნაკრების 50 ნიმუშს და სტატიკურ კვანტიზაციას გამოვიყენებთ ვიზუალური ენკოდერისთვის (vision encoder), ხოლო წონითი კვანტიზაცია მოდელის დანარჩენ ნაწილზე იქნება გამოყენებული. ექსპერიმენტები აჩვენებს, რომ სტატიკური კვანტიზაციის გამოყენება ვიზუალურ ენკოდერზე იძლევა შესამჩნევ წარმადობის გაუმჯობესებას სიზუსტის მნიშვნელოვანი დეგრადაციის გარეშე. ვინაიდან ვიზუალური ენკოდერი თაობაზე მხოლოდ ერთხელ არის გამოძახებული, ამ კომპონენტზე სტატიკური კვანტიზაციის გამოყენებით მიღებული საერთო წარმადობის ზრდა უფრო დაბალია, ვიდრე უფრო ხშირად გამოყენებული კომპონენტების, მაგალითად, ენის მოდელის ოპტიმიზაციით მიღებული სარგებელი. მიუხედავად ამისა, ეს მიდგომა შეიძლება მომგებიანი იყოს გარკვეულ სცენარებში. მაგალითად, როდესაც საჭიროა მოკლე პასუხები, განსაკუთრებით მრავალი გამოსახულების შეყვანისას. აქტივაციების კვანტიზაცია ამატებს მცირე შეცდომებს, რომლებიც შეიძლება დაგროვდეს და გავლენა მოახდინოს სიზუსტეზე, ამიტომ შემდგომი ფრთხილი ტესტირება მნიშვნელოვანია. მეტი ინფორმაცია და მაგალითები შეგიძლიათ იხილოთ ჩვენს დოკუმენტაციაში.
ახლა შეგიძლიათ გაუშვათ ინფერენსი თქვენი დაკვანტიზებული მოდელით: თუ გაქვთ ბოლო თაობის Intel ლეპტოპი, Intel AI PC, ან Intel-ის დისკრეტული GPU, შეგიძლიათ მოდელი GPU-ზე ჩატვირთოთ `device="gpu"` პარამეტრის დამატებით მოდელის ჩატვირთვისას:
ჩვენ ასევე შევქმენით სივრცე, სადაც შეგიძლიათ ექსპერიმენტები ჩაატაროთ ორიგინალურ მოდელზე და მის დაკვანტიზებულ ვარიანტებზე, რომლებიც მიღებულია წონითი კვანტიზაციისა (weight-only quantization) და შერეული კვანტიზაციის (mixed quantization) გამოყენებით. ეს დემო მუშაობს მე-4 თაობის Intel Xeon (Sapphire Rapids) პროცესორებზე.
ჩვენი შედეგების რეპროდუცირებისთვის, იხილეთ ჩვენი ნოუთბუქი. ჩვენ ჩავატარეთ ბენჩმარკი PyTorch-ის, OpenVINO-სა და OpenVINO-ს 8-ბიტიანი WOQ (Weight-Only Quantization) ვერსიების წარმადობის შესადარებლად ორიგინალურ მოდელთან. მიზანი იყო წონითი კვანტიზაციის გავლენის შეფასება ლატენტურობაზე (latency) და გამტარუნარიანობაზე (throughput) Intel CPU აპარატურაზე. ამ ტესტისთვის, შეყვანად გამოვიყენეთ ერთი გამოსახულება. მოდელის წარმადობის შესაფასებლად გავზომეთ შემდეგი მეტრიკები: აი, შედეგები Intel CPU-ზე: ეს ბენჩმარკი აჩვენებს, თუ როგორ მუშაობს მცირე ზომის, ოპტიმიზებული მულტიმოდალური მოდელები, როგორიცაა SmolVLM2-256M, Intel CPU-ებზე სხვადასხვა კონფიგურაციით. ტესტების თანახმად, PyTorch-ის ვერსიას აქვს მაღალი ლატენტურობა, პირველი ტოკენის მიღების დრო (TTFT) 5 წამზე მეტია, ხოლო დეკოდირების გამტარუნარიანობა 0.7 ტოკენი/წამში. მოდელის Optimum-ით მარტივად კონვერტაციითა და OpenVINO-ზე გაშვებით, პირველი ტოკენის მიღების დრო (TTFT) მკვეთრად მცირდება 0.42 წამამდე (x12 აჩქარება) და გამტარუნარიანობა იზრდება 47 ტოკენამდე/წამში (x65). 8-ბიტიანი წონითი კვანტიზაციის გამოყენებით...
თეგები:
#ai
#ხელოვნური ინტელექტი
#gpu
#კონფიდენციალურობა
#კვანტიზაცია
#მოდელების ოპტიმიზაცია
#openvino
#optimum intel
#smolvlm
#ლოკალური გაშვება
#intel cpu
#ინფერენსის სიჩქარე
#მეხსიერების ეფექტურობა
წყარო: huggingface.co
AI-ით გადამუშავებული