SD Turbo და SDXL Turbo არის ორი სწრაფი გენერაციული ტექსტიდან გამოსახულების მოდელი, რომლებსაც შეუძლიათ გამოსაყენებელი სურათების გენერირება სულ მცირე ერთ ნაბიჯში, რაც მნიშვნელოვანი გაუმჯობესებაა წინა Stable Diffusion მოდელებისთვის ხშირად საჭირო 30-ზე მეტ ნაბიჯთან შედარებით. SD Turbo არის Stable Diffusion 2.1-ის დისტილირებული ვერსია, ხოლო SDXL Turbo არის SDXL 1.0-ის დისტილირებული ვერსია. ჩვენ ადრე ვაჩვენეთ, თუ როგორ უნდა დააჩქაროთ Stable Diffusion ინფერენცია ONNX Runtime-ით. ONNX Runtime არა მხოლოდ უზრუნველყოფს შესრულების უპირატესობებს SD Turbo-სა და SDXL Turbo-სთან ერთად გამოყენებისას, არამედ მოდელებს ხელმისაწვდომს ხდის Python-ის გარდა სხვა ენებზეც, როგორიცაა C# და Java. ამ პოსტში ჩვენ წარმოვადგენთ ოპტიმიზაციებს ONNX Runtime CUDA-სა და TensorRT-ის შესრულების პროვაიდერებში, რომლებიც მნიშვნელოვნად აჩქარებენ SD Turbo-სა და SDXL Turbo-ს ინფერენციას NVIDIA GPU-ებზე. ONNX Runtime-მა აჯობა PyTorch-ს ყველა (პარტიის ზომა, ნაბიჯების რაოდენობა) კომბინაციისთვის, გამტარუნარიანობის ზრდით SDXL Turbo მოდელისთვის 229%-მდე და SD Turbo მოდელისთვის 120%-მდე. ONNX Runtime CUDA-ს განსაკუთრებით კარგი შესრულება აქვს დინამიური ფორმისთვის, მაგრამ ასევე აჩვენებს შესამჩნევ გაუმჯობესებას PyTorch-თან შედარებით სტატიკური ფორმისთვის. ინფერენციის დასაჩქარებლად ONNX Runtime CUDA შესრულების პროვაიდერის გამოყენებით, შედით ჩვენს ოპტიმიზებულ SD Turbo-სა და SDXL Turbo ვერსიებზე Hugging Face-ზე. მოდელები გენერირებულია Olive-ის მიერ, რომელიც არის მარტივი გამოსაყენებელი მოდელის ოპტიმიზაციის ინსტრუმენტი აპარატურის გათვალისწინებით. გაითვალისწინეთ, რომ საუკეთესო შესრულებისთვის საჭიროა fp16 VAE-ის ჩართვა ბრძანების ხაზის მეშვეობით, როგორც ნაჩვენებია გაზიარებულ ოპტიმიზებულ ვერსიებში. SD და SDXL კონვეიერების Hugging Face-ზე განთავსებული ONNX ფაილებით გასაშვებად იხილეთ SD Turbo-ს გამოყენების მაგალითი და SDXL Turbo-ს გამოყენების მაგალითი. ინფერენციის დასაჩქარებლად ONNX Runtime TensorRT შესრულების პროვაიდერის გამოყენების ნაცვლად, მიჰყევით აქ მოცემულ ინსტრუქციებს. ქვემოთ მოცემულია SDXL Turbo მოდელის გამოყენებით ტექსტური მითითებით სურათის გენერირების მაგალითი: **ნახ. 1.** პატარა საყვარელი გრემლინი ქურთუკში – სურათი, გენერირებული ტექსტური მითითებით SDXL Turbo-ს გამოყენებით. გაითვალისწინეთ, რომ მაგალითის სურათი გენერირდა 4 ნაბიჯში, რაც აჩვენებს SD Turbo-სა და SDXL Turbo-ს შესაძლებლობას, გენერაცია მოახდინონ გამოსაყენებელი სურათების უფრო ნაკლებ ნაბიჯში, ვიდრე წინა Stable Diffusion მოდელები. Stable Diffusion მოდელების მოსახერხებელი გზით გამოსაცდელად იხილეთ ჩვენი ONNX Runtime გაფართოება Automatic1111-ის SD WebUI-სთვის. ეს გაფართოება საშუალებას იძლევა Stable Diffusion UNet მოდელის ოპტიმიზებულ შესრულებას NVIDIA GPU-ებზე და იყენებს ONNX Runtime CUDA შესრულების პროვაიდერს ინფერენციის გასაშვებად Olive-ით ოპტიმიზირებული მოდელების წინააღმდეგ. ამ დროისთვის, გაფართოება ოპტიმიზირებულია მხოლოდ Stable Diffusion 1.5-ისთვის. SD Turbo და SDXL Turbo მოდელები ასევე შეიძლება გამოყენებულ იქნას, მაგრამ შესრულების ოპტიმიზაციები ჯერ კიდევ მიმდინარეობს. ONNX Runtime-ის cross-platform, შესრულების და გამოყენებადობის უპირატესობების გამოყენებით, საზოგადოების წევრებმა ასევე შეიტანეს საკუთარი წვლილი ნიმუშებითა და UI ინსტრუმენტებით Stable Diffusion-ის ONNX Runtime-თან ერთად გამოყენებით. ეს საზოგადოებრივი წვლილი მოიცავს OnnxStack-ს, .NET ბიბლიოთეკას, რომელიც ეფუძნება ჩვენს წინა C# გაკვეთილს, რათა მომხმარებლებს მიაწოდოს მრავალფეროვანი შესაძლებლობები მრავალი სხვადასხვა Stable Diffusion მოდელისთვის C#-ისა და ONNX Runtime-ის გამოყენებით ინფერენციის შესრულებისას. გარდა ამისა, Oracle-მა გამოუშვა Stable Diffusion-ის ნიმუში Java-ით, რომელიც ინფერენციას აწარმოებს ONNX Runtime-ის თავზე. ეს პროექტი ასევე ეფუძნება ჩვენს C# გაკვეთილს. ჩვენ ჩავატარეთ SD Turbo და SDXL Turbo მოდელების ბენჩმარკინგი Standard_ND96amsr_A100_v4 VM-ით, A100-SXM4-80GB-ის გამოყენებით და Lenovo Desktop-ით RTX-4090 GPU-ით (WSL Ubuntu 20.04) 512x512 გარჩევადობის სურათების გენერირებისთვის LCM Scheduler-ისა და fp16 მოდელების გამოყენებით. შედეგები გაიზომა ამ სპეციფიკაციების გამოყენებით: ამ შედეგების გასამეორებლად, ჩვენ გირჩევთ გამოიყენოთ ინსტრუქციები, რომლებიც მოცემულია 'გამოყენების მაგალითის' განყოფილებაში. ვინაიდან SDXL Turbo-ს ორიგინალი VAE ვერ მუშაობს fp16 სიზუსტით, SDXL Turbo-ს ტესტირებისას გამოვიყენეთ sdxl-vae-fp16-fix. არსებობს მცირე განსხვავებები მის გამომავალსა და ორიგინალური VAE-ის გამომავალს შორის, მაგრამ დეკოდირებული სურათები საკმარისად ახლოსაა უმეტესი მიზნებისთვის. PyTorch კონვეიერმა სტატიკური ფორმისთვის გამოიყენა channel-last მეხსიერების ფორმატი და torch.compile reduce-overhead რეჟიმში. შემდეგი დიაგრამები ასახავს გამტარუნარიანობას (სურათები წამში) vs. სხვადასხვა (პარტიის ზომა, ნაბიჯების რაოდენობა) კომბინაციები სხვადასხვა ფრეიმვორკისთვის. აღსანიშნავია, რომ თითოეული ზოლის ზემოთ მოცემული წარწერა მიუთითებს აჩქარების პროცენტს Torch Compile-თან შედარებით – მაგალითად, პირველ დიაგრამაზე, ORT_TRT (სტატიკური) 31%-ით უფრო სწრაფია ვიდრე Torch (კომპილაცია) (პარტია, ნაბიჯები) კომბინაციისთვის (4, 1). ჩვენ ავირჩიეთ 1 და 4 ნაბიჯი, რადგან SD Turbo-სა და SDXL Turbo-ს შეუძლიათ გამოსაყენებელი სურათების გენერირება სულ მცირე 1 ნაბიჯში, მაგრამ ჩვეულებრივ საუკეთესო ხარისხის სურათებს აწარმოებენ 3-5 ნაბიჯში. ქვემოთ მოცემული გრაფიკები ასახავს გამტარუნარიანობას (სურათები წამში) SDXL Turbo მოდელისთვის როგორც სტატიკური, ასევე დინამიური ფორმით. შედეგები შეგროვდა A100-SXM4-80GB GPU-ზე სხვადასხვა (პარტიის ზომა, ნაბიჯების რაოდენობა) კომბინაციებისთვის. დინამიური ფორმისთვის, TensorRT ძრავა მხარს უჭერს პარტიის ზომას 1-დან 8-მდე და სურათის ზომას 512x512-დან 768x768-მდე, მაგრამ ოპტიმიზირებულია პარტიის ზომისთვის 1.