PyTorch-ის სწავლების აჩქარება Intel Xeon პროცესორებზე: ღრმა სწავლის ახალი მიდგომა
გრაფიკული პროცესორები (GPUs) დიდი ხანია ღრმა სწავლის მოდელების სწავლების დე ფაქტო არჩევანი იყო. თუმცა, ტრანსფერული სწავლის ზრდა ცვლის თამაშის წესებს. მოდელები ახლა იშვიათად სწავლება ნულიდან უზარმაზარ მონაცემთა ნაკრებებზე; ამის ნაცვლად, ისინი ხშირად ზუსტდება კონკრეტულ (და მცირე) მონაცემთა ნაკრებებზე, რათა შეიქმნას სპეციალიზებული მოდელები, რომლებიც უფრო ზუსტია კონკრეტული ამოცანებისთვის, ვიდრე საბაზისო მოდელი. რადგან ეს სწავლების ამოცანები ბევრად უფრო ხანმოკლეა, CPU-ზე დაფუძნებული კლასტერის გამოყენ
გრაფიკული პროცესორები (GPUs) დიდი ხანია ღრმა სწავლის მოდელების სწავლებისთვის დე ფაქტო არჩევანს წარმოადგენდა. თუმცა, ტრანსფერული სწავლის ზრდა ცვლის თამაშის წესებს. მოდელები ახლა იშვიათად სწავლება ნულიდან უზარმაზარ მონაცემთა ნაკრებებზე. ამის ნაცვლად, ისინი ხშირად ზუსტდება კონკრეტულ (და მცირე) მონაცემთა ნაკრებებზე, რათა შეიქმნას სპეციალიზებული მოდელები, რომლებიც უფრო ზუსტია კონკრეტული ამოცანებისთვის, ვიდრე საბაზისო მოდელი. რადგან ეს სწავლების ამოცანები ბევრად უფრო ხანმოკლეა, CPU-ზე დაფუძნებული კლასტერის გამოყენება შეიძლება საინტერესო ვარიანტი აღმოჩნდეს, რომელიც სწავლების დროსა და ხარჯებს აკონტროლებს. ამ პოსტში გაიგებთ, თუ როგორ უნდა დააჩქაროთ PyTorch-ის სწავლების ამოცანები Intel Xeon Scalable CPU სერვერების კლასტერზე მათი განაწილებით, რომლებიც Ice Lake არქიტექტურაზეა დაფუძნებული და იყენებენ წარმადობაზე ოპტიმიზებულ პროგრამულ ბიბლიოთეკებს. ჩვენ ავაშენებთ კლასტერს ნულიდან ვირტუალური მანქანების გამოყენებით და თქვენ შეძლებთ მარტივად გაიმეოროთ დემო თქვენს საკუთარ ინფრასტრუქტურაზე, იქნება ეს ღრუბელში თუ ადგილობრივად. ტექსტის კლასიფიკაციის ამოცანის გაშვებით, ჩვენ დავამუშავებთ BERT მოდელს MRPC მონაცემთა ნაკრებზე (ერთ-ერთი ამოცანა GLUE ბენჩმარკში). MRPC მონაცემთა ნაკრები შეიცავს 5,800 წინადადების წყვილს, რომლებიც ამოღებულია საინფორმაციო წყაროებიდან, ეტიკეტით, რომელიც გვეუბნება, სემანტიკურად ეკვივალენტურია თუ არა თითოეულ წყვილში ორი წინადადება. ჩვენ ეს მონაცემთა ნაკრები მისი გონივრული სწავლების დროის გამო შევარჩიეთ, ხოლო სხვა GLUE ამოცანების ცდა მხოლოდ ერთი პარამეტრის შეცვლაა. კლასტერის ამუშავების შემდეგ, ჩვენ გავუშვებთ საბაზისო ამოცანას ერთ სერვერზე. შემდეგ, მას გავაფართოვებთ 2 და 4 სერვერზე და გავზომავთ აჩქარებას. ამ პროცესში, ჩვენ განვიხილავთ შემდეგ თემებს: დავიწყოთ! საუკეთესო წარმადობისთვის, ჩვენ გამოვიყენებთ Intel-ის სერვერებს, რომლებიც დაფუძნებულია Ice Lake არქიტექტურაზე და მხარს უჭერს ისეთ აპარატურულ ფუნქციებს, როგორიცაა Intel AVX-512 და Intel Vector Neural Network Instructions (VNNI). ეს ფუნქციები აჩქარებს ოპერაციებს, რომლებიც ჩვეულებრივ გვხვდება ღრმა სწავლის სწავლებასა და ინფერენსში. მათ შესახებ მეტის გაგება შეგიძლიათ ამ პრეზენტაციაში (PDF). სამივე ძირითადი ღრუბლოვანი პროვაიდერი გთავაზობთ ვირტუალურ მანქანებს Intel Ice Lake CPU-ებით. რა თქმა უნდა, შეგიძლიათ გამოიყენოთ თქვენი საკუთარი სერვერებიც. თუ ისინი დაფუძნებულია Cascade Lake არქიტექტურაზე (Ice Lake-ის წინამორბედი), მათი გამოყენება შესაძლებელია, რადგან Cascade Lake ასევე მოიცავს AVX-512-ს და VNNI-ს. PyTorch-ში AVX-512-ისა და VNNI-ის გამოსაყენებლად, Intel-მა შეიმუშავა „Intel-ის გაფართოება PyTorch-ისთვის“ (Intel extension for PyTorch). ეს პროგრამული ბიბლიოთეკა უზრუნველყოფს მყისიერ აჩქარებას სწავლებისა და ინფერენსისთვის, ამიტომ აუცილებლად უნდა დავაყენოთ იგი. რაც შეეხება განაწილებულ სწავლებას, წარმადობის მთავარი შეფერხება ხშირად ქსელია. მართლაც, კლასტერის სხვადასხვა კვანძმა პერიოდულად უნდა გაცვალოს მოდელის მდგომარეობის ინფორმაცია სინქრონიზაციის შესანარჩუნებლად. ვინაიდან ტრანსფორმერები დიდი მოდელებია მილიარდობით პარამეტრით (ზოგჯერ ბევრად მეტით), ინფორმაციის მოცულობა მნიშვნელოვანია და მდგომარეობა მხოლოდ უარესდება კვანძების რაოდენობის ზრდასთან ერთად. ამრიგად, მნიშვნელოვანია ღრმა სწავლისთვის ოპტიმიზებული საკომუნიკაციო ბიბლიოთეკის გამოყენება. ფაქტობრივად, PyTorch მოიცავს torch.distributed პაკეტს, რომელიც მხარს უჭერს სხვადასხვა საკომუნიკაციო ბექენდს. აქ, ჩვენ გამოვიყენებთ Intel oneAPI Collective Communications Library-ს (oneCCL), რომელიც წარმოადგენს ღრმა სწავლებაში გამოყენებული საკომუნიკაციო შაბლონების (all-reduce და ა.შ.) ეფექტურ იმპლემენტაციას. oneCCL-ის წარმადობის შესახებ სხვა ბექენდებთან შედარებით შეგიძლიათ შეიტყოთ ამ PyTorch ბლოგპოსტში. ახლა, როცა ინსტრუმენტებზე შევთანხმდით, მოდით განვიხილოთ ჩვენი სწავლების კლასტერის საერთო დაყენება. ამ დემოში მე ვიყენებ Amazon EC2 ინსტანსებს, რომლებიც მუშაობს Amazon Linux 2-ზე (c6i.16xlarge, 64 vCPU, 128GB RAM, 25 გბიტ/წმ ქსელი). სხვა გარემოებებში დაყენება განსხვავებული იქნება, მაგრამ ნაბიჯები ძალიან მსგავსი უნდა იყოს. გთხოვთ გაითვალისწინოთ, რომ დაგჭირდებათ 4 იდენტური ინსტანსი, ამიტომ შესაძლოა მოგინდეთ რაიმე სახის ავტომატიზაციის დაგეგმვა, რათა თავიდან აიცილოთ ერთი და იგივე დაყენების 4-ჯერ გაშვება. აქ, მე ხელით დავაყენებ ერთ ინსტანსს, შევქმნი ახალ Amazon Machine Image-ს (AMI) ამ ინსტანსიდან და ამ AMI-ს გამოვიყენებ სამი იდენტური ინსტანსის გასაშვებად. ქსელური პერსპექტივიდან, დაგვჭირდება შემდეგი კონფიგურაცია: ახლა, მოდით ხელით მოვამზადოთ პირველი ინსტანსი. პირველ რიგში, მე ვქმნი თავად ინსტანსს, ვამაგრებ ზემოთ მოცემულ უსაფრთხოების ჯგუფს და ვამატებ 128GB საცავს. ხარჯების ოპტიმიზაციისთვის, მე ის გავუშვი, როგორც „სპოტ ინსტანსი“ (spot instance). ინსტანსის გაშვების შემდეგ, მას ვუკავშირდები ssh-ის საშუალებით დამოკიდებულებების (dependencies) დასაყენებლად. აი, ნაბიჯები, რომლებსაც მივყვებით: შეიძლება ბევრი ჩანდეს, მაგრამ რთული არაფერია. დავიწყოთ! Intel-ის ხელსაწყოების ნაკრებების ინსტალაცია: ჯერ გადმოვწერთ და დავაყენებთ Intel OneAPI-ის ბაზისურ ნაკრებს, ასევე AI ნაკრებს. მათ შესახებ მეტის გაგება შეგიძლიათ Intel-ის ვებსაიტზე. Anaconda-ს ინსტალაცია: შემდეგ გადმოვწერთ და დავაყენებთ Anaconda დისტრიბუციას. ახალი Conda გარემოს შექმნა: გამოვდივართ და ხელახლა შევდივართ სისტემაში ბილიკების (paths) განახლების მიზნით. შემდეგ, ვქმნით ახალ Conda გარემოს, რათა ყველაფერი მოწესრიგებული იყოს. PyTorch-ისა და Intel-ის გაფართოების ინსტალაცია PyTorch-ისთვის: შემდეგ, ვაყენებთ PyTorch 1.9-ს და Intel-ის გაფართოების ნაკრებს. ვერსიები უნდა ემთხვეოდეს. oneCCL-ის კომპილაცია და ინსტალაცია: შემდეგ, ვაყენებთ რამდენიმე მშობლიურ დამოკიდებულებას, რომლებიც საჭიროა oneCCL-ის კომპილაციისთვის.
თეგები:
#ხელოვნური ინტელექტი
#მანქანური სწავლება
#ღრმა სწავლება
#pytorch
#intel
#განაწილებული სწავლება
#cpu
#ტრანსფერული სწავლა
#ice lake
#კლასტერი
წყარო: huggingface.co
AI-ით გადამუშავებული