ნეირონული ქსელი YaLM 100B პრაქტიკაში.

Программирование

ივნისის ბოლოს
Yandex-მა საზოგადოებას გამოუშვა ნერვული ქსელი 100 მილიარდი პარამეტრით სახელწოდებით YaLM 100B . ეს არის ყველაზე დიდი GPT მსგავსი ნერვული ქსელი საზოგადოებრივ დომენში. ის მოგვითხრობს იმაზე, თუ როგორ ასწავლიდნენ, აჩვენეს საუკეთესო მაგალითები და რა შეუძლია ნეირონს. მაგრამ არის ეს ასე კარგი პრაქტიკაში და გამოიყენება სახლში? ამის შესახებ სტატია დუმს, უფრო მეტიც, მისი გაშვება და შემოწმება არც ისე ადვილია, რადგან საჭიროა დაახლოებით 200 გბ GPU ოპერატიული მეხსიერება. ეს კომენტარი ჰაბრეზე
ავლენს სიტუაციას ყველაზე ზუსტად
.

სავარაუდოდ, Yandex-ში ყველა ასეთი ჭკვიანი ადამიანია და მათ არც კი გამოაქვეყნეს ნორმალური როგორ უნდა. არ არსებობს api დიდი მოდელისთვის, არ არსებობს მზა გაშიშვლებული საშუალო ან პატარა მოდელი ჩვეულებრივი ადამიანებისთვის (Google Colab-ში). არ არის მოყვანილი მაგალითი, თუ როგორ უნდა დააყენოთ მოდელი, როგორ შეიქმნას ტექსტი. უბრალოდ სტატიაში ნერდებისთვის რამდენიმე ნიუანსია მითითებული და ეგაა. საკმარისია ყურადღებით დავაკვირდეთ, თუ როგორ გააკეთა ბანკმა ეს ასო “C”-ით და იგივე გააკეთოს. ისეთი შთაბეჭდილება დამრჩა, რომ ეს მოდელი მხოლოდ ერთ-ერთი წარუმატებელი ექსპერიმენტია, რომლის ურნაში გადაგდებაც სამწუხარო იყო, ამიტომ გამოქვეყნდა Open Source-ში იმის საჩვენებლად, თუ რა შესანიშნავ მოდელებს ქმნის Yandex და მეტიც, ის არის ღია წყარო!

ინტერნეტში უამრავი კითხვაა, თუ როგორ უნდა გაუშვათ იალმი ან თუნდაც სცადოთ ონლაინ, მაგრამ ამაზე პასუხი არ არსებობს. მე იმ მომხმარებლებს შორის ვიყავი, ვინც ეს კითხვები დამისვა. და დაიწყეთ ამის გარკვევა. ვინაიდან მე ნამდვილად მჭირდებოდა გზა ფინანსური რობოტებისთვის ტექსტების გენერირებისთვის. რათა მათ შეეძლოთ არა მხოლოდ ღირებულებების პროგნოზირება, არამედ კომენტარის გაკეთება ტექსტში, ფინანსური ანგარიშების საფუძველზე. არსებითად, ეს იგივე იქნება, რასაც ფინანსური ანალიტიკოსები აკეთებენ, მხოლოდ ხელოვნური ინტელექტის გამოყენებით. იალმის გაშვების ორი გზა არსებობს.
სერვერის დაქირავება ღრუბელში200+ Gb GPU RAM-ით ან დაასრულეთ კოდი და გაუშვით იგი ღრმა სიჩქარის ნულოვანი გადმოტვირთვის გამოყენებით (როდესაც GPU თანმიმდევრულად ამუშავებს ნერვული ქსელის ნაწილს, ხოლო დანარჩენი ინახება CPU RAM-ში ან NVMe-ში). პირველი ძალიან ძვირია, დაახლოებით 2500 რუბლი საათში ან 1,7 მილიონი თვეში. მეორე უცნობი, რადგან საცავში კოდი არ არის მოწოდებული, მხოლოდ
მინიშნებებია საცავში, რაც არ არის რთული გასაკეთებელი. დავიწყოთ მარტივი.

YaLM 100B გაშვების ინსტრუქციები

1. ვაქირავებ 200 GB GPU RAM-ს, მაგალითად აქ .

ნეირონული ქსელი YaLM 100B პრაქტიკაში.

თქვენ გჭირდებათ მინიმუმ 200 GB მთლიანი ვიდეო მეხსიერება. 8×40 = 320 GB. მხოლოდ ეს ჯდება. 200-ზე ნაკლები შეუძლებელია, მეტი შესაძლებელია. ისარი მიუთითებს CPU RAM-ზე, ჩვენ არ ვუყურებთ მას. ის შეიძლება იყოს ნებისმიერი.

ჩვენ მივუთითებთ დისკს დაახლოებით 300 GB, ასე რომ სათადარიგო და სასურველია სწრაფი დისკი, რადგან. მასში და იქიდან ათობით გიგაბაიტი მონაცემი გადაიცემა.

ნეირონული ქსელი YaLM 100B პრაქტიკაში. წყაროებში შექმნისას აირჩიეთ Ubuntu ML (მანქანური სწავლება). ეს სავალდებულოა იმისთვის, რომ ვიდეო ბარათები იყოს კონფიგურირებული და არაფრის დამატებით დაყენება არ არის საჭირო.

სერვერის გააქტიურების შემდეგ (შეიძლება დასჭირდეს 5-10 წუთი), დაუკავშირდით სერვერს ssh-ის საშუალებით ან უშუალოდ სერვერის გვერდზე ვებ-კონსოლში და შეასრულეთ ბრძანება.

nvidia-smi

შედეგი უნდა იყოს ცხრილი ვიდეო ბარათებით, დრაივერის ვერსიით და cuda. დაახლოებით ასე.
ნეირონული ქსელი YaLM 100B პრაქტიკაში. დრაივერის ვერსიის სათაურში და სად. მარცხენა მხარეს არის მოწყობილობის ნომრები, ცენტრში არის მოწყობილობის მეხსიერების ზომა. თუ თქვენ არ გაქვთ ეს ინფორმაცია, მაშინ თქვენ შეაგროვეთ სერვერი არასწორი წყაროდან. Ubuntu ML (Machine Learnong) საჭიროა, როგორც ზემოთ იყო აღწერილი.

2. საცავის კლონირება YaLM-ით

sudo git კლონი https://github.com/yandex/YaLM-100B/ yalm
cd yalm

კლონირება მოახდინე თქვენს მთავარ საქაღალდეში, რათა შემდგომში არ დაგჭირდეთ დოკერის კონფიგურაციის რედაქტირება. თუ კლონირებულია სხვაგან, მაშინ
გადადით აქ და დაამატეთ ბილიკი იქ, სადაც კლონირებულია.

3. ჩამოტვირთეთ საგუშაგოები (ძირითადი მოდელის სასწავლო ინფორმაცია)

sudo chmod +x ./download/download.sh
sudo bash ./download/download.sh

ამას დაახლოებით ერთი საათი დასჭირდება. დრო რომ ტყუილად არ დავკარგოთ, ვქმნით ახალ ssh კავშირს და პარალელურად ვიწყებთ დოკერ კონტეინერის მშენებლობას.

4. დააინსტალირეთ nvidiadocker 2

ნორმალური დოკერი არ არის შესაფერისი,
საჭიროა nvidia-docker2 .
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#setting-up-nvidia-container-toolkit

5. YaLM-ისთვის კონტეინერის აგება

cd yalm
sudo chmod +x ./docker/*
sudo bash ./docker/build.sh

ისიც დაახლოებით ერთი საათია.

ცხოვრების ჰაკი. შეგიძლიათ ჩამოტვირთოთ საგუშაგოები, დააინსტალიროთ docker და ააწყოთ კონტეინერი იაფ სერვერზე ერთი ვიდეო ბარათით. დროთა განმავლობაში იგივე იქნება, ასე რომ თქვენ შეგიძლიათ დაზოგოთ ცოტა. იაფ სერვერზე აწყობის შემდეგ, ჩვენ ვშლით მას და ვქმნით საბრძოლო სერვერს იაფი სერვერის დისკის გამოყენებით. მაშინ ზედმეტად არ გადაიხდით დროს შეკრების მოლოდინში და საგუშაგოების ამოტუმბვას.

6. მოამზადეთ შინაარსი

6.1 საგუშაგოები

საგუშაგოების ჩამოტვირთვის დასრულების შემდეგ, თქვენ უნდა გადაიტანოთ ისინი კონფიგურაციაში. არსებობს ორი გზა, სწორი პარამეტრები ან გადაცემის საგუშაგოები. ყველგან მოსალოდნელია, რომ საგუშაგოები იქნება პროექტის მთავარ დირექტორიაში, შესაბამისად, გადმოწერილი უნდა გადაიტანოს ზემოთ ჩამოტვირთვის საქაღალდიდან. იალმის საქაღალდეში ყოფნის შესრულება

mv ./download/yalm100b_checkpoint ./

ან შეცვალეთ ბილიკები ფაილების მაგალითზე
https://github.com/yandex/YaLM-100B/blob/c91b7d7fe8dbf39c9e307d6d324446d0df136a23/examples/generate_interactive.sh#L8-L9

6.2 ვიდეო ბარათები

ჩვენ ვამოწმებთ, რომ ვიდეო ბარათები სწორად არის დაყენებული. თუ თქვენ გაქვთ რვა ვიდეო ბარათი, მაშინ არაფერი უნდა შეიცვალოს. თუ ნომერი განსხვავებულია, მაშინ ჩვენ ვცვლით ამ ხაზებს
ნეირონული ქსელი YaLM 100B პრაქტიკაში. მეორე სტრიქონში გამოყენებული მოწყობილობების ნომრები (შეგიძლიათ ნახოთ nvidia-smi-ში, რომელიც უკვე გაუშვით). მეოთხეში მათი რიცხვი.

7. გაუშვით დოკერის კონტეინერი

იალმის საქაღალდეში ყოფნისას, შეასრულეთ ბრძანება

სუდო ბაშ ./დოკერი/რუნ.შ

თუ ყველაფერი წესრიგშია, მაშინ გადაგიყვანთ კონტეინერში, რომელშიც უნდა გადახვიდეთ იალმის საქაღალდეში თქვენი სახლის დირექტორიაში.

cd ~/იალმი

8. გაუშვით მაგალითი YaLM 100B-დან

ჩვენ მზად ვართ გავუშვათ ერთ-ერთი მაგალითი. ისინი
აქ არის აღწერილი .

chmod +x ./examples/generate_interactive.sh
./examples/generate_interactive.sh

იყავით მოთმინება, რჩება კიდევ 10-15 წუთი ლოდინი GPT2 მოდელის შექმნამდე და საგუშაგოებიდან წონების ჩატვირთვამდე.
ნეირონული ქსელი YaLM 100B პრაქტიკაში.

როდესაც მშენებლობა დასრულდება, MegatronML მოგთხოვთ შეიყვანოთ კონტექსტი ტექსტის გენერირებისთვის. ფრთხილად იყავით აკრეფისას. გარკვეულ გარემოებებში ხდება შეცდომა, პროგრამა იშლება და თქვენ კვლავ უნდა დაიწყოთ შეკრება. ამიტომ, უმჯობესია გამოიყენოთ მაგალითები, რომლებიც ტექსტს იღებენ ფაილიდან.

9. სამუშაოს შედეგები

ნეირონული ქსელი YaLM 100B პრაქტიკაში.
ნეირონული ქსელი YaLM 100B პრაქტიკაში. საინტერესოდ გამოიყურება. რა თქმა უნდა, ეს მხოლოდ კარგი მაგალითებია. მე ჩავატარე ტესტი სხვადასხვა ნიმუშებზე. როგორც მოსალოდნელი იყო, რაც უფრო უკეთესი იქნება კონტექსტი, მით უფრო მნიშვნელოვანი ტექსტი წარმოიქმნება. ექსპერიმენტული თაობების სრული ნაკრები შეგიძლიათ იხილოთ ბმულებზე:

ფასისთვის, დაახლოებით 9 ათასი რუბლი დამიჯდა სხვადასხვა ტევადობის სერვერების დაქირავება ტრენინგიდან და მომზადებიდან თაობამდე. განსაკუთრებული იმედგაცრუება ის იყო, რომ ყველაფრის მყისიერად გენერირება არ შეგიძლია. დაწყებას ძალიან დიდი დრო სჭირდება და ტექსტი არ წარმოიქმნება ისე სწრაფად, როგორც ჩვენ გვსურს, სერვერის საათში ღირებულების გათვალისწინებით.
ნეირონული ქსელი YaLM 100B პრაქტიკაში.  

როგორ გავუშვათ YaLM 200 გბ GPU ოპერატიული მეხსიერების გარეშე?

თქვენ უნდა დაამატოთ სიჩქარის ნულოვანი გადმოტვირთვა კონფიგურაციაში. მათთვის, ვინც იცის რაზე ვსაუბრობთ, ამის გაკეთება ძალიან მარტივი იქნება. სხვებისთვის ეს სულაც არ არის ტრივიალური ამოცანა. მნიშვნელოვანია იცოდეთ, რომ გადმოტვირთვა შეიძლება იყოს CPU RAM-ში ან NVMe-ში. თქვენ შეგიძლიათ დაივიწყოთ NVMe ამ მომენტში, რადგან. ძალიან დიდი რაოდენობით მონაცემები მუშავდება და დისკი ვერ უმკლავდება მას. ნულოვანი გადმოტვირთვის CPU უფრო რეალურია. მართალია, ამისათვის საჭიროა გქონდეთ 200+ გბ CPU ოპერატიული მეხსიერება, რაც ასევე არ არის იაფი. და ერთი ტექსტი წარმოიქმნება დაახლოებით 20-40 წუთის განმავლობაში, რადგან ჯერ კიდევ არ არის შესაძლებელი მისი პარალელიზება ორ ვიდეო ბარათზე. როგორც ქვემოთ მოცემულ სკრინშოტში ხედავთ, მხოლოდ ერთი ვიდეო ბარათი იყო ჩართული გენერაციაში, შემდეგ კი მეხსიერების მხოლოდ მეოთხედი. გასარკვევია, რატომ არ გამოიყენება ყველა 24 GB,
ნეირონული ქსელი YaLM 100B პრაქტიკაში. ისე, დასასრულს ვიტყვი, რომ შესაძლებელია გაშვება თუნდაც ერთ RTX 3070 TI-ზე. მაგრამ ამაში განსაკუთრებული აზრი არ არის, რადგან. NVMe არ მოგცემთ საშუალებას სწრაფად დაამუშაოთ 150 GB მონაცემები სვოპში, რომლებიც არის 96 GB ოპერატიული მეხსიერების დანამატში.
ნეირონული ქსელი YaLM 100B პრაქტიკაში.

შეჯამება

რა თქმა უნდა, მე მაინც ვეცდები ვიპოვო გაშვების ოპტიმალური გზები. მაგრამ ჯერჯერობით მივედი დასკვნამდე, რომ YaLM 100b არის ძალიან ძვირი / ძალიან ნელი ჩემი ამოცანებისთვის. იმავე ფულზე ხალხი ბევრად მეტს და ბევრად უკეთესს დაწერს. მაგრამ მგონი დროებითია, ვნახოთ. თუ გჭირდებათ დახმარება გაშვებაში, იალმის დაყენებაში, ან გსურთ შედეგების ნახვა კონტექსტის მაგალითებზე, დაწერეთ მეილზე ან ტელეგრამაში.

pskucherov
Rate author
Add a comment

  1. Olha

    Статья на Мега актуальную тему! Спасибо.

    Reply
  2. Данила

    Крутая статья! Спасибо автору!

    Reply
  3. Дмитрий

    СПАСИБО !!!
    три дня эту информацию искал
    нет подобного о RuGPT3 и Порфириче?

    Reply