ამ ბლოგპოსტში დეტალურად აღვწერთ DeDLOC-ს — ახალ მეთოდს კოლაბორაციული განაწილებული სწავლებისთვის, რომელსაც შეუძლია ეფექტურად მოერგოს მონაწილეთა ქსელურ და აპარატურულ შეზღუდვებს. ჩვენ ვაჩვენებთ, რომ ის წარმატებით გამოიყენება რეალურ სამყაროში: მაგალითად, 40 მოხალისის დახმარებით წინასწარ გაიწრთვნა sahajBERT, ბენგალური ენის მოდელი. ბენგალურ ენაზე შესრულებულ ამოცანებზე, ამ მოდელმა მიაღწია თითქმის უახლეს (state-of-the-art) ხარისხს, გაცილებით დიდ მოდელებთან შედარებით, რომლებიც ასობით მაღალი კლასის ამაჩქარებელს იყენებდნენ. დღესდღეობით, უმაღლესი ხარისხის ბუნებრივი ენის დამუშავების (NLP) მრავალი სისტემა დაფუძნებულია დიდ, წინასწარ გაწვრთნილ ტრანსფორმერებზე. ზოგადად, მათი ხარისხი მატულობს ზომასთან ერთად: ბუნებრივი ენის გაგებასა და გენერირებაში შეუდარებელი შედეგების მიღწევა შესაძლებელია პარამეტრების რაოდენობის გაზრდით და ეტიკეტის გარეშე ტექსტური მონაცემების სიმრავლის გამოყენებით. სამწუხაროდ, ჩვენ ამ წინასწარ გაწვრთნილ მოდელებს მოხერხებულობის გამო კი არ ვიყენებთ. ტრანსფორმერების დიდ მონაცემთა ნაკრებებზე წვრთნისთვის საჭირო აპარატურული რესურსები ხშირად აღემატება ნებისმიერი ერთი ადამიანისთვის, ან თუნდაც უმეტესი კომერციული თუ კვლევითი ორგანიზაციისთვის ხელმისაწვდომ რესურსებს. მაგალითად, BERT-ის წვრთნის ღირებულება დაახლოებით 7000 დოლარი იყო შეფასებული, ხოლო ისეთი უმსხვილესი მოდელებისთვის, როგორიცაა GPT-3, ეს მაჩვენებელი შეიძლება 12 მილიონ დოლარსაც კი აღწევდეს! რესურსების ეს შეზღუდვა შეიძლება აშკარა და გარდაუვალი ჩანდეს, მაგრამ ნამდვილად არ არსებობს ალტერნატივა წინასწარ გაწვრთნილი მოდელების გამოყენებისთვის ML საზოგადოების ფართო წრისთვის? თუმცა, შესაძლოა არსებობდეს ამ სიტუაციიდან გამოსავალი: გადაწყვეტილების მისაღებად, უბრალოდ გარშემო უნდა მიმოვიხედოთ. შესაძლოა, ის გამოთვლითი რესურსები, რომლებსაც ვეძებთ, უკვე არსებობს; მაგალითად, ბევრ ჩვენგანს აქვს მძლავრი კომპიუტერები სათამაშო ან სამუშაო სადგურის GPU-ებით სახლში. ალბათ უკვე მიხვდით, რომ ჩვენ ვაპირებთ მათი ძალის გაერთიანებას Folding@home, Rosetta@home, Leela Chess Zero ან სხვა BOINC პროექტების მსგავსად, რომლებიც იყენებენ მოხალისეობრივ გამოთვლას, მაგრამ ჩვენი მიდგომა კიდევ უფრო ზოგადია. მაგალითად, რამდენიმე ლაბორატორიას შეუძლია გააერთიანოს თავისი მცირე კლასტერები ყველა არსებული რესურსის გამოსაყენებლად, ზოგი კი შესაძლოა ექსპერიმენტში მონაწილეობის მიღებას იაფფასიანი ღრუბლოვანი ინსტანციების გამოყენებით მოისურვებს. სკეპტიკურად განწყობილ გონებას შეიძლება მოეჩვენოს, რომ აქ მთავარი ფაქტორი გვავიწყდება: მონაცემთა გადაცემა განაწილებულ ღრმა სწავლებაში (DL) ხშირად ბოთლის ყელია, რადგან ჩვენ გვჭირდება გრადიენტების აგრეგირება მრავალი "მუშაკისგან". მართლაც, ნებისმიერი გულუბრყვილო მიდგომა ინტერნეტზე განაწილებული წვრთნისას განწირულია წარუმატებლობისთვის, რადგან მონაწილეთა უმეტესობას არ აქვს გიგაბიტიანი კავშირი და შეიძლება ნებისმიერ დროს გაითიშოს ქსელიდან. მაშ, როგორ შეიძლება რაიმეს გაწვრთნა საოჯახო ინტერნეტ პაკეტით? :) ამ პრობლემის გადასაჭრელად, ჩვენ ვთავაზობთ ახალ წვრთნის ალგორითმს, სახელწოდებით „ღია კოლაბორაციებში განაწილებული ღრმა სწავლება“ (Distributed Deep Learning in Open Collaborations – DeDLOC), რომელიც დეტალურად არის აღწერილი ჩვენს ახლახან გამოქვეყნებულ პრეპრინტში. ახლა კი, მოდით გავარკვიოთ, რა ძირითადი იდეები უდევს საფუძვლად ამ ალგორითმს! ყველაზე ხშირად გამოყენებულ ვერსიაში, განაწილებული წვრთნა მრავალი GPU-ით საკმაოდ მარტივია. გავიხსენოთ, რომ ღრმა სწავლისას, თქვენ, როგორც წესი, ითვლით დანაკარგის ფუნქციის გრადიენტებს, რომლებიც საშუალოდ არის გამოთვლილი მრავალი მაგალითისთვის სავარჯიშო მონაცემთა ბაჩში. მონაცემთა-პარალელური განაწილებული ღრმა სწავლის შემთხვევაში, თქვენ უბრალოდ ყოფთ მონაცემებს მრავალ "მუშაკზე", ცალკე ითვლით გრადიენტებს და შემდეგ მათ აერთიანებთ (საშუალოს იღებთ) მას შემდეგ, რაც ადგილობრივი ბაჩები დამუშავდება. როდესაც საშუალო გრადიენტი გამოითვლება ყველა "მუშაკზე", ჩვენ ვაკორექტირებთ მოდელის წონებს ოპტიმიზატორის საშუალებით და ვაგრძელებთ ჩვენი მოდელის წვრთნას. ხშირად, სინქრონიზაციის ოდენობის შესამცირებლად და სწავლის პროცესის სტაბილიზაციისთვის, ჩვენ შეგვიძლია დავაგროვოთ გრადიენტები N ბაჩისთვის საშუალოს აღებამდე, რაც ექვივალენტურია ფაქტობრივი ბაჩის ზომის N-ჯერ გაზრდისა. ეს მიდგომა, იმ დაკვირვებასთან ერთად, რომ უახლესი ენობრივი მოდელების უმეტესობა დიდ ბაჩებს იყენებს, მიგვიყვანა მარტივ იდეამდე: მოდით დავაგროვოთ ერთი ძალიან დიდი ბაჩი ყველა მოხალისე მოწყობილობაზე ყოველი ოპტიმიზატორის ნაბიჯის წინ! რეგულარულ განაწილებულ წვრთნასთან სრული ეკვივალენტობისა და მარტივი მასშტაბურობის გარდა, ამ მეთოდს ასევე აქვს ჩაშენებული შეცდომების მიმართ მდგრადობის (fault tolerance) უპირატესობა, რასაც ქვემოთ განვმარტავთ. მოდით განვიხილოთ რამდენიმე პოტენციური შეცდომის შემთხვევა, რომელიც შეიძლება შეგვხვდეს კოლაბორაციული ექსპერიმენტის განმავლობაში. ყველაზე ხშირი სცენარია, როდესაც ერთი ან რამდენიმე მონაწილე გაითიშება წვრთნის პროცედურიდან: მათ შეიძლება ჰქონდეთ არასტაბილური კავშირი ან უბრალოდ სურთ გამოიყენონ თავიანთი GPU-ები სხვა რამისთვის. ამ შემთხვევაში, ჩვენ მხოლოდ მცირე შეფერხებას განვიცდით წვრთნისას: ამ მონაწილეების წვლილი გამოიქვითება ამჟამად დაგროვებული ბაჩის ზომიდან, მაგრამ სხვა მონაწილეები ამას თავიანთი გრადიენტებით აანაზღაურებენ. ასევე, თუ უფრო მეტი მონაწილე შემოგვიერთდება, სამიზნე ბაჩის ზომა უბრალოდ უფრო სწრაფად მიიღწევა და ჩვენი წვრთნის პროცედურა ბუნებრივად დაჩქარდება.