Inference Endpoints საშუალებას გვაძლევს დავწეროთ მორგებული დასკვნის ფუნქციები, რომლებსაც ქასთომ ჰენდლერები (custom handlers) ეწოდება. ისინი განსაკუთრებით გამოსადეგია, როდესაც მოდელი არ არის მხარდაჭერილი პირდაპირ `transformers`-ის მაღალი დონის აბსტრაქციის კონვეიერის მიერ. `transformers`-ის კონვეიერები (pipelines) გვთავაზობენ მძლავრ აბსტრაქციებს `transformers`-ზე დაფუძნებული მოდელების დასკვნის გასაშვებად. Inference Endpoints იყენებენ კონვეიერის API-ს, რათა მარტივად განათავსონ მოდელები რამდენიმე დაწკაპუნებით. თუმცა, Inference Endpoints-ის გამოყენება ასევე შესაძლებელია იმ მოდელების განსათავსებლად, რომლებსაც არ აქვთ კონვეიერი, ან თუნდაც არატრანსფორმერული მოდელების! ეს მიიღწევა მორგებული დასკვნის ფუნქციის გამოყენებით, რომელსაც ქასთომ ჰენდლერი ვუწოდეთ. მოდით, ვაჩვენოთ ეს პროცესი MusicGen-ის მაგალითზე. MusicGen-ისთვის ქასთომ ჰენდლერის ფუნქციის იმპლემენტაციისა და მისი განთავსებისთვის, დაგვჭირდება: ან უბრალოდ გამოვიყენოთ საბოლოო შედეგი და განვათავსოთ ჩვენი მორგებული MusicGen მოდელის რეპოზიტორიუმი, სადაც უბრალოდ მივყევით ზემოთ მოცემულ ნაბიჯებს :) პირველ რიგში, `facebook/musicgen-large` რეპოზიტორიუმს დავაკოპირებთ ჩვენს პროფილზე რეპოზიტორიუმის დუბლიკატორის გამოყენებით. შემდეგ, დაკოპირებულ რეპოზიტორიუმს დავამატებთ `handler.py` და `requirements.txt` ფაილებს. პირველ რიგში, ვნახოთ, როგორ ხდება დასკვნის გაშვება MusicGen-ის გამოყენებით. მოდით მოვისმინოთ, როგორი ჟღერადობა აქვს: სურვილისამებრ, შეგიძლიათ გამომავალი შედეგის პირობითობა აუდიო ფრაგმენტით განსაზღვროთ, ანუ შექმნათ დამხმარე ფრაგმენტი, რომელიც ტექსტის მიერ გენერირებულ აუდიოს შეაერთებს შეყვანილ აუდიოსთან. მოდით მოვისმინოთ: ორივე შემთხვევაში, `model.generate` მეთოდი ქმნის აუდიოს და მიჰყვება იმავე პრინციპებს, რასაც ტექსტის გენერაცია. ამის შესახებ მეტის წაკითხვა შეგიძლიათ ჩვენს ბლოგ-პოსტში „როგორ მოვახდინოთ გენერირება“. კარგი! ზემოთ აღწერილი ძირითადი გამოყენების გათვალისწინებით, მოდით განვათავსოთ MusicGen გასართობად და მოგებისთვის! პირველ რიგში, `handler.py` ფაილში განვსაზღვრავთ ქასთომ ჰენდლერს. ჩვენ შეგვიძლია გამოვიყენოთ Inference Endpoints-ის შაბლონი და გადავაწეროთ `__init__` და `__call__` მეთოდები ჩვენი მორგებული დასკვნის კოდით. `__init__` მოახდენს მოდელის და პროცესორის ინიციალიზაციას, ხოლო `__call__` აიღებს მონაცემებს და დააბრუნებს გენერირებულ მუსიკას. შეცვლილი `EndpointHandler` კლასის ნახვა შეგიძლიათ ქვემოთ. გამარტივების მიზნით, ამ მაგალითში ჩვენ მხოლოდ ტექსტიდან ვაგენერირებთ აუდიოს და არ ვაპირობებთ მას მელოდიით. შემდეგ, შევქმნით `requirements.txt` ფაილს, რომელიც შეიცავს ყველა იმ დამოკიდებულებას, რომელიც გვჭირდება ჩვენი დასკვნის კოდის გასაშვებად: ამ ორი ფაილის ჩვენს რეპოზიტორიუმში ატვირთვა საკმარისი იქნება მოდელის მოსამსახურებლად. ახლა შეგვიძლია შევქმნათ Inference Endpoint. გადადით Inference Endpoints-ის გვერდზე და დააჭირეთ „Deploy your first model“-ს. „Model repository“ ველში შეიყვანეთ თქვენი დუბლირებული რეპოზიტორიუმის იდენტიფიკატორი. შემდეგ აირჩიეთ სასურველი აპარატურა და შექმენით ენდპოინტი. ნებისმიერი ინსტანცია მინიმუმ 16 GB ოპერატიული მეხსიერებით საკმარისი უნდა იყოს `musicgen-large`-ისთვის. ენდპოინტის შექმნის შემდეგ, ის ავტომატურად გაეშვება და მზად იქნება მოთხოვნების მისაღებად. შეგვიძლია ენდპოინტის გამოკითხვა ქვემოთ მოცემული კოდის ფრაგმენტით. გამომავალ შედეგად ვხედავთ შემდეგ ტალღის ფორმის მიმდევრობას. აი, როგორ ჟღერს ის: ასევე შეგიძლიათ მიმართოთ ენდპოინტს `huggingface-hub` Python ბიბლიოთეკის `InferenceClient` კლასის გამოყენებით. გენერირებული მიმდევრობა შეგიძლიათ აუდიოდ გადააქციოთ, როგორც გსურთ. შეგიძლიათ გამოიყენოთ `scipy` Python-ში, რათა ის `.wav` ფაილში ჩაწეროთ. და ვოილა! ითამაშეთ ქვემოთ მოცემულ დემოსთან, რათა გამოსცადოთ ენდპოინტი. ამ ბლოგ-პოსტში ჩვენ ვაჩვენეთ, თუ როგორ უნდა განვათავსოთ MusicGen Inference Endpoints-ის გამოყენებით ქასთომ დასკვნის ჰენდლერით. იგივე ტექნიკა შეიძლება გამოყენებულ იქნას Hub-ის ნებისმიერი სხვა მოდელისთვის, რომელსაც არ აქვს დაკავშირებული კონვეიერი. ყველაფერი რაც თქვენ უნდა გააკეთოთ არის `handler.py` ფაილში `Endpoint Handler` კლასის გადაწერა და `requirements.txt` ფაილის დამატება თქვენი პროექტის დამოკიდებულებების ასახვისთვის.