მიუხედავად იმისა, რომ გენერირებული აუდიოები მაღალი ხარისხისაა, ორიგინალური იმპლემენტაციით ინფერენციის გაშვება ძალიან ნელია: 10 წამიანი აუდიო ნიმუშის გენერირებას 30 წამზე მეტი სჭირდება. ეს გამოწვეულია რამდენიმე ფაქტორის კომბინაციით, მათ შორის ღრმა მრავალსაფეხურიანი მოდელირების მიდგომით, დიდი ჩექპოინტის ზომებით და არაოპტიმიზირებული კოდით. ამ ბლოგ პოსტში ჩვენ ვაჩვენებთ, თუ როგორ გამოვიყენოთ AudioLDM 2 Hugging Face 🧨 Diffusers ბიბლიოთეკაში, განვიხილავთ კოდის სხვადასხვა ოპტიმიზაციას, როგორიცაა ნახევრად ზუსტი გამოთვლები (half-precision), Flash Attention და კომპილაცია, ასევე მოდელის ოპტიმიზაციებს, როგორიცაა სქეჯულერის არჩევანი და ნეგატიური მოთხოვნები (negative prompting), რათა შევამციროთ ინფერენციის დრო 10-ჯერ მეტად, გამომავალი აუდიოს ხარისხის მინიმალური გაუარესებით. ბლოგ პოსტს თან ახლავს გამარტივებული Colab ნოუთბუქიც, რომელიც შეიცავს მთელ კოდს, მაგრამ ნაკლებ ახსნა-განმარტებებს. წაიკითხეთ ბოლომდე, რათა გაიგოთ, როგორ შექმნათ 10 წამიანი აუდიო ნიმუში სულ რაღაც 1 წამში! Stable Diffusion-ით შთაგონებული, AudioLDM 2 არის ტექსტიდან აუდიოს გენერირების ლატენტური დიფუზიური მოდელი (LDM), რომელიც ტექსტური ემბედინგებიდან სწავლობს უწყვეტ აუდიო წარმოდგენებს. გენერირების მთლიანი პროცესი შემდეგნაირად არის შეჯამებული: CLAP (Contrastive Language-Audio Pretraining) ტექსტური ემბედინგები გაწვრთნილია შესაბამისი აუდიო ნიმუშის ემბედინგებთან შესაბამისობისთვის, ხოლო Flan-T5 ემბედინგები უკეთ წარმოაჩენს ტექსტის სემანტიკას. Diffusers-ის იმპლემენტაციაში, ეს პროექციები განსაზღვრულია AudioLDM2ProjectionModel-ის მიერ. GPT2 ენის მოდელი ქმნის დამატებით ემბედინგებს, რომლებიც შემდეგ გამოიყენება ლატენტური დიფუზიური მოდელის (LDM) მიერ. LDM განმეორებით ქმნის ლატენტურ წარმოდგენებს, ხოლო საწყისი ლატენტური ცვლადი აღებულია ნორმალური განაწილებიდან. LDM-ის UNet უნიკალურია იმით, რომ მას ორი ნაკრები cross-attention ემბედინგი შეაქვს – ერთი GPT2 ენის მოდელიდან და მეორე Flan-T5-დან, განსხვავებით LDM-ების უმეტესობისგან, რომლებიც ერთ cross-attention კონდიციონირებას იყენებენ. საბოლოოდ, VAE დეკოდერი გარდაქმნის ლატენტურ წარმოდგენას, ხოლო ვოკოდერი ქმნის საბოლოო აუდიო გამოსავალს. AudioLDM 2 მოდელის გაწვრთნის სრული დეტალებისთვის მკითხველი მიმართულია AudioLDM 2-ის სტატიას. Hugging Face 🧨 Diffusers გთავაზობთ end-to-end ინფერენციის პაიპლაინ კლასს `AudioLDM2Pipeline`, რომელიც ამ მრავალსაფეხურიან გენერირების პროცესს აერთიანებს ერთ გამოსაძახებელ ობიექტში, რაც საშუალებას გაძლევთ შექმნათ აუდიო ნიმუშები ტექსტიდან სულ რამდენიმე ხაზის კოდით. AudioLDM 2 სამი ვარიანტით არის წარმოდგენილი. ამ ჩექპოინტებიდან ორი გამოიყენება ტექსტიდან აუდიოს გენერირების ზოგადი ამოცანისთვის. მესამე ჩექპოინტი ექსკლუზიურად გაწვრთნილია ტექსტიდან მუსიკის გენერირებისთვის. ახლა, როცა განვიხილეთ AudioLDM 2-ის გენერირების პროცესის ზოგადი მიმოხილვა, მოდით ეს თეორია პრაქტიკაში გამოვცადოთ! ამ ტუტორიალის მიზნებისთვის, ჩვენ ინიციალიზაციას გავუკეთებთ პაიპლაინს `cvssp/audioldm2` საბაზისო ჩექპოინტიდან წინასწარ გაწვრთნილი წონებით. მთლიანი პაიპლაინის ჩატვირთვა შეგვიძლია `.from_pretrained` მეთოდის გამოყენებით, რომელიც ინიციალიზაციას გაუკეთებს პაიპლაინს და ჩატვირთავს წინასწარ გაწვრთნილ წონებს. პაიპლაინის GPU-ზე გადატანა შესაძლებელია ისევე, როგორც სტანდარტული PyTorch nn მოდულის. ჩვენ განვსაზღვრავთ გენერატორს და დავაყენებთ სიდს (seed) რეპროდუცირებადობისთვის. ეს საშუალებას მოგვცემს შევცვალოთ ჩვენი მოთხოვნები (prompts) და დავაკვირდეთ მათ გავლენას გენერაციებზე LDM მოდელში საწყისი ლატენტების დაფიქსირებით. ახლა მზად ვართ ჩვენი პირველი გენერაციისთვის! ამ ნოუთბუქის განმავლობაში გამოვიყენებთ ერთსა და იმავე მაგალითს, სადაც აუდიო გენერაციებს დავაკონდიცირებთ ფიქსირებულ ტექსტურ მოთხოვნაზე და გამოვიყენებთ ერთსა და იმავე სიდს. `audio_length_in_s` არგუმენტი აკონტროლებს გენერირებული აუდიოს სიგრძეს. ის ნაგულისხმევად უდრის იმ აუდიო სიგრძეს, რომელზეც LDM იყო გაწვრთნილი (10.24 წამი). ამ გაშვებას დაახლოებით 13 წამი დასჭირდა გენერირებისთვის. მოდით მოვუსმინოთ გამომავალ აუდიოს: ზუსტად ჩვენს ტექსტურ მოთხოვნას ჰგავს! ხარისხი კარგია, მაგრამ მაინც შეინიშნება ფონური ხმაურის არტეფაქტები. ჩვენ შეგვიძლია პაიპლაინს მივაწოდოთ დამატებითი პარამეტრები.