ამ ამოცანას გადავჭრით საბაჟო ინფერენსის ჰენდლერის გამოყენებით, რომელიც განახორციელებს მეტყველების ავტომატური ამოცნობის (ASR) და დიარიზაციის პაიპლაინს Inference Endpoints-ზე, ასევე მხარს დაუჭერს სპეკულაციურ დეკოდირებას. დიარიზაციის პაიპლაინის იმპლემენტაცია შთაგონებულია ცნობილი Insanely Fast Whisper-ით და ის დიარიზაციისთვის იყენებს Pyannote მოდელს. ეს ასევე იქნება იმის დემონსტრირება, თუ რამდენად მოქნილია Inference Endpoints-ები და რომ იქ პრაქტიკულად ყველაფრის ჰოსტინგი შეგიძლიათ. აქ მოცემულია კოდი, რომელსაც შეგიძლიათ მიჰყვეთ. გაითვალისწინეთ, რომ ენდპოინტის ინიციალიზაციის დროს, მთელი რეპოზიტორიუმი ერთდება, ასე რომ თქვენს handler.py-ს შეუძლია მიმართოს სხვა ფაილებს თქვენს რეპოზიტორიუმში, თუ არ გსურთ, რომ მთელი ლოგიკა ერთ ფაილში იყოს მოცემული. ამ შემთხვევაში, ჩვენ გადავწყვიტეთ, რომ ყველაფერი რამდენიმე ფაილად დაგვეყო სისუფთავის შესანარჩუნებლად: Pytorch 2.2-დან დაწყებული, SDPA მხარს უჭერს Flash Attention 2-ს ყოველგვარი დამატებითი კონფიგურაციის გარეშე, ამიტომ სწრაფი ინფერენსისთვის სწორედ ამ ვერსიას გამოვიყენებთ. აქ მოცემულია იმის მაღალი დონის დიაგრამა, თუ როგორ გამოიყურება ენდპოინტი შიგნიდან: ASR და დიარიზაციის პაიპლაინების იმპლემენტაცია მოდულარულია, რათა დააკმაყოფილოს გამოყენების ფართო სპექტრი — დიარიზაციის პაიპლაინი მუშაობს ASR-ის გამომუშავების საფუძველზე, და შეგიძლიათ გამოიყენოთ მხოლოდ ASR ნაწილი, თუ დიარიზაცია არ გჭირდებათ. დიარიზაციისთვის ჩვენ ვთავაზობთ Pyannote მოდელის გამოყენებას, რომელიც ამჟამად SOTA (State-of-the-Art) ღია კოდის იმპლემენტაციაა. ასევე დავამატებთ სპეკულაციურ დეკოდირებას, როგორც ინფერენსის დაჩქარების საშუალებას. დაჩქარება მიიღწევა უფრო მცირე და სწრაფი მოდელის გამოყენებით, რათა შემოგვთავაზოს გენერაციები, რომლებიც შემდგომში ვალიდირდება უფრო დიდი მოდელის მიერ. შეიტყვეთ მეტი იმის შესახებ, თუ როგორ მუშაობს ეს კონკრეტულად Whisper-თან ამ შესანიშნავ ბლოგპოსტში. სპეკულაციურ დეკოდირებას აქვს შეზღუდვები: დარწმუნდით, რომ გაითვალისწინებთ ზემოთ აღნიშნულს. თქვენი საწარმოო გამოყენების შემთხვევის მიხედვით, უფრო დიდი ბეჩების მხარდაჭერა შეიძლება უფრო სწრაფი იყოს, ვიდრე სპეკულაციური დეკოდირება. თუ არ გსურთ დამხმარე მოდელის გამოყენება, უბრალოდ დატოვეთ assistant_model კონფიგურაციაში, როგორც None. თუ იყენებთ დამხმარე მოდელს, Whisper-ისთვის შესანიშნავი არჩევანია დისტილირებული ვერსია. დაწყების უმარტივესი გზაა საბაჟო ჰენდლერის რეპოზიტორიუმის კლონირება რეპო დუპლიკატორის გამოყენებით. აქ მოცემულია მოდელის ჩატვირთვის ნაწილი handler.py-დან: შეგიძლიათ დააკონფიგურიროთ პაიპლაინი თქვენი საჭიროებების მიხედვით. ModelSettings, რომელიც config.py ფაილშია მოცემული, შეიცავს ინიციალიზაციისთვის გამოყენებულ პარამეტრებს, რომლებიც განსაზღვრავენ ინფერენსის დროს გამოსაყენებელ მოდელებს: პარამეტრების მორგება შესაძლებელია შესაბამისი სახელების მქონე გარემოს ცვლადების გადაცემით – ეს მუშაობს როგორც საბაჟო კონტეინერთან, ასევე ინფერენსის ჰენდლერთან. ეს Pydantic-ის ფუნქციაა. გარემოს ცვლადების კონტეინერში გადასაცემად build time-ის განმავლობაში, თქვენ მოგიწევთ ენდპოინტის შექმნა API გამოძახების საშუალებით (და არა ინტერფეისის მეშვეობით). მოდელების სახელების მუდმივად ჩაწერა შესაძლებელია გარემოს ცვლადების ნაცვლად, მაგრამ გაითვალისწინეთ, რომ დიარიზაციის პაიპლაინი მოითხოვს ტოკენის მკაფიო გადაცემას (hf_token). უსაფრთხოების მიზნით, თქვენ არ გაქვთ უფლება მუდმივად ჩაწეროთ თქვენი ტოკენი, რაც იმას ნიშნავს, რომ დიარიზაციის მოდელის გამოსაყენებლად მოგიწევთ ენდპოინტის შექმნა API გამოძახების საშუალებით. შეგახსენებთ, რომ დიარიზაციასთან დაკავშირებული ყველა წინასწარი და შემდგომი დამუშავების უტილიტა მოცემულია diarization_utils.py ფაილში. ერთადერთი აუცილებელი კომპონენტია ASR მოდელი. სურვილისამებრ, შეიძლება მითითებული იყოს დამხმარე მოდელი სპეკულაციური დეკოდირებისთვის, ხოლო დიარიზაციის მოდელი შეიძლება გამოყენებულ იქნას ტრანსკრიფციის მომხსენებლების მიხედვით დაყოფისთვის. თუ მხოლოდ ASR ნაწილი გჭირდებათ, შეგიძლიათ მიუთითოთ asr_model/assistant_model config.py-ში და განათავსოთ ერთი ღილაკის დაჭერით: Inference Endpoints-ზე განთავსებულ კონტეინერებში გარემოს ცვლადების გადასაცემად, დაგჭირდებათ ენდპოინტის პროგრამულად შექმნა მოწოდებული API-ის გამოყენებით. ქვემოთ მოცემულია გამოძახების მაგალითი: იმის უკეთ წარმოსაჩენად, თუ როდის არის დამხმარე მოდელის გამოყენება მომგებიანი, წარმოგიდგენთ k6-ით ჩატარებულ ბენჩმარკს: როგორც ხედავთ, ასისტენტური გენერაცია მნიშვნელოვნად აუმჯობესებს წარმადობას, როდესაც აუდიო მოკლეა (ბეჩის ზომა 1-ია). თუ აუდიო გრძელია, ინფერენსი ავტომატურად დაყოფს მას ბეჩებად, და სპეკულაციურმა დეკოდირებამ შესაძლოა უარყოფითად იმოქმედოს ინფერენსის დროზე იმ შეზღუდვების გამო, რომლებზეც ადრე ვისაუბრეთ. ყველა ინფერენსის პარამეტრი მოცემულია config.py-ში: რა თქმა უნდა, შეგიძლიათ დაამატოთ ან წაშალოთ პარამეტრები საჭიროებისამებრ. მომხსენებლების რაოდენობასთან დაკავშირებული პარამეტრები გადაეცემა დიარიზაციის პაიპლაინს, ხოლო ყველა სხვა პარამეტრი ძირითადად ASR პაიპლაინისთვისაა. sampling_rate მიუთითებს დასამუშავებელი აუდიოს სემპლირების სიხშირეს და გამოიყენება წინასწარი დამუშავებისთვის; assisted დროშა პაიპლაინს ეუბნება, გამოიყენოს თუ არა სპეკულაციური დეკოდირება. გახსოვდეთ, რომ ასისტენტური გენერაციისთვის batch_size აუცილებლად უნდა იყოს 1-ზე დაყენებული. განთავსების შემდეგ, გააგზავნეთ თქვენი აუდიო ინფერენსის პარამეტრებთან ერთად თქვენს ინფერენსის ენდპოინტზე, ასე (Python-ში): აქ "parameters" ველი არის ლექსიკონი, რომელიც შეიცავს ყველა იმ პარამეტრს, რომლის მორგებაც გსურთ InferenceConfig-დან. გაითვალისწინეთ, რომ InferenceConfig-ში არარსებული პარამეტრები იგნორირებული იქნება. ან InferenceClient-ით (არსებობს ასევე ასინქრონული ვერსია): ამ ბლოგპოსტში ჩვენ განვიხილეთ, თუ როგორ უნდა დავაყენოთ მოდულარული ASR + დიარიზაცია + სპეკულაციური დეკოდირების პაიპლაინი Hugging Face Inference Endpoints-ის გამოყენებით. ჩვენ მაქსიმალურად შევეცადეთ.