Sieć neuronowa YaLM 100B w praktyce.

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

Pod koniec czerwca Yandex
udostępnił publicznie sieć neuronową o 100 miliardach parametrów o nazwie YaLM 100B . Jest to największa sieć neuronowa podobna do GPT w domenie publicznej. Opowiada o tym, jak uczyli, pokazali najlepsze przykłady i do czego zdolny jest neuron. Ale czy jest to tak dobre w praktyce i możliwe do zastosowania w domu? Artykuł milczy na ten temat, ponadto nie jest tak łatwo uruchomić i sprawdzić, ponieważ wymagane jest około 200 GB pamięci RAM GPU. Ten komentarz na temat Habré
najdokładniej oddaje sytuację
.

Podobno w Yandexie wszyscy tacy mądrzy ludzie i nawet nie opublikowali normalnego poradnika. Nie ma api dla dużego modelu, nie ma gotowego, okrojonego średniego lub małego modelu dla zwykłych ludzi (w Google Colab). Nie podano przykładu, jak skonfigurować model, jak wygenerować tekst. Tyle, że artykuł wskazuje na kilka niuansów dla nerdów i to wszystko. Wystarczy przyjrzeć się bliżej, jak bank zrobił to z literą „C” i zrobić to samo. Odniosłem wrażenie, że ten model to tylko jeden z nieudanych eksperymentów, żal było go wyrzucić do kosza, więc został opublikowany w Open Source, aby pokazać, jakie świetne modele tworzy Yandex, a ponadto jest to open source!

W Internecie jest wiele pytań, jak prowadzić yalm, a nawet spróbować online, ale nie ma na to odpowiedzi. Byłem wśród użytkowników, którzy zadawali te pytania. I zacząłem to rozgryźć. Ponieważ naprawdę potrzebowałem sposobu na generowanie tekstów dla robotów finansowych. Aby mogli przewidzieć nie tylko wartości, ale także skomentować je w tekście, na podstawie raportów finansowych. W zasadzie będzie to to samo, co robią analitycy finansowi, tylko z wykorzystaniem sztucznej inteligencji. Istnieją dwa sposoby prowadzenia yalmu.
Wynajmij serwer w chmurzez 200 Gb GPU RAM lub sfinalizuj kod i uruchom go przy użyciu głębokiego odciążania zerowego (gdy GPU sekwencyjnie przetwarza część sieci neuronowej, a reszta jest przechowywana w pamięci RAM procesora lub NVMe). Pierwsza jest bardzo droga, około 2500 rubli za godzinę lub 1,7 miliona miesięcznie. Druga niewiadoma, ponieważ kod w repozytorium nie jest podawany, tylko
podpowiedzi w wydaniu repozytorium, co nie jest trudne. Zacznijmy prosto.

Instrukcja uruchomienia YaLM 100B

1. Wypożyczamy 200 GB RAM GPU, na przykład tutaj .

Sieć neuronowa YaLM 100B w praktyce.

Potrzebujesz co najmniej 200 GB całkowitej pamięci wideo. 8×40 = 320 GB. Tylko ten pasuje. Mniej niż 200 jest niemożliwe, więcej jest możliwe. Strzałka wskazuje pamięć RAM procesora, nie patrzymy na nią. Może być każdym.

Wskazujemy dysk około 300 GB, a więc z zapasowym i najlepiej szybkim dyskiem, bo. dziesiątki gigabajtów danych będą przesyłane do i z niego.

Sieć neuronowa YaLM 100B w praktyce. Podczas tworzenia w źródłach wybierz Ubuntu ML (Uczenie maszynowe). Jest to obowiązkowe, aby karty graficzne zostały skonfigurowane i nie trzeba nic dodatkowo instalować.

Po aktywacji serwera (może to zająć 5-10 minut) połącz się z serwerem przez ssh lub bezpośrednio w konsoli internetowej na stronie serwera i wykonaj polecenie.

nvidia-smi

Rezultatem powinna być tabela z kartami wideo, wersją sterownika i cuda. W przybliżeniu tak.
Sieć neuronowa YaLM 100B w praktyce. W nagłówku wersji sterownika i gdzie. Po lewej stronie znajdują się numery urządzeń, pośrodku wielkość pamięci urządzenia. Jeśli nie masz tych informacji, pobrałeś serwer z niewłaściwego źródła. Wymagany jest Ubuntu ML (Machine Learnong), jak opisano powyżej.

2. Sklonuj repozytorium za pomocą YaLM

klon sudo git https://github.com/yandex/YaLM-100B/ yalm
cd yalm

Sklonuj do swojego folderu domowego, aby nie trzeba było później edytować konfiguracji dockera. Jeśli sklonowano gdzie indziej,
przejdź tutaj i dodaj ścieżkę do miejsca sklonowania.

3. Pobierz punkty kontrolne (podstawowe informacje o treningu modelu)

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

Zajmie to około godziny. Aby nie tracić czasu na próżno tworzymy nowe połączenie ssh i równolegle zaczynamy budować kontener dockera.

4. Zainstaluj nvidiędocker 2

Normalny docker nie jest odpowiedni,
potrzebny jest nvidia-docker2 .
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#setting-up-nvidia-container-toolkit

5. Budowa kontenera dla YaLM

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

To też około godziny.

Życiowa porada. Możesz pobrać punkty kontrolne, zainstalować docker i zbudować kontener na tanim serwerze za pomocą jednej karty graficznej. Z czasem będzie tak samo, więc możesz trochę zaoszczędzić. Po zmontowaniu na tanim serwerze usuwamy go i tworzymy serwer bojowy z dysku z taniego serwera. Wtedy nie przepłacisz czasu oczekiwania na montaż i wypompowania punktów kontrolnych.

6. Przygotuj treść

6.1 Punkty kontrolne

Po zakończeniu pobierania punktów kontrolnych musisz wsunąć je do konfiguracji. Są dwa sposoby, popraw parametry lub przenieś punkty kontrolne. Wszędzie oczekuje się, że punkty kontrolne będą znajdowały się odpowiednio w głównym katalogu projektu, to co jest pobierane musi zostać przeniesione z powyższego folderu pobierania. Będąc w folderze yalm wykonaj

mv ./download/yalm100b_checkpoint ./

Lub zmień ścieżki do plików w przykładowych plikach
https://github.com/yandex/YaLM-100B/blob/c91b7d7fe8dbf39c9e307d6d324446d0df136a23/examples/generate_interactive.sh#L8-L9

6.2 Karty graficzne

Sprawdzamy, czy karty graficzne są prawidłowo ustawione. Jeśli masz osiem kart wideo, nic nie trzeba zmieniać. Jeśli numer jest inny, to zmieniamy te wiersze
Sieć neuronowa YaLM 100B w praktyce. W drugim wierszu numery używanych urządzeń (możesz na nie spojrzeć w nvidia-smi, które już uruchomiłeś). W czwartym ich liczba.

7. Uruchom kontener dokera

Będąc w folderze yalm, wykonaj polecenie

sudo bash ./docker/run.sh

Jeśli wszystko jest w porządku, zostaniesz przeniesiony do kontenera, w którym musisz przejść do folderu yalm w twoim katalogu domowym.

cd ~/yalm

8. Uruchom przykład z YaLM 100B

Jesteśmy gotowi do uruchomienia jednego z przykładów. Zostały one opisane
tutaj .

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

Bądź cierpliwy, pozostaje poczekać kolejne 10-15 minut, aż zostanie utworzony model GPT2 i załadowane wagi z punktów kontrolnych.
Sieć neuronowa YaLM 100B w praktyce.

Po zakończeniu kompilacji MegatronML poprosi o wprowadzenie kontekstu w celu wygenerowania tekstu. Bądź ostrożny podczas pisania. W pewnych okolicznościach pojawia się błąd, program ulega awarii i trzeba ponownie uruchomić asembler. Dlatego lepiej jest używać przykładów, które pobierają tekst z pliku.

9. Wyniki pracy

Sieć neuronowa YaLM 100B w praktyce.
Sieć neuronowa YaLM 100B w praktyce. Wygląda ciekawie. Oczywiście to tylko dobre przykłady. Przeprowadziłem test na różnych próbkach. Zgodnie z oczekiwaniami, im lepszy kontekst, tym bardziej znaczący tekst zostanie wygenerowany. Pełen zestaw generacji eksperymentalnych można obejrzeć pod linkami:

W tej cenie kosztowało mnie to około 9 tysięcy rubli za wynajem serwerów o różnych pojemnościach od szkolenia i od przygotowania do generacji. Szczególnym rozczarowaniem było to, że nie można od razu wygenerować wszystkiego. Rozpoczęcie trwa bardzo długo, a tekst nie generuje się tak szybko, jak byśmy chcieli, biorąc pod uwagę koszt serwera na godzinę.
Sieć neuronowa YaLM 100B w praktyce.  

Jak uruchomić YaLM bez 200Gb GPU RAM?

Musisz dodać do konfiguracji deepspeed zero offload. Dla tych, którzy wiedzą, o czym mówimy, będzie to bardzo łatwe. Dla innych nie jest to wcale trywialne zadanie. Ważne jest, aby wiedzieć, że odciążanie może odbywać się w pamięci RAM procesora lub NVMe. W tej chwili możesz zapomnieć o NVMe, ponieważ. przetwarzana jest bardzo duża ilość danych i dysk sobie z tym nie radzi. Procesor z zerowym obciążeniem jest bardziej realny. To prawda, że ​​do tego trzeba mieć na stanie ponad 200 GB pamięci RAM procesora, co również nie jest tanie. Jeden tekst będzie generowany przez około 20-40 minut, ponieważ nie było jeszcze możliwe zrównoleglenie go na dwóch kartach graficznych. Jak widać na poniższym zrzucie ekranu, w generowaniu brała udział tylko jedna karta graficzna, a potem tylko jedna czwarta pamięci. Zobaczymy, dlaczego nie wykorzystuje się wszystkich 24 GB,
Sieć neuronowa YaLM 100B w praktyce. Cóż, na zakończenie powiem, że da się uruchomić nawet na jednym RTX 3070 TI. Ale nie ma w tym szczególnego sensu, ponieważ. NVMe nie pozwoli na szybkie przetworzenie 150 GB danych w swapie, które są w dodatku 96 GB RAM.
Sieć neuronowa YaLM 100B w praktyce.

Podsumowując

Oczywiście nadal będę się starał znaleźć optymalne ścieżki startowe. Ale do tej pory doszedłem do wniosku, że YaLM 100b jest za drogi / za wolny do moich zadań. Za te same pieniądze ludzie będą pisać znacznie więcej i znacznie lepiej. Ale myślę, że to tymczasowe, zobaczymy. Jeśli potrzebujesz pomocy przy uruchamianiu, konfigurowaniu yalmu lub chcesz zobaczyć wyniki na przykładach kontekstowych, napisz na maila lub telegram.

pskucherov
Rate author

  1. Olha

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

    Odpowiedz
  2. Данила

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

    Odpowiedz
  3. Дмитрий

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

    Odpowiedz