Hugging Face-მა გამოუშვა pytorch_block_sparse: ახალი ინსტრუმენტი ნერვული ქსელების დასაჩქარებლად და დასაპატარავებლად
კომპანია Hugging Face-მა გამოუშვა pytorch_block_sparse – გაფართოება, რომელიც მიზნად ისახავს ნერვულ ქსელებში მეჩხერი მატრიცების გამოთვლების არაეფექტურობის პრობლემის გადაჭრას. ეს ახალი ბიბლიოთეკა შესაძლებელს ხდის უფრო მცირე ზომის და სწრაფი მოდელების შექმნას, რაც მნიშვნელოვნად ამცირებს საოპერაციო ხარჯებს და აუმჯობესებს საბოლოო მომხმარებლის გამოცდილებას. ის წარმოადგენს torch.nn.Linear-ის მარტივ შემცვლელს, რომელიც იყენებს C++ CUDA შაბლონებსა და CUTLASS-ს მაღალეფექტური ბლოკ-მეჩხერი მატრიცის გამრავლები
წინა ბლოგ პოსტებში ჩვენ წარმოგიდგინეთ მეჩხერი მატრიცები და მათი შესაძლებლობები ნერვული ქსელების გასაუმჯობესებლად. ძირითადი დაშვება ისაა, რომ სრულ მკვრივ ფენებს ხშირად ჭარბი შესაძლებლობები აქვთ და მათი „მოკვეცა“ შესაძლებელია სიზუსტის მნიშვნელოვანი დაკარგვის გარეშე. ზოგიერთ შემთხვევაში, მეჩხერ ხაზოვან ფენებს შეუძლიათ სიზუსტის ან/და განზოგადების გაუმჯობესებაც კი. მთავარი პრობლემა ისაა, რომ ამჟამად არსებული კოდი, რომელიც მეჩხერი ალგებრული გამოთვლებს უჭერს მხარს, ეფექტურობით სერიოზულად მოიკოჭლებს. ჩვენ ასევე ჯერ კიდევ ველოდებით PyTorch-ის ოფიციალურ მხარდაჭერას. სწორედ ამიტომ მოგვეცა მოთმინება ამოგვეწურა და ზაფხულში დრო დავუთმეთ ამ „ხარვეზის“ გამოსწორებას.
დღეს, მოხარულები ვართ წარმოგიდგინოთ გაფართოება pytorch_block_sparse. თავისთავად, ან უკეთესიც კი, სხვა მეთოდებთან, როგორიცაა დისტილაცია და კვანტიზაცია, კომბინაციაში, ეს ბიბლიოთეკა იძლევა საშუალებას შეიქმნას ნერვული ქსელები, რომლებიც როგორც მცირე ზომისაა, ასევე სწრაფი, რაც Hugging Face-ის აზრით, გადამწყვეტია იმისთვის, რომ ნებისმიერ მსურველს შეეძლოს ნერვული ქსელების გამოყენება წარმოებაში დაბალ ფასად და საბოლოო მომხმარებლის გამოცდილების გასაუმჯობესებლად. მოწოდებული BlockSparseLinear მოდული არის torch.nn.Linear-ის მარტივი შემცვლელი და მისი გამოყენება თქვენს მოდელებში უმარტივესია. გაფართოება ასევე გთავაზობთ BlockSparseModelPatcher-ს, რომელიც საშუალებას გაძლევთ არსებული მოდელი „მფრინავად“ შეცვალოთ, რაც ნაჩვენებია ამ მაგალითის ნოუთბუქში.
ასეთი მოდელის გაწვრთნა შესაძლებელია ჩვეულებრივად, თქვენი მოდელის საწყისი კოდის ყოველგვარი ცვლილების გარეშე. ეს გაფართოება ეფუძნება Yulhwa Kim-ის cutlass tilesparse კონცეფციის დასტურს. იგი იყენებს C++ CUDA შაბლონებს ბლოკ-მეჩხერი მატრიცის გამრავლებისთვის, CUTLASS-ზე დაფუძნებით. CUTLASS არის CUDA C++ შაბლონების კრებული მაღალეფექტური CUDA ბირთვების იმპლემენტაციისთვის. CUTLASS-ით, შესაძლებელია cuBLAS-ის წარმადობასთან მიახლოება მორგებულ ბირთვებზე, ასამბლერული ენის კოდის გამოყენების გარეშე. უახლესი ვერსიები მოიცავს Ampere Tensor Core-ის ყველა პრიმიტივს, რაც 10-ჯერ ან მეტ დაჩქარებას იძლევა სიზუსტის შეზღუდული დაკარგვით. pytorch_block_sparse-ის შემდეგი ვერსიები გამოიყენებენ ამ პრიმიტივებს, რადგან ბლოკური მეჩხერობა 100%-ით თავსებადია Tensor Cores-ის მოთხოვნებთან.
ბიბლიოთეკის ამჟამინდელ ეტაპზე, მეჩხერი მატრიცების წარმადობა დაახლოებით ორჯერ ნელია, ვიდრე მათი cuBLAS-ისთვის ოპტიმიზებული მკვრივი ანალოგი, და ჩვენ დარწმუნებულები ვართ, რომ მომავალში შევძლებთ ამის გაუმჯობესებას. ეს არის უზარმაზარი გაუმჯობესება PyTorch-ის მეჩხერი მატრიცებთან შედარებით: მათი ამჟამინდელი იმპლემენტაცია მკვრივ ვერსიაზე რიგით ნელია. მაგრამ უფრო მნიშვნელოვანი ისაა, რომ მეჩხერი მატრიცების გამოყენებით წარმადობის ზრდა მეჩხერობასთან ერთად იმატებს, ასე რომ, 75%-ით მეჩხერი მატრიცა დაახლოებით 2-ჯერ უფრო სწრაფია, ვიდრე მკვრივი ეკვივალენტი. მეხსიერების დაზოგვა კიდევ უფრო მნიშვნელოვანია: 75%-იანი მეჩხერობისას, მეხსიერების მოხმარება 4-ჯერ მცირდება, როგორც მოსალოდნელია. ბლოკ-მეჩხერი ხაზოვანი ფენების ეფექტურად გაწვრთნის შესაძლებლობა მხოლოდ პირველი ნაბიჯი იყო.
მეჩხერობის ნიმუში ამჟამად ინიციალიზაციის დროს ფიქსირდება და, რა თქმა უნდა, მისი ოპტიმიზაცია სწავლის პროცესში დიდ გაუმჯობესებას მოიტანს. ასე რომ, მომავალ ვერსიებში, შეგიძლიათ ელოდოთ ინსტრუმენტებს პარამეტრების „სასარგებლოობის“ გასაზომად, რათა შესაძლებელი გახდეს მეჩხერობის ნიმუშის ოპტიმიზაცია. NVIDIA Ampere-ის 50%-იანი მეჩხერი ნიმუში ბლოკებში, ალბათ, კიდევ ერთ მნიშვნელოვან წარმადობის ზრდას მოიტანს, ისევე როგორც CUTLASS-ის უფრო ახალ ვერსიებზე განახლება. ასე რომ, დაელოდეთ მეჩხერობასთან დაკავშირებულ სიახლეებს უახლოეს მომავალში!
თეგები:
#ხელოვნური ინტელექტი
#ოპტიმიზაცია
#ნერვული ქსელები
#ღრმა სწავლება
#hugging face
#pytorch
#cuda
#მეჩხერი მატრიცები
#cutlass
წყარო: huggingface.co
AI-ით გადამუშავებული