Hugging Face ეკოსისტემა ზუსტად ისეთ მზა და მარტივად გამოსაყენებელ ოპტიმიზაციის ხელსაწყოებს გვთავაზობს, რომელთა გამოყენებაც ბიბლიოთეკაში არსებულ ყველა მოდელზეა შესაძლებელი. ეს ამარტივებს მეხსიერების მოხმარების შემცირებასა და ინფერენსის გაუმჯობესებას მხოლოდ რამდენიმე დამატებითი კოდის ხაზით. ამ პრაქტიკულ სახელმძღვანელოში გაჩვენებთ, თუ როგორ შეგიძლიათ მოახდინოთ Bark-ის, Hugging Face Transformers-ის მიერ მხარდაჭერილი ტექსტიდან მეტყველებად გარდამქმნელი (TTS) მოდელის ოპტიმიზაცია, სამი მარტივი ოპტიმიზაციის საფუძველზე. ეს ოპტიმიზაციები ეფუძნება მხოლოდ Hugging Face ეკოსისტემის 'Transformers', 'Optimum' და 'Accelerate' ბიბლიოთეკებს. ეს სახელმძღვანელო ასევე აჩვენებს, თუ როგორ შეიძლება არაოპტიმიზებული მოდელისა და მისი სხვადასხვა ოპტიმიზაციის ბენჩმარკინგი. სახელმძღვანელოს უფრო გამარტივებული ვერსიისთვის, ნაკლები ახსნა-განმარტებით, მაგრამ სრული კოდით, იხილეთ თანდართული Google Colab. ეს ბლოგ-პოსტი შემდეგნაირად არის ორგანიზებული: Bark არის ტრანსფორმერებზე დაფუძნებული ტექსტიდან მეტყველებად გარდამქმნელი მოდელი, რომელიც Suno AI-მ წარმოადგინა suno-ai/bark-ში. მას შეუძლია აუდიო გამომავალი მასალის ფართო სპექტრის გენერირება, მათ შორის მეტყველების, მუსიკის, ფონური ხმაურის და მარტივი ხმოვანი ეფექტების. გარდა ამისა, მას შეუძლია არავერბალური კომუნიკაციის ხმების გენერირება, როგორიცაა სიცილი, კვნესა და ქვითინი. Bark ხელმისაწვდომია Hugging Face Transformers-ში v4.31.0 ვერსიიდან მოყოლებული! შეგიძლიათ გამოსცადოთ Bark და აღმოაჩინოთ მისი შესაძლებლობები აქ. Bark ოთხი ძირითადი მოდელისგან შედგება: ამ სტატიის დაწერის მომენტში ხელმისაწვდომია Bark-ის ორი ჩექპოინტი: მცირე და დიდი ვერსია. წინასწარ გაწვრთნილი Bark-ის მცირე და დიდი ჩექპოინტების ჩატვირთვა შესაძლებელია Hugging Face Hub-ზე არსებული წინასწარ გაწვრთნილი წონებიდან. შეგიძლიათ შეცვალოთ repo-id იმ ჩექპოინტის ზომით, რომლის გამოყენებაც გსურთ. ჩვენ ნაგულისხმევად გამოვიყენებთ მცირე ჩექპოინტს, რათა შევინარჩუნოთ სიჩქარე. მაგრამ შეგიძლიათ სცადოთ დიდი ჩექპოინტი "suno/bark-small"-ის ნაცვლად "suno/bark"-ის გამოყენებით. მოათავსეთ მოდელი აქსელერატორის მოწყობილობაზე, რათა მაქსიმალურად გამოიყენოთ ოპტიმიზაციის ტექნიკა: ჩატვირთეთ პროცესორი, რომელიც იზრუნებს ტოკენიზაციასა და არჩევითი სპიკერის ემბედინგებზე. ამ ნაწილში განვიხილავთ, თუ როგორ გამოვიყენოთ Hugging Face Optimum და Accelerate ბიბლიოთეკების მზა ფუნქციები Bark მოდელის ოპტიმიზაციისთვის, კოდში მინიმალური ცვლილებებით. მოდით, მოვამზადოთ შეყვანის მონაცემები და განვსაზღვროთ ფუნქცია Bark-ის გენერირების მეთოდის ლატენტურობისა და GPU მეხსიერების მოხმარების გასაზომად. ლატენტურობისა და GPU მეხსიერების მოხმარების გაზომვა მოითხოვს სპეციფიკური CUDA მეთოდების გამოყენებას. ჩვენ განვსაზღვრავთ დამხმარე ფუნქციას, რომელიც ზომავს როგორც ლატენტურობას, ასევე მოდელის GPU მეხსიერების მოხმარებას ინფერენსის დროს. ამ მეტრიკების ზუსტი სურათის მისაღებად, ჩვენ საშუალოდ ვიღებთ მითითებული რაოდენობის გამეორებებზე nb_loops: ნებისმიერი ოპტიმიზაციის განხორციელებამდე, მოდით, გავზომოთ საბაზისო მოდელის წარმადობა და მოვუსმინოთ გენერირებულ მაგალითს. ჩვენ ჩავატარებთ მოდელის ბენჩმარკინგს ხუთი იტერაციის განმავლობაში და წარმოვადგენთ მეტრიკების საშუალო მაჩვენებელს: გამომავალი: ახლა მოუსმინეთ გამომავალს: გამომავალი ასე ჟღერს (ჩამოტვირთეთ აუდიო): აქ იტერაციების რაოდენობა სინამდვილეში საკმაოდ დაბალია. შედეგების ზუსტად გასაზომად და შესადარებლად, ის მინიმუმ 100-მდე უნდა გაიზარდოს. nb_loops-ის გაზრდის ერთ-ერთი მთავარი მიზეზი ის არის, რომ გენერირებული მეტყველების სიგრძე მნიშვნელოვნად განსხვავდება სხვადასხვა იტერაციას შორის, თუნდაც ფიქსირებული შეყვანის შემთხვევაში. ამის ერთ-ერთი შედეგი ის არის, რომ measure_latency_and_memory_use-ის მიერ გაზომილი ლატენტურობა შესაძლოა არ ასახავდეს ოპტიმიზაციის ტექნიკის რეალურ წარმადობას! ბლოგ-პოსტის ბოლოს წარმოდგენილი ბენჩმარკინგი იუწყება 100 იტერაციაზე საშუალოდ მიღებულ შედეგებს, რაც მოდელის წარმადობის ნამდვილ ინდიკაციას იძლევა. Better Transformer არის Hugging Face Optimum-ის ფუნქცია, რომელიც ქერნელის შერწყმას ასრულებს კულისებში. ეს ნიშნავს, რომ მოდელის გარკვეული ოპერაციები უკეთ ოპტიმიზირებული იქნება GPU-ზე და მოდელი საბოლოოდ უფრო სწრაფი გახდება. უფრო კონკრეტულად, Hugging Face Transformers-ის მიერ მხარდაჭერილი მოდელების უმეტესობა ეყრდნობა ყურადღების (attention) მექანიზმს, რაც მათ საშუალებას აძლევს, გამომავალი მონაცემების გენერირებისას შერჩევითად კონცენტრირდნენ შეყვანის გარკვეულ ნაწილებზე. ეს საშუალებას აძლევს მოდელებს ეფექტურად გაუმკლავდნენ შორეულ დამოკიდებულებებს და აღბეჭდონ მონაცემებში არსებული რთული კონტექსტუალური ურთიერთობები. არაოპტიმიზებული ყურადღების (attention) ტექნიკა შეიძლება მნიშვნელოვნად ოპტიმიზირებული იყოს Flash Attention-ის სახელწოდებით ცნობილი ტექნიკის მეშვეობით, რომელიც ავტორებმა Dao et. al.-მა 2022 წელს შემოგვთავაზეს. Flash Attention არის უფრო სწრაფი და ეფექტური ალგორითმი ყურადღების (attention) გამოთვლებისთვის, რომელიც აერთიანებს ტრადიციულ მეთოდებს (როგორიცაა tiling და ხელახალი გამოთვლა) მეხსიერების მოხმარების შესამცირებლად და სიჩქარის გასაზრდელად. წინა ალგორითმებისგან განსხვავებით, Flash Attention ამცირებს მეხსიერების მოხმარებას კვადრატულიდან წრფივამდე თანმიმდევრობის სიგრძის მიხედვით, რაც მას განსაკუთრებით გამოსადეგს ხდის იმ აპლიკაციებისთვის, სადაც მეხსიერების ეფექტურობა მნიშვნელოვანია. აღმოჩნდა, რომ Flash Attention მხარდაჭერილია Hugging Face Better Transformer-ის მიერ დამატებითი კონფიგურაციის გარეშე! მოდელის Hugging Face Better Transformer-ში ექსპორტისთვის და Flash Attention-ის ჩასართავად საჭიროა კოდის ერთი ხაზი: გამომავალი: გამომავალი ასე ჟღერს (ჩამოტვირთეთ აუდიო): რას გვთავაზობს ეს? არ ხდება წარმადობის გაუარესება, რაც იმას ნიშნავს, რომ შეგიძლიათ მიიღოთ ზუსტად იგივე შედეგი, როგორც ამ ფუნქციის გარეშე, თანაც 20-დან 30%-მდე სიჩქარის მატებით! გსურთ მეტის გაგება? იხილეთ ეს ბლოგ-პოსტი. უმეტესობა AI მოდელებისა, როგორც წესი, იყენებს შენახვის ფორმატს, რომელსაც ეწოდება ერთმაგი სიზუსტე.