ნაკლი ის არის, რომ მოდელი გაცილებით დიდია, შესაბამისად, უფრო ნელი და რთული გასაშვებია სამომხმარებლო აპარატურაზე. Hugging Face diffusers ბიბლიოთეკის უახლესი ვერსიის გამოყენებით, Stable Diffusion XL-ის გაშვება შესაძლებელია CUDA აპარატურაზე 16 GB GPU RAM-ით, რაც მას ხელმისაწვდომს ხდის Colab-ის უფასო ვერსიისთვისაც კი. ბოლო რამდენიმე თვის განმავლობაში ნათლად გამოჩნდა, რომ ხალხი აქტიურად ინტერესდება ML მოდელების ადგილობრივად გაშვებით სხვადასხვა მიზეზის გამო, მათ შორის კონფიდენციალურობის, მოხერხებულობის, მარტივი ექსპერიმენტებისა თუ შეუზღუდავი გამოყენების მიზნით. ამ სფეროს შესასწავლად, Apple-სა და Hugging Face-ში აქტიურად ვმუშაობდით. ჩვენ ვაჩვენეთ, როგორ შეიძლება Stable Diffusion-ის გაშვება Apple Silicon-ზე, ან როგორ გამოვიყენოთ Core ML-ის უახლესი მიღწევები ზომისა და მუშაობის გასაუმჯობესებლად 6-ბიტიანი პალეტიზაციის მეშვეობით. Stable Diffusion XL-ისთვის რამდენიმე რამ გავაკეთეთ: ყველაფერი ღია წყაროა და უკვე ხელმისაწვდომია, ასე რომ, საქმეს შევუდგეთ. ამ გამოცემის ფარგლებში, ჩვენ გამოვაქვეყნეთ Stable Diffusion XL-ის ორი განსხვავებული ვერსია Core ML-ში. ორივე მოდელის ტესტირება შესაძლებელია Apple-ის Swift command-line inference აპლიკაციის ან Hugging Face-ის დემო აპლიკაციის გამოყენებით. ეს უკანასკნელის მაგალითია ახალი Stable Diffusion XL pipeline-ის გამოყენებით: Stable Diffusion-ის წინა ვერსიების მსგავსად, ველით, რომ საზოგადოება შექმნის ახალ, ოპტიმიზებულ ვერსიებს სხვადასხვა სფეროსთვის და მრავალი მათგანი Core ML-ში გადაკონვერტირდება. ამის შესასწავლად შეგიძლიათ თვალი ადევნოთ Hub-ის ამ ფილტრს! Stable Diffusion XL მუშაობს Apple Silicon Mac-ებზე, რომლებზეც გაშვებულია macOS 14-ის საჯარო ბეტა ვერსია. ის ამჟამად იყენებს „attention“ მექანიზმის ორიგინალურ იმპლემენტაციას, რომელიც განკუთვნილია CPU + GPU გამოთვლითი ერთეულებისთვის. გაითვალისწინეთ, რომ „რეფაინერის“ ეტაპი ჯერ არ არის პორტირებული. ცნობისთვის, ქვემოთ მოცემულია მუშაობის მაჩვენებლები, რომლებიც მივიღეთ სხვადასხვა მოწყობილობაზე: გასულ თვეს განვიხილეთ 6-ბიტიანი პალეტიზაცია, ტრენინგის შემდგომი კვანტიზაციის მეთოდი, რომელიც 16-ბიტიან წონებს გარდაქმნის მხოლოდ 6-ბიტად თითო პარამეტრზე. ეს მნიშვნელოვნად ამცირებს მოდელის ზომას, მაგრამ ამაზე შორს წასვლა რთულია, რადგან ბიტების რაოდენობის შემცირებასთან ერთად მოდელის ხარისხი სულ უფრო და უფრო უარესდება. მოდელის ზომის შემდგომი შემცირების ერთ-ერთი ვარიანტია ტრენინგის დროს კვანტიზაციის გამოყენება, რაც გულისხმობს კვანტიზაციის ცხრილების სწავლას მოდელის დახვეწისას. ეს შესანიშნავად მუშაობს, მაგრამ ყოველი მოდელისთვის, რომლის კონვერტირებაც გსურთ, საჭიროა დახვეწის ფაზის გაშვება. ამის ნაცვლად, ჩვენ შევისწავლეთ განსხვავებული ალტერნატივა: შერეული ბიტის პალეტიზაცია (mixed-bit palettization). თითო პარამეტრზე 6 ბიტის გამოყენების ნაცვლად, ჩვენ ვამოწმებთ მოდელს და ვწყვეტთ, რამდენი კვანტიზაციის ბიტი გამოვიყენოთ თითოეული ფენისთვის. გადაწყვეტილებას ვიღებთ იმის მიხედვით, თუ რამდენად უწყობს ხელს თითოეული ფენა საერთო ხარისხის გაუარესებას, რასაც ვზომავთ კვანტიზებულ მოდელსა და float16 რეჟიმში არსებულ ორიგინალურ მოდელს შორის PSNR-ის შედარებით, რამდენიმე შეყვანის მონაცემისთვის. ჩვენ ვსწავლობთ ბიტების რამდენიმე სიღრმეს თითოეული ფენისთვის: 1 (!), 2, 4 და 8. თუ ფენა მნიშვნელოვნად უარესდება, მაგალითად, 2 ბიტის გამოყენებისას, გადავდივართ 4-ზე და ა.შ. ზოგიერთი ფენა შეიძლება შენარჩუნდეს 16-ბიტიან რეჟიმში, თუ ისინი კრიტიკულია ხარისხის შესანარჩუნებლად. ამ მეთოდის გამოყენებით, ჩვენ შეგვიძლია მივაღწიოთ ეფექტურ კვანტიზაციას, მაგალითად, საშუალოდ 2.8 ბიტს, და ვზომავთ გაუარესების გავლენას ყოველი კომბინაციისთვის, რომელსაც ვცდილობთ. ეს საშუალებას გვაძლევს, უკეთ ვიყოთ ინფორმირებული საუკეთესო კვანტიზაციის შესახებ, რომელიც უნდა გამოვიყენოთ ჩვენი სამიზნე ხარისხისა და ზომის ბიუჯეტებისთვის. მეთოდის საილუსტრაციოდ, განვიხილოთ შემდეგი კვანტიზაციის „რეცეპტები“, რომლებიც მივიღეთ ჩვენი ანალიზის ერთ-ერთი გაშვებიდან (მოგვიანებით ავხსნით, როგორ გენერირდა ისინი): ეს გვეუბნება, რომ მოდელის ორიგინალური ხარისხი, რომელიც იზომება PSNR-ით float16-ში, დაახლოებით 82 dB-ია. 8-ბიტიანი წრფივი კვანტიზაცია ამ მაჩვენებელს 66 dB-მდე ამცირებს. მაგრამ შემდეგ გვაქვს „რეცეპტი“, რომელიც შეკუმშავს მოდელს საშუალოდ 6.55 ბიტამდე თითო პარამეტრზე, ხოლო PSNR-ს ინარჩუნებს 80 dB-ზე. მეორე და მესამე „რეცეპტები“ კიდევ უფრო ამცირებენ მოდელის ზომას, ხოლო PSNR-ს ინარჩუნებენ 8-ბიტიანი წრფივი კვანტიზაციის მაჩვენებელზე მაღლა. ვიზუალური მაგალითებისთვის, ეს არის შედეგები მოთხოვნაზე „მაღალი ხარისხის ფოტო მოცურავე ძაღლის“, სადაც თითოეული სამი რეცეპტიდან გაშვებულია ერთი და იგივე „seed“-ით: პირველადი დასკვნები: ეს ტექნიკა შესანიშნავია Stable Diffusion XL-ისთვის, რადგან ჩვენ შეგვიძლია შევინარჩუნოთ დაახლოებით იგივე UNet ზომა, მიუხედავად იმისა, რომ პარამეტრების რაოდენობა გასამმაგდა წინა ვერსიასთან შედარებით. მაგრამ ეს მხოლოდ მასზე არ ვრცელდება! მეთოდის გამოყენება შეგიძლიათ ნებისმიერი Stable Diffusion Core ML მოდელისთვის. ქვემოთ მოცემული დიაგრამა აჩვენებს სიგნალის სიმძლავრეს (PSNR dB-ში) მოდელის ზომის შემცირების (float16 ზომის %) წინააღმდეგ stabilityai/stable-diffusion-xl-base-1.0-ისთვის. {1,2,4,6,8}-ბიტიანი მრუდები გენერირდება უფრო მეტი ფენის თანმიმდევრული პალეტიზაციით ფიქსირებული რაოდენობის ბიტების პალიტრის გამოყენებით. ფენები დალაგებული იყო მათი იზოლირებული გავლენის ზრდადი თანმიმდევრობით ბოლოდან ბოლომდე სიგნალის სიძლიერეზე, ასე რომ, კუმულაციური შეკუმშვის გავლენა მაქსიმალურად გადავადებულია. შერეული ბიტის მრუდი ეფუძნება ბიტების უფრო მაღალ რაოდენობაზე დაბრუნებას, როგორც კი ფენის იზოლირებული გავლენა ბოლოდან ბოლომდე სიგნალის მთლიანობაზე ზღვარს ქვემოთ დაეცემა. გაითვალისწინეთ, რომ პალეტიზაციაზე დაფუძნებული ყველა მრუდი აჭარბებს წრფივ 8-ბიტიან კვანტიზაციას იმავე მოდელის ზომაზე, გარდა 1-ბიტიანისა.