ამჟამად, მოდელების კვანტიზაცია ორი ძირითადი მიზნით გამოიყენება. დღემდე, ორი ინტეგრაციის მცდელობა განხორციელდა და ისინი მშობლიურად არის მხარდაჭერილი `transformers` ბიბლიოთეკაში: `bitsandbytes` და `auto-gptq`. აღსანიშნავია, რომ ზოგიერთი დამატებითი კვანტიზაციის სქემა ასევე მხარდაჭერილია 🤗 `optimum` ბიბლიოთეკაში, მაგრამ ეს ამ ბლოგპოსტის ფარგლებს სცდება. თითოეული მხარდაჭერილი სქემის შესახებ მეტის გასაგებად, გთხოვთ, იხილოთ ქვემოთ გაზიარებული რესურსებიდან ერთ-ერთი. გთხოვთ, ასევე გადახედოთ დოკუმენტაციის შესაბამის სექციებს. ასევე გაითვალისწინეთ, რომ ქვემოთ მოცემული დეტალები ვრცელდება მხოლოდ PyTorch მოდელებზე; ეს ამჟამად არ ვრცელდება Tensorflow და Flax/JAX მოდელებზე. ამ სექციაში განვიხილავთ `bitsandbytes` და `GPTQ` კვანტიზაციის დადებით და უარყოფით მხარეებს. გაითვალისწინეთ, რომ ეს ეფუძნება საზოგადოების გამოხმაურებას და დროთა განმავლობაში შეიძლება შეიცვალოს, რადგან ზოგიერთი ფუნქცია შესაბამისი ბიბლიოთეკების განვითარების გეგმაშია. **bitsandbytes-ის დადებითი მხარეები:** * **მარტივი:** `bitsandbytes` კვლავ რჩება ნებისმიერი მოდელის კვანტიზაციის უმარტივეს გზად, რადგან არ საჭიროებს კვანტიზებული მოდელის დაკალიბრებას შეყვანის მონაცემებით (ასევე უწოდებენ zero-shot კვანტიზაციას). შესაძლებელია ნებისმიერი მოდელის კვანტიზაცია გამოსაყენებლად მზა ფორმით, თუ ის შეიცავს `torch.nn.Linear` მოდულებს. როდესაც `transformers`-ში ახალი არქიტექტურა ემატება, სანამ მათი ჩატვირთვა შესაძლებელია `accelerate`-ის `device_map="auto"`-ით, მომხმარებლებს შეუძლიათ ისარგებლონ `bitsandbytes` კვანტიზაციით მინიმალური მუშაობის დეგრადაციით. კვანტიზაცია ხორციელდება მოდელის ჩატვირთვისას, არ არის საჭირო რაიმე შემდგომი დამუშავების ან მომზადების ეტაპის გავლა. * **მრავალმოდალური თავსებადობა:** რადგან მოდელის კვანტიზაციის ერთადერთი პირობაა `torch.nn.Linear` ფენის ქონა, კვანტიზაცია მუშაობს ნებისმიერი მოდალობისთვის, რაც შესაძლებელს ხდის მოდელების, როგორიცაა Whisper, ViT, Blip2 და ა.შ., 8-ბიტიან ან 4-ბიტიან ფორმატში ჩატვირთვას. * **0 მუშაობის დეგრადაცია ადაპტერების შერწყმისას:** (ადაპტერებისა და PEFT-ის შესახებ მეტის გასაგებად იხილეთ ეს ბლოგპოსტი, თუ არ იცნობთ). თუ თქვენ ავარჯიშებთ ადაპტერებს კვანტიზებულ საბაზისო მოდელზე, ადაპტერების შერწყმა შესაძლებელია საბაზისო მოდელზე განლაგებისთვის, გამოთვლის მუშაობის დეგრადაციის გარეშე. ასევე შეგიძლიათ ადაპტერების შერწყმა დეკვანტიზებულ მოდელზე! ეს არ არის მხარდაჭერილი GPTQ-სთვის. **GPTQ-ის დადებითი მხარეები:** * **სწრაფი ტექსტის გენერაციისთვის:** GPTQ კვანტიზებული მოდელები სწრაფია `bitsandbytes` კვანტიზებულ მოდელებთან შედარებით ტექსტის გენერაციისთვის. სიჩქარის შედარებას შესაბამის სექციაში განვიხილავთ. * **n-ბიტიანი მხარდაჭერა:** GPTQ ალგორითმი შესაძლებელს ხდის მოდელების კვანტიზაციას 2 ბიტამდე! თუმცა, ამას შეიძლება თან ახლდეს ხარისხის სერიოზული დეგრადაცია. რეკომენდებული ბიტების რაოდენობაა 4, რაც ამჟამად შესანიშნავ კომპრომისად ითვლება GPTQ-სთვის. * **მარტივად სერიალიზებადი:** GPTQ მოდელები მხარს უჭერენ სერიალიზაციას ნებისმიერი ბიტის რაოდენობისთვის. `TheBloke` namespace-დან მოდელების ჩატვირთვა (https://huggingface.co/TheBloke - მოძებნეთ ისინი, რომლებიც მთავრდება `-GPTQ` სუფიქსით) მხარდაჭერილია მზა ფორმით, თუ დაინსტალირებული გაქვთ საჭირო პაკეტები. `Bitsandbytes` მხარს უჭერს 8-ბიტიან სერიალიზაციას, მაგრამ დღეისთვის არ უჭერს მხარს 4-ბიტიან სერიალიზაციას. * **AMD მხარდაჭერა:** ინტეგრაცია მზა ფორმით უნდა მუშაობდეს AMD GPU-ებისთვის! **bitsandbytes-ის უარყოფითი მხარეები:** * **GPTQ-ზე ნელი ტექსტის გენერაციისთვის:** `bitsandbytes` 4-ბიტიანი მოდელები ნელია GPTQ-სთან შედარებით `generate`-ის გამოყენებისას. * **4-ბიტიანი წონები არ არის სერიალიზებადი:** ამჟამად, 4-ბიტიანი მოდელების სერიალიზაცია შეუძლებელია. ეს ხშირი მოთხოვნაა საზოგადოებიდან და ჩვენ გვჯერა, რომ ის ძალიან მალე უნდა გადაწყდეს `bitsandbytes`-ის შემნახველების მიერ, რადგან ეს მათ გეგმებშია! **GPTQ-ის უარყოფითი მხარეები:** * **კალიბრაციის მონაცემთა ნაკრები:** კალიბრაციის მონაცემთა ნაკრების საჭიროებამ შესაძლოა ზოგიერთი მომხმარებელი დააფრთხოს GPTQ-ის გამოყენებისგან. გარდა ამისა, მოდელის კვანტიზაციას შეიძლება რამდენიმე საათი დასჭირდეს (მაგ., 4 GPU საათი 175B მასშტაბის მოდელისთვის ნაშრომის მიხედვით - სექცია 2). * **ამჟამად მუშაობს მხოლოდ ენობრივი მოდელებისთვის:** დღეის მდგომარეობით, `auto-GPTQ`-ით მოდელის კვანტიზაციის API შექმნილია მხოლოდ ენობრივი მოდელების მხარდასაჭერად. შესაძლებელი უნდა იყოს არატექსტური (ან მულტიმოდალური) მოდელების კვანტიზაცია GPTQ ალგორითმის გამოყენებით, მაგრამ პროცესი არ არის დეტალურად აღწერილი ორიგინალურ ნაშრომში ან `auto-gptq` საცავში. თუ საზოგადოება დაინტერესდება ამ თემით, ეს შესაძლოა მომავალში განიხილებოდეს. **ბენჩმარკი** ჩვენ გადავწყვიტეთ, წარმოგვედგინა ვრცელი ბენჩმარკი როგორც ინფერენციისთვის, ასევე `bitsandbytes`-ისა და `auto-gptq`-ის გამოყენებით ადაპტერების დაზუსტებისთვის სხვადასხვა აპარატურაზე. ინფერენციის ბენჩმარკმა მომხმარებლებს უნდა მისცეს წარმოდგენა სიჩქარის განსხვავებაზე, რომელიც შეიძლება მიიღონ სხვადასხვა მიდგომებს შორის, ხოლო ადაპტერის დაზუსტების ბენჩმარკმა მომხმარებლებს მკაფიო წარმოდგენა უნდა მისცეს იმის შესახებ, თუ რომელი მიდგომა გამოიყენონ `bitsandbytes` და GPTQ საბაზისო მოდელებზე ადაპტერების დაზუსტებისას. ჩვენ გამოვიყენებთ შემდეგ პარამეტრებს: ეს ბენჩმარკი ზომავს მხოლოდ წინასწარი შევსების ეტაპს (prefill step), რომელიც შეესაბამება წინ მიმართულ გადაცემას (forward pass) ვარჯიშის დროს. ის ჩატარდა ერთ NVIDIA A100-SXM4-80GB GPU-ზე, 512-ის მოთხოვნის სიგრძით (prompt length). ჩვენ მიერ გამოყენებული მოდელი იყო `meta-llama/Llama-2-13b-hf`. * **პაკეტის ზომა = 1:** (აქ იქნებოდა ბენჩმარკის ცხრილი ან მონაცემები) * **პაკეტის ზომა = 16:** (აქ იქნებოდა ბენჩმარკის ცხრილი ან მონაცემები) ბენჩმარკიდან ვხედავთ, რომ `bitsandbytes` და GPTQ ექვივალენტურია, GPTQ ოდნავ უფრო სწრაფია დიდი პაკეტის ზომის შემთხვევაში. მეტი დეტალებისთვის იხილეთ ეს ბმული.