ამ პოსტში თქვენ გაიგებთ, თუ როგორ უნდა დააჩქაროთ PyTorch-ის ტრენინგის სამუშაოები AWS-ზე Sapphire Rapids სერვერების კლასტერის გამოყენებით. ჩვენ გამოვიყენებთ Intel oneAPI Collective Communications Library (CCL)-ს სამუშაოს გასანაწილებლად და Intel Extension for PyTorch (IPEX) ბიბლიოთეკას ახალი CPU ინსტრუქციების ავტომატურად ამუშავებისთვის. ვინაიდან ორივე ბიბლიოთეკა უკვე ინტეგრირებულია Hugging Face transformers ბიბლიოთეკასთან, ჩვენ შევძლებთ ჩვენი ნიმუშის სკრიპტების გაშვებას ყოველგვარი კოდის შეცვლის გარეშე. მომდევნო პოსტში განვიხილავთ ინფერენსს Sapphire Rapids CPU-ებზე და მათ მიერ მოტანილ შესრულების გაუმჯობესებას. ღრმა სწავლის (DL) მოდელის ტრენინგი Intel Xeon CPU-ებზე შეიძლება იყოს ეკონომიური და მასშტაბირებადი მიდგომა, განსაკუთრებით განაწილებული ტრენინგის და მცირე და საშუალო ზომის მონაცემთა ნაკრებებზე ზუსტი რეგულირების (fine-tuning) ტექნიკის გამოყენებისას. Xeon CPU-ები მხარს უჭერენ მოწინავე ფუნქციებს, როგორიცაა Advanced Vector Extensions (AVX-512) და Hyper-Threading, რაც ხელს უწყობს DL მოდელების პარალელიზმისა და ეფექტურობის გაუმჯობესებას. ეს შესაძლებელს ხდის ტრენინგის უფრო სწრაფ დროს, ასევე აპარატურის რესურსების უკეთეს გამოყენებას. გარდა ამისა, Xeon CPU-ები ზოგადად უფრო ხელმისაწვდომი და ფართოდ გავრცელებულია სპეციალიზებულ აპარატურასთან, როგორიცაა GPU-ები, შედარებით, რომლებიც, როგორც წესი, საჭიროა დიდი ღრმა სწავლის მოდელების ტრენინგისთვის. Xeon CPU-ები ასევე ადვილად შეიძლება გადაკეთდეს სხვა საწარმოო ამოცანებისთვის, ვებ სერვერებიდან მონაცემთა ბაზებამდე, რაც მათ მრავალმხრივ და მოქნილ არჩევანს ხდის თქვენი IT ინფრასტრუქტურისთვის. დაბოლოს, ღრუბლოვანი მომხმარებლებს შეუძლიათ კიდევ უფრო შეამცირონ Xeon CPU-ებზე ტრენინგის ღირებულება Spot ინსტანსების გამოყენებით. Spot ინსტანსები აგებულია გამოუყენებელი გამოთვლითი სიმძლავრეებისგან და იყიდება შეღავათიან ფასად. მათ შეუძლიათ მნიშვნელოვანი ხარჯების დაზოგვა მოთხოვნილებისამებრ (on-demand) ინსტანსებთან შედარებით, ზოგჯერ 90%-მდე. ასევე, CPU Spot ინსტანსების მოპოვება ზოგადად უფრო ადვილია, ვიდრე GPU ინსტანსების. ახლა, განვიხილოთ Sapphire Rapids არქიტექტურის ახალი ინსტრუქციები. Sapphire Rapids არქიტექტურა წარმოგიდგენთ Intel Advanced Matrix Extensions (AMX)-ს DL სამუშაოების დასაჩქარებლად. მათი გამოყენება ისეთივე მარტივია, როგორც IPEX-ის უახლესი ვერსიის ინსტალაცია. არ არის საჭირო რაიმე ცვლილების შეტანა თქვენს Hugging Face კოდში. AMX ინსტრუქციები აჩქარებს მატრიცის გამრავლებას, ოპერაციას, რომელიც ცენტრალურია DL მოდელების ტრენინგისთვის მონაცემთა პაკეტებზე (data batches). ისინი მხარს უჭერენ როგორც Brain Floating Point (BF16), ასევე 8-ბიტიან მთელ (INT8) მნიშვნელობებს, რაც უზრუნველყოფს აჩქარებას სხვადასხვა ტრენინგის სცენარებისთვის. AMX წარმოგიდგენთ ახალ 2-განზომილებიან CPU რეგისტრებს, რომლებსაც ეწოდება tile registers. ვინაიდან ეს რეგისტრები უნდა შენახულ იქნას და აღდგეს კონტექსტის შეცვლისას (context switches), მათ სჭირდებათ kernel-ის მხარდაჭერა: Linux-ზე დაგჭირდებათ v5.16 ან უფრო ახალი. ახლა, ვნახოთ, როგორ შეგვიძლია ავაშენოთ Sapphire Rapids CPU-ების კლასტერი განაწილებული ტრენინგისთვის. ამ სტატიის წერის მომენტისთვის, Sapphire Rapids სერვერებზე წვდომის უმარტივესი გზაა Amazon EC2 R7iz ინსტანსების ახალი ოჯახის გამოყენება. ვინაიდან ის ჯერ კიდევ წინასწარ გადახედვის (preview) ეტაპზეა, თქვენ უნდა დარეგისტრირდეთ წვდომის მისაღებად. გარდა ამისა, ვირტუალური სერვერები ჯერ არ უჭერენ მხარს AMX-ს, ამიტომ გამოვიყენებთ bare metal ინსტანსებს (r7iz.metal-16xl, 64 vCPU, 512GB RAM). იმისათვის, რომ თავიდან ავიცილოთ კლასტერში თითოეული კვანძის ხელით დაყენება, ჯერ დავაყენებთ master კვანძს და შევქმნით მისგან ახალ Amazon Machine Image (AMI)-ს. შემდეგ, ამ AMI-ს გამოვიყენებთ დამატებითი კვანძების გასაშვებად. ქსელური კუთხით, დაგვჭირდება შემდეგი კონფიგურაცია: * გახსენით პორტი 22 ssh წვდომისთვის ყველა ინსტანსზე დაყენებისა და გამართვის მიზნით. * კონფიგურაცია გაუკეთეთ პაროლის გარეშე ssh-ს master ინსტანსიდან (საიდანაც ტრენინგს გაუშვებთ) ყველა სხვა ინსტანსამდე (master-ის ჩათვლით). სხვა სიტყვებით, master კვანძის ssh საჯარო გასაღები ავტორიზებული უნდა იყოს ყველა კვანძზე. * დაუშვით ყველა ქსელური ტრაფიკი კლასტერის შიგნით, რათა განაწილებული ტრენინგი შეუფერხებლად იმუშაოს. AWS უზრუნველყოფს ამის უსაფრთხო და მოსახერხებელ გზას უსაფრთხოების ჯგუფების (security groups) საშუალებით. ჩვენ უბრალოდ უნდა შევქმნათ უსაფრთხოების ჯგუფი, რომელიც საშუალებას აძლევს ყველა ტრაფიკს იმ ინსტანსებიდან, რომლებიც კონფიგურირებულია ამავე უსაფრთხოების ჯგუფით და დავრწმუნდეთ, რომ ის მიბმულია კლასტერის ყველა ინსტანსთან. აი, როგორ გამოიყურება ჩემი დაყენება. მოდით შევუდგეთ მუშაობას და ავაშენოთ კლასტერის master კვანძი. ჩვენ ჯერ ვქმნით master კვანძს r7iz.metal-16xl ინსტანსის გაშვებით Ubuntu 20.04 AMI-ით (ami-07cd3e6c4915b2d18) და ადრე შექმნილი უსაფრთხოების ჯგუფით. ეს AMI მოიცავს Linux v5.15.0-ს, მაგრამ Intel-მა და AWS-მა, საბედნიეროდ, kernel-ი შეცვალეს AMX მხარდაჭერის დასამატებლად. ამრიგად, ჩვენ არ გვჭირდება kernel-ის v5.16-ზე განახლება. მას შემდეგ, რაც ინსტანსი იმუშავებს, ჩვენ მასში ssh-ით შევალთ და lscpu-ით შევამოწმებთ, რომ AMX ნამდვილად მხარდაჭერილია. თქვენ უნდა ნახოთ შემდეგი flags განყოფილებაში: შემდეგ, ჩვენ დავაყენებთ მშობლიურ და Python დამოკიდებულებებს. შემდეგ, ჩვენ ვქმნით ახალ ssh გასაღებების წყვილს, სახელწოდებით 'cluster', ssh-keygen-ის საშუალებით და ვინახავთ მას ნაგულისხმევ ადგილას (~/.ssh). საბოლოოდ, ჩვენ ვქმნით ახალ AMI-ს ამ ინსტანსიდან. მას შემდეგ, რაც AMI მზად იქნება, ჩვენ მას გამოვიყენებთ 3 დამატებითი r7iz.16xlarge-metal ინსტანსის გასაშვებად, ადრე შექმნილი უსაფრთხოების ჯგუფის მიბმის დავიწყების გარეშე. სანამ ეს ინსტანსები იწყება, ჩვენ ssh-ით შევალთ master კვანძში ქსელის დაყენების დასასრულებლად. პირველ რიგში, ჩვენ ვარედაქტირებთ ssh კონფიგურაციის ფაილს ~/.ssh/config-ში.