TensorFlow მოდელების განთავსებისას, მრავალფეროვანი ვარიანტები გაქვთ. თქვენი გამოყენების შემთხვევის მიხედვით, შესაძლოა მოგინდეთ მოდელის ექსპოზირება, როგორც ენდპოინტი, ან მისი უშუალოდ აპლიკაციაში ჩატვირთვა. TensorFlow გთავაზობთ ინსტრუმენტებს, რომლებიც ამ სხვადასხვა სცენარებს ერგება. ამ პოსტში ნახავთ, თუ როგორ უნდა განათავსოთ Vision Transformer (ViT) მოდელი (გამოსახულების კლასიფიკაციისთვის) ლოკალურად TensorFlow Serving-ის (TF Serving) გამოყენებით. ეს დეველოპერებს საშუალებას მისცემს, მოდელი ექსპოზიციაში გაუშვან REST ან gRPC ენდპოინტად. გარდა ამისა, TF Serving მხარს უჭერს მრავალ განთავსებისთვის სპეციფიკურ ფუნქციას, როგორიცაა მოდელის „გახურება“ (model warmup), სერვერული პაკეტური დამუშავება (server-side batching) და სხვა. ამ პოსტში ნაჩვენები სრული მოქმედი კოდისთვის იხილეთ Colab Notebook, რომელიც დასაწყისშია მითითებული. 🤗 Transformers-ის ყველა TensorFlow მოდელს აქვს მეთოდი სახელად `save_pretrained()`. მისი მეშვეობით შეგიძლიათ მოდელის წონები მოახდინოთ სერიალიზაცია h5 ფორმატში, ასევე დამოუკიდებელ SavedModel ფორმატში. TF Serving-ს სჭირდება, რომ მოდელი იყოს SavedModel ფორმატში. ასე რომ, მოდით, ჯერ ჩავტვირთოთ Vision Transformer მოდელი და შევინახოთ: `save_pretrained()` ნაგულისხმევად ჯერ შექმნის ვერსიის დირექტორიას მოწოდებულ გზაზე. ასე რომ, საბოლოოდ გზა ხდება: `{temp_model_dir}/saved_model/{version}`. SavedModel-ის სერვისის ხელმოწერის შემოწმება შეგვიძლია შემდეგნაირად: ეს უნდა დაბეჭდოს: როგორც შეამჩნევთ, მოდელი იღებს ერთ 4-განზომილებიან შეტანას (კერძოდ `pixel_values`), რომელსაც აქვს შემდეგი ღერძები: (`batch_size`, `num_channels`, `height`, `width`). ამ მოდელისთვის დასაშვები სიმაღლე და სიგანე დაყენებულია 224-ზე, ხოლო არხების რაოდენობა 3-ზე. ამის გადამოწმება შეგიძლიათ მოდელის `config` არგუმენტის შემოწმებით (`model.config`). მოდელი იძლევა 1000-განზომილებიან ლოგიტების ვექტორს. როგორც წესი, ყოველ ML მოდელს აქვს გარკვეული წინასწარი და შემდგომი დამუშავების ნაბიჯები. ViT მოდელი არ არის გამონაკლისი. ძირითადი წინასწარი დამუშავების ნაბიჯები მოიცავს: * გამოსახულების პიქსელების მნიშვნელობების მასშტაბირება [0, 1] დიაპაზონამდე. * მასშტაბირებული პიქსელის მნიშვნელობების ნორმალიზება [-1, 1] დიაპაზონამდე. * გამოსახულების ზომის შეცვლა ისე, რომ მას ჰქონდეს სივრცითი გარჩევადობა (224, 224). ამის დადასტურება შეგიძლიათ მოდელთან დაკავშირებული გამოსახულების პროცესორის შემოწმებით: ეს უნდა დაბეჭდოს: რადგან ეს არის გამოსახულების კლასიფიკაციის მოდელი, რომელიც წინასწარ არის გაწვრთნილი ImageNet-1k მონაცემთა ნაკრებზე, მოდელის გამოსავალი უნდა დაუკავშირდეს ImageNet-1k კლასებს, როგორც შემდგომი დამუშავების ნაბიჯი. დეველოპერების კოგნიტური დატვირთვის შესამცირებლად და ტრენინგ-სერვისის გადახრის მინიმიზაციისთვის, ხშირად კარგი იდეაა მოდელის მიწოდება, რომელსაც ჩაშენებული აქვს წინასწარი და შემდგომი დამუშავების უმეტესი ნაბიჯი. ამიტომ, მოდელი უნდა მოახდინოთ სერიალიზაცია SavedModel-ის სახით ისე, რომ ზემოთ ნახსენები დამუშავების ოპერაციები ჩაშენდეს მის გამოთვლით გრაფში. წინასწარი დამუშავებისთვის, გამოსახულების ნორმალიზაცია ერთ-ერთი ყველაზე არსებითი კომპონენტია: ასევე საჭიროა გამოსახულების ზომის შეცვლა და მისი ტრანსპონირება ისე, რომ მას ჰქონდეს წამყვანი არხის განზომილებები 🤗 Transformers-ის სტანდარტული ფორმატის მიხედვით. ქვემოთ მოცემული კოდის ფრაგმენტი გვიჩვენებს ყველა წინასწარი დამუშავების ნაბიჯს: **შენიშვნა მოდელისთვის სტრიქონული შეტანის მიღების შესახებ:** როდესაც საქმე გვაქვს სურათებთან REST ან gRPC მოთხოვნების მეშვეობით, მოთხოვნის დატვირთვის ზომა ადვილად შეიძლება გაიზარდოს გადაცემული სურათების გარჩევადობის მიხედვით. სწორედ ამიტომ კარგი პრაქტიკაა მათი საიმედოდ შეკუმშვა და შემდეგ მოთხოვნის დატვირთვის მომზადება. ახლა თქვენ აღჭურვილი ხართ წინასწარი დამუშავების ოპერაციებით, რომლებიც შეგიძლიათ ჩააშენოთ მოდელის არსებულ გამოთვლით გრაფში. ამ სექციაში ასევე ჩააშენებთ შემდგომი დამუშავების ოპერაციებს გრაფში და მოახდენთ მოდელის ექსპორტს! შეგიძლიათ ჯერ კონკრეტული ფუნქცია გამოყვანოთ მოდელის `forward pass` მეთოდიდან (`call()`), რათა მოდელი კარგად იყოს კომპილირებული გრაფში. ამის შემდეგ, შეგიძლიათ მიჰყვეთ შემდეგ ნაბიჯებს: 1. შეტანის გადაცემა წინასწარი დამუშავების ოპერაციებში. 2. წინასწარი დამუშავების შეტანის გადაცემა გამოყვანილ კონკრეტულ ფუნქციაში. 3. გამოსავლის შემდგომი დამუშავება და მათი ლამაზად ფორმატირებულ ლექსიკონში დაბრუნება. ახლა დროა მოდელის ექსპორტის! ექსპორტის შემდეგ, მოდით, კიდევ ერთხელ შევამოწმოთ მოდელის ხელმოწერები: შეგიძლიათ შეამჩნიოთ, რომ მოდელის ხელმოწერა ახლა შეცვლილია. კერძოდ, შეტანის ტიპი ახლა არის სტრიქონი და მოდელი აბრუნებს ორ რამეს: ნდობის ქულას (`confidence score`) და სტრიქონულ ლეიბლს (`string label`). იმ პირობით, რომ უკვე დაინსტალირებული გაქვთ TF Serving (ეს Colab Notebook-შია განხილული), ახლა მზად ხართ ამ მოდელის განთავსებისთვის! ამისთვის მხოლოდ ერთი ბრძანებაა საჭირო: ზემოთ მოცემული ბრძანებიდან მნიშვნელოვანი პარამეტრებია: * `rest_api_port` აღნიშნავს პორტის ნომერს, რომელსაც TF Serving გამოიყენებს თქვენი მოდელის REST ენდპოინტის განსათავსებლად. ნაგულისხმევად, TF Serving იყენებს 8500 პორტს gRPC ენდპოინტისთვის. * `model_name` აკონკრეტებს მოდელის სახელს (შეიძლება იყოს ნებისმიერი), რომელიც გამოყენებული იქნება API-ების გამოსაძახებლად. * `model_base_path` აღნიშნავს მოდელის საბაზისო გზას, რომელსაც TF Serving გამოიყენებს მოდელის უახლესი ვერსიის ჩასატვირთად. (მხარდაჭერილი პარამეტრების სრული სია აქ არის.) და voila! რამდენიმე წუთში, თქვენ გექნებათ გაშვებული და მოქმედი განთავსებული მოდელი ორი ენდპოინტით - REST და gRPC. გაიხსენეთ, რომ მოდელი ექსპორტირებული იყო ისე, რომ ის იღებს სტრიქონულ შეტანას, კოდირებულს base64 ფორმატით. ასე რომ, მოთხოვნის დატვირთვის შესაქმნელად შეგიძლიათ გააკეთოთ მსგავსი რამ: