უპირველეს ყოვლისა, გვსურს მადლობა გადავუხადოთ კომპანიებს, საკვანძო პირებსა და ჯგუფებს, რომელთა ძალისხმევითაც შესაძლებელი გახდა 176 მილიარდი პარამეტრის მოდელის წვრთნის საოცარი მიღწევა მცირე, თავდადებული ადამიანების ჯგუფის მიერ. შემდეგ განვიხილავთ აპარატურულ კონფიგურაციასა და ძირითად ტექნოლოგიურ კომპონენტებს. პროექტის მოკლე შეჯამება: პროექტი ჩაფიქრებული იყო თომას ვოლფის (Hugging Face-ის თანადამფუძნებელი და CSO) მიერ, რომელმაც გაბედა კონკურენცია გაეწია უზარმაზარი კორპორაციებისთვის არა მხოლოდ ერთ-ერთი უდიდესი მრავალენოვანი მოდელის შესაქმნელად, არამედ საბოლოო შედეგის ყველასთვის ხელმისაწვდომობის უზრუნველსაყოფად, რითაც უმრავლესობის ოცნება რეალობად აქცია. ეს სტატია კონკრეტულად ფოკუსირებულია მოდელის წვრთნის საინჟინრო მხარეზე. BLOOM-ის ტექნოლოგიის ყველაზე მნიშვნელოვანი ნაწილი იყო ის ადამიანები და კომპანიები, რომლებმაც გაგვიზიარეს თავიანთი გამოცდილება და დაგვეხმარნენ კოდირებასა და წვრთნაში. მადლობა უნდა გადავუხადოთ ადამიანთა 6 ძირითად ჯგუფს: ძალიან რთული იქნება ყველა იმ საოცარი ადამიანის დასახელება, ვინც პროექტის საინჟინრო მხარეს შეუწყო ხელი, ამიტომ დავასახელებ მხოლოდ რამდენიმე საკვანძო პიროვნებას Hugging Face-ის გარეთ, რომლებიც ამ პროექტის საინჟინრო საფუძველს წარმოადგენდნენ ბოლო 14 თვის განმავლობაში: ოლატუნჯი რუვასე (Olatunji Ruwase), დიპაკ ნარაიანანი (Deepak Narayanan), ჯეფ რესლი (Jeff Rasley), ჯარედ კასპერი (Jared Casper), სამიამ რაჯბანდარი (Samyam Rajbhandari) და რემი ლაკრუა (Rémi Lacroix). ასევე მადლობელი ვართ ყველა კომპანიის, რომელთაც ნება დართეს თავიანთ თანამშრომლებს, წვლილი შეეტანათ ამ პროექტში. BLOOM-ის არქიტექტურა ძალიან ჰგავს GPT3-ს, რამდენიმე დამატებითი გაუმჯობესებით, რაზეც მოგვიანებით ვისაუბრებთ ამ სტატიაში. მოდელი გაიწრთნა Jean Zay-ზე, ფრანგული მთავრობის მიერ დაფინანსებულ სუპერკომპიუტერზე, რომელსაც მართავს GENCI და დაყენებულია IDRIS-ში, საფრანგეთის სამეცნიერო კვლევების ეროვნული ცენტრის (CNRS) ეროვნულ გამოთვლით ცენტრში. გამოთვლითი რესურსი პროექტს გულუხვად შესწირა GENCI-მ (გრანტი 2021-A0101012475). წვრთნის დროს გამოყენებული იქნა შემდეგი აპარატურა: (ორიგინალ ტექსტში ნახსენები "Checkpoints:" და "Datasets:" არ არის სრულად მოცემული). 176 მილიარდი BLOOM მოდელის წვრთნა მიმდინარეობდა 2022 წლის მარტიდან ივლისამდე და დასრულებას დასჭირდა დაახლოებით 3.5 თვე (დაახლოებით 1 მილიონი გამოთვლითი საათი). 176 მილიარდი BLOOM მოდელი გაიწრთნა Megatron-DeepSpeed-ის გამოყენებით, რომელიც არის 2 ძირითადი ტექნოლოგიის კომბინაცია: DeepSpeed-ის გუნდმა შეიმუშავა 3D პარალელიზმზე დაფუძნებული იმპლემენტაცია ZeRO sharding-ისა და pipeline parallelism-ის DeepSpeed ბიბლიოთეკიდან Tensor Parallelism-თან Megatron-LM-დან კომბინაციით. თითოეული კომპონენტის შესახებ მეტი დეტალი შეგიძლიათ იხილოთ ქვემოთ მოცემულ ცხრილში (ცხრილი არ არის მოცემული). გთხოვთ გაითვალისწინოთ, რომ BigScience-ის Megatron-DeepSpeed არის ორიგინალური Megatron-DeepSpeed საცავის (repository) ფორკი, რომელსაც ჩვენ დავამატეთ მრავალი გაუმჯობესება. აქ მოცემულია ცხრილი, თუ რომელი კომპონენტები რომელმა ფრეიმვორკმა მოგვაწოდა BLOOM-ის წვრთნისთვის (ცხრილი არ არის მოცემული). გთხოვთ გაითვალისწინოთ, რომ როგორც Megatron-LM-ს, ასევე DeepSpeed-ს აქვს Pipeline Parallelism-ისა და BF16 Optimizer-ის იმპლემენტაციები, მაგრამ ჩვენ გამოვიყენეთ DeepSpeed-ის ვერსიები, რადგან ისინი ინტეგრირებულია ZeRO-სთან. Megatron-DeepSpeed ახორციელებს 3D პარალელიზმს, რათა უზარმაზარი მოდელების წვრთნა ძალიან ეფექტურად იყოს შესაძლებელი. მოდით, მოკლედ განვიხილოთ 3D კომპონენტები. მომხმარებელთა უმეტესობა, ვისაც მხოლოდ რამდენიმე GPU აქვს, სავარაუდოდ იცნობს DistributedDataParallel (DDP) PyTorch-ის დოკუმენტაციიდან. ამ მეთოდით მოდელი სრულად რეპლიცირებულია თითოეულ GPU-ზე და ყოველი იტერაციის შემდეგ ყველა მოდელი ასინქრონებს თავის მდგომარეობას ერთმანეთთან. ეს მიდგომა აჩქარებს წვრთნას რესურსების გაზრდის ხარჯზე, მაგრამ ის მუშაობს მხოლოდ იმ შემთხვევაში, თუ მოდელი ეტევა ერთ GPU-ზე. ZeRO-ის მიერ მხარდაჭერილი მონაცემთა პარალელიზმი (ZeRO-DP) აღწერილია შემდეგ დიაგრამაზე ამ ბლოგპოსტიდან (დიაგრამა არ არის მოცემული). შესაძლოა, მისი გაგება რთული იყოს, მაგრამ სინამდვილეში, კონცეფცია საკმაოდ მარტივია. ეს არის ჩვეულებრივი DDP, იმ განსხვავებით, რომ სრული მოდელის პარამეტრების, გრადიენტებისა და ოპტიმიზატორის მდგომარეობების რეპლიკაციის ნაცვლად, თითოეული GPU ინახავს მხოლოდ მის ნაწილს. შემდეგ, გაშვების დროს, როდესაც საჭიროა სრული ფენის პარამეტრები მოცემული ფენისთვის, ყველა GPU სინქრონიზდება, რათა ერთმანეთს მიაწოდოს ის ნაწილები, რომლებიც აკლია - ეს არის ყველაფერი. ამ კომპონენტს ახორციელებს DeepSpeed. ტენზორულ პარალელიზმში (TP) თითოეული GPU ამუშავებს ტენზორის მხოლოდ ნაწილს და აერთიანებს სრულ ტენზორს მხოლოდ იმ ოპერაციებისთვის, რომლებიც მთლიანს საჭიროებს. ამ განყოფილებაში ვიყენებთ Megatron-LM სტატიიდან: Efficient Large-Scale Language Model Training on GPU Clusters (ეფექტური ფართომასშტაბიანი ენობრივი მოდელის წვრთნა GPU კლასტერებზე) კონცეფციებსა და დიაგრამებს. ნებისმიერი ტრანსფორმატორის მთავარი სამშენებლო ბლოკი არის სრულად დაკავშირებული nn.Linear, რასაც მოსდევს არაწრფივი გააქტიურება GeLU. Megatron-ის სტატიის აღნიშვნების მიხედვით, ჩვენ შეგვიძლია ჩავწეროთ მისი წერტილოვანი ნამრავლის ნაწილი Y = GeLU(XA) სახით, სადაც X და Y არის შეტანა-გამოტანის ვექტორები, ხოლო A არის წონის მატრიცა. თუ გამოთვლას მატრიცული ფორმით შევხედავთ, ადვილია იმის დანახვა, თუ როგორ შეიძლება მატრიცული გამრავლება გაიყოს მრავალ GPU-ს შორის: თუ წონის მატრიცას A სვეტების მიხედვით გავყოფთ N GPU-ზე და პარალელურად შევასრულებთ მატრიცულ გამრავლებებს XA_1-დან XA_n-მდე, მაშინ მივიღებთ N გამომავალ ვექტორს Y_1, Y_2, ..., Y_n, რომლებიც შეიძლება დამოუკიდებლად გადაეცეს GeLU-ს: (ორიგინალ ტექსტში წინადადება წყდება). გაითვალისწინეთ, რომ Y მატრიცის სვეტების გასწვრივ გაყოფით, ჩვენ შეგვიძლია გავყოთ მეორე GEMM მისი რიგების გასწვრივ ისე, რომ მან მიიღოს GeLU-ს გამოსავალი პირდაპირ, ყოველგვარი დამატებითი კომუნიკაციის გარეშე. ამ პრინციპის გამოყენებით, ჩვენ შეგვიძლია განვაახლოთ MLP-ის (ორიგინალ ტექსტში წინადადება წყდება).