გასულ ივლისს, ჩვენ განვაცხადეთ, რომ Intel-ი და Hugging Face-ი ითანამშრომლებდნენ ტრანსფორმერული მოდელებისთვის უახლესი, თუმცა მარტივი აპარატურული აჩქარების ხელსაწყოების შექმნაზე. დღეს, სიხარულით ვაცხადებთ, რომ Intel OpenVINO დავამატეთ Optimum Intel-ს. ახლა უკვე მარტივად შეგიძლიათ OpenVINO Runtime-ის მეშვეობით ინფერენსის შესრულება სხვადასხვა Intel-ის პროცესორზე (იხილეთ მხარდაჭერილი მოწყობილობების სრული სია) Transformer-ის მოდელების გამოყენებით, რომლებიც შეიძლება განთავსდეს Hugging Face-ის ჰაბზე ან ლოკალურად. ასევე შესაძლებელია თქვენი მოდელის კვანტიზაცია OpenVINO ნერვული ქსელების შეკუმშვის ფრეიმვორკის (NNCF) გამოყენებით, რათა რამდენიმე წუთში შეამციროთ მისი ზომა და პროგნოზირების დაყოვნება. ეს პირველი ვერსია ეფუძნება OpenVINO 2022.2-ს და უზრუნველყოფს ინფერენსს PyTorch-ის მრავალი მოდელისთვის ჩვენი OVModels-ის გამოყენებით. ტრენინგის შემდგომი სტატიკური კვანტიზაცია და კვანტიზაციის გათვალისწინებით ტრენინგი შეიძლება გამოყენებულ იქნას ბევრ ენკოდერულ მოდელზე (BERT, DistilBERT და ა.შ.). მომავალი OpenVINO გამოშვება მეტ ენკოდერულ მოდელს დაუჭერს მხარს. ამჟამად ენკოდერ-დეკოდერული მოდელების კვანტიზაცია არ არის ჩართული, თუმცა ეს შეზღუდვა მოიხსნება OpenVINO-ს შემდეგი ვერსიის ინტეგრაციის შემდეგ. მოდით, გაჩვენებთ, როგორ დაიწყოთ მუშაობა რამდენიმე წუთში! ამ მაგალითში, ჩვენ განვახორციელებთ ტრენინგის შემდგომ სტატიკურ კვანტიზაციას Vision Transformer (ViT) მოდელზე, რომელიც დატუნინგებულია გამოსახულების კლასიფიკაციისთვის food101 მონაცემთა ნაკრებზე. კვანტიზაცია არის პროცესი, რომელიც ამცირებს მეხსიერების და გამოთვლით მოთხოვნებს მოდელის პარამეტრების ბიტის სიგანის შემცირებით. ბიტების რაოდენობის შემცირება ნიშნავს, რომ მიღებული მოდელი ინფერენსის დროს მოითხოვს ნაკლებ მეხსიერებას, ხოლო ისეთი ოპერაციები, როგორიცაა მატრიცების გამრავლება, უფრო სწრაფად შესრულდება მთელ რიცხვებზე არითმეტიკის წყალობით. პირველ რიგში, შევქმნათ ვირტუალური გარემო და დავაყენოთ ყველა დამოკიდებულება. შემდეგ, Python-ის გარემოში გადასვლით, ჩვენ შემოვიტანთ შესაბამის მოდულებს და გადმოვწერთ ორიგინალ მოდელსა და მის პროცესორს. ტრენინგის შემდგომი სტატიკური კვანტიზაცია მოითხოვს კალიბრაციის ნაბიჯს, სადაც მონაცემები გადაეცემა ქსელს კვანტიზებული გააქტიურების პარამეტრების გამოსათვლელად. აქ, ჩვენ ავიღებთ 300 ნიმუშს ორიგინალი მონაცემთა ნაკრებიდან კალიბრაციის ნაკრების შესაქმნელად. როგორც გამოსახულების მონაცემთა ნაკრებებთან მუშაობისას, ჩვენ უნდა გამოვიყენოთ იგივე გამოსახულების ტრანსფორმაციები, რომლებიც გამოყენებული იყო ტრენინგის დროს. ვიყენებთ პროცესორში განსაზღვრულ წინასწარ დამუშავებას. ასევე განვსაზღვრავთ მონაცემთა კოლაციის ფუნქციას, რათა მოდელს მივაწოდოთ სწორად ფორმატირებული ტენსორების პარტიები. ჩვენი პირველი მცდელობისთვის, ვიყენებთ ნაგულისხმევ კონფიგურაციას კვანტიზაციისთვის. ასევე შეგიძლიათ მიუთითოთ ნიმუშების რაოდენობა, რომელიც გამოყენებული იქნება კალიბრაციის ეტაპზე (ნაგულისხმევად 300). ახლა მზად ვართ მოდელის კვანტიზაციისთვის. OVQuantizer.quantize() მეთოდი ახორციელებს მოდელის კვანტიზაციას და ექსპორტს OpenVINO ფორმატში. მიღებული გრაფი წარმოდგენილია ორი ფაილით: XML ფაილი, რომელიც აღწერს ქსელის ტოპოლოგიას, და ბინარული ფაილი, რომელიც აღწერს წონებს. მიღებული მოდელი შეიძლება მუშაობდეს ნებისმიერ Intel® სამიზნე მოწყობილობაზე. ერთი ან ორი წუთის შემდეგ მოდელი კვანტიზირებულია. შემდეგ შეგვიძლია მარტივად ჩავტვირთოთ ის ჩვენი OVModelForXxx კლასებით, რაც Transformers ბიბლიოთეკაში არსებული AutoModelForXxx კლასების ექვივალენტია. ანალოგიურად, შეგვიძლია შევქმნათ კონვეიერები და განვახორციელოთ ინფერენსი OpenVINO Runtime-ის გამოყენებით. იმის შესამოწმებლად, რომ კვანტიზაციას არ მოუხდენია უარყოფითი გავლენა სიზუსტეზე, ჩვენ განვახორციელეთ შეფასების ეტაპი ორიგინალი მოდელის სიზუსტის მის კვანტიზებულ ექვივალენტთან შესადარებლად. ჩვენ შევაფასეთ ორივე მოდელი მონაცემთა ნაკრების ქვესიმრავლეზე (შეფასების მონაცემთა ნაკრების მხოლოდ 20%-ის აღებით). ჩვენ დავაკვირდით სიზუსტის უმნიშვნელო ან საერთოდ არარსებულ დაკარგვას, ორივე მოდელის სიზუსტე 87.6 იყო. კვანტიზებული მოდელის დათვალიერებისას, ვხედავთ, რომ მისი მეხსიერების ზომა 3.8-ჯერ შემცირდა 344 მბ-დან 90 მბ-მდე. 5050 გამოსახულების პროგნოზირებაზე სწრაფი ბენჩმარკინგის ჩატარებისას, ასევე ვამჩნევთ დაყოვნების 2.4-ჯერ დაჩქარებას, 98 მწმ-დან 41 მწმ-მდე თითო ნიმუშზე. ეს არ არის ცუდი რამდენიმე სტრიქონი კოდისთვის! ⚠️ მნიშვნელოვანია აღინიშნოს, რომ მოდელი კომპილირდება პირველი ინფერენსის წინ, რაც გაზრდის პირველი ინფერენსის დაყოვნებას. ასე რომ, საკუთარი ბენჩმარკინგის ჩატარებამდე, დარწმუნდით, რომ ჯერ გახურებთ თქვენს მოდელს მინიმუმ ერთი პროგნოზირების შესრულებით. მიღებული მოდელის ნახვა შეგიძლიათ Hugging Face-ის ჰაბზე. მის ჩასატვირთად, შეგიძლიათ მარტივად გააკეთოთ შემდეგნაირად: როგორც ხედავთ, საკმაოდ მარტივია თქვენი მოდელების დაჩქარება 🤗 Optimum Intel-ისა და OpenVINO-ს გამოყენებით. თუ გსურთ დაწყება, ეწვიეთ Optimum Intel-ის რეპოზიტორიუმს და არ დაგავიწყდეთ მისთვის ვარსკვლავის მინიჭება ⭐. იქ ასევე იპოვით დამატებით მაგალითებს. თუ გსურთ OpenVINO-ს უფრო ღრმად შესწავლა, Intel-ის დოკუმენტაცია დაგეხმარებათ. გამოცადეთ და შეგვატყობინეთ თქვენი აზრი. სიამოვნებით მოვისმენთ თქვენს გამოხმაურებას Hugging Face-ის ფორუმზე და თავისუფლად მოითხოვეთ ფუნქციები ან შეატყობინეთ პრობლემების შესახებ GitHub-ზე. გაერთეთ 🤗 Optimum Intel-თან მუშაობით და გმადლობთ წაკითხვისთვის.