Neurale netwerk YaLM 100B in de praktijk.

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

Eind juni bracht Yandex
een neuraal netwerk met 100 miljard parameters genaamd YaLM 100B voor het publiek uit . Het is het grootste GPT-achtige neurale netwerk in het publieke domein. Het vertelt over hoe ze lesgaven, de beste voorbeelden lieten zien en waartoe het neuron in staat is. Maar is het in de praktijk wel zo goed en thuis toepasbaar? Het artikel zwijgt hierover, bovendien is het niet zo eenvoudig om het uit te voeren en te controleren, aangezien er ongeveer 200 Gb GPU RAM nodig is. Dit commentaar op Habré
geeft de situatie het meest nauwkeurig weer
.

Naar verluidt, in Yandex, al zulke slimme mensen, en ze hebben niet eens een normale How-to gepost. Er is geen api voor een groot model, er is geen kant-en-klaar uitgekleed medium of klein model voor gewone mensen (in Google Colab). Er wordt geen voorbeeld gegeven over het opzetten van het model, het genereren van tekst. Het artikel geeft alleen een paar nuances aan voor nerds en dat is het dan. Het volstaat om eens nader te bekijken hoe de bank het deed met de letter “C” en hetzelfde te doen. Ik kreeg de indruk dat dit model slechts een van de mislukte experimenten is die jammer was om het in de prullenbak te gooien, dus het werd in Open Source geplaatst om te laten zien welke geweldige modellen Yandex maakt, en bovendien is het open source!

Er zijn veel vragen op internet hoe je yalm kunt draaien of zelfs online kunt proberen, maar hier zijn geen antwoorden op. Ik was een van de gebruikers die deze vragen stelden. En ga het uitzoeken. Omdat ik echt een manier nodig had om teksten voor financiële robots te genereren. Zodat ze niet alleen de waarden kunnen voorspellen, maar ook in tekst kunnen becommentariëren op basis van financiële rapportages. In wezen zal het hetzelfde zijn als wat financiële analisten doen, alleen met behulp van kunstmatige intelligentie. Er zijn twee manieren om yalm te gebruiken.
Huur een server in de cloudmet 200+ Gb GPU RAM of voltooi de code en voer deze uit met behulp van deepspeed zero offload (wanneer de GPU sequentieel een deel van het neurale netwerk verwerkt en de rest wordt opgeslagen in CPU RAM of NVMe). De eerste is erg duur, ongeveer 2500 roebel per uur of 1,7 miljoen per maand. De tweede onbekende, omdat de code in de repository wordt niet verstrekt, alleen
hints in de kwestie van de repository, wat niet moeilijk is om te doen. Laten we eenvoudig beginnen.

YaLM 100B lanceringsinstructies

1. Wij verhuren bijvoorbeeld hier 200 GB GPU RAM .

Neurale netwerk YaLM 100B in de praktijk.

U hebt minimaal 200 GB aan totaal videogeheugen nodig. 8×40 = 320GB. Alleen deze past. Minder dan 200 is onmogelijk, meer is mogelijk. De pijl geeft het CPU-RAM aan, we kijken er niet naar. Ze kan iedereen zijn.

We geven een schijf aan van ongeveer 300 GB, dus met een reserveschijf en bij voorkeur een snelle schijf, want. er worden tientallen gigabytes aan gegevens heen en weer verzonden.

Neurale netwerk YaLM 100B in de praktijk. Selecteer bij het maken in bronnen Ubuntu ML (Machine Learning). Dit is verplicht zodat de videokaarten geconfigureerd zijn en er niets extra geïnstalleerd hoeft te worden.

Nadat de server is geactiveerd (dit kan 5-10 minuten duren), maakt u verbinding met de server via ssh of rechtstreeks in de webconsole op de serverpagina en voert u de opdracht uit.

nvidia-smi

Het resultaat zou een tabel moeten zijn met videokaarten, driverversie en cuda. Ongeveer zo.
Neurale netwerk YaLM 100B in de praktijk. In de header van de driverversie en waar. Aan de linkerkant staan ​​de apparaatnummers, in het midden de grootte van het apparaatgeheugen. Als u deze informatie niet heeft, heeft u de server van de verkeerde bron verzameld. Ubuntu ML (Machine Learnong) is vereist, zoals hierboven beschreven.

2. Kloon de repository met YaLM

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

Kloon naar uw thuismap zodat u de docker-configuratie achteraf niet hoeft te bewerken. Indien ergens anders gekloond,
ga dan hierheen en voeg het pad toe naar waar gekloond is.

3. Download checkpoints (basismodel trainingsinformatie)

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

Dit duurt ongeveer een uur. Om niet tevergeefs tijd te verspillen, creëren we een nieuwe ssh-verbinding en beginnen we parallel met het bouwen van een docker-container.

4. Installeer nvidiadocker 2

Normale docker is niet geschikt,
nvidia-docker2 is nodig .
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#setting-up-nvidia-container-toolkit

5. Een container bouwen voor YaLM

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

Het is ook ongeveer een uur.

Levenshack. Je kunt checkpoints downloaden, docker installeren en een container bouwen op een goedkope server met één videokaart. Het zal in de tijd hetzelfde zijn, dus u kunt een beetje besparen. Na montage op een goedkope server, verwijderen we deze en maken we een gevechtsserver met behulp van een schijf van een goedkope server. Dan betaalt u niet teveel tijd voor het wachten op de montage en het leegpompen van checkpoints.

6. Inhoud voorbereiden

6.1 Controlepunten

Nadat het downloaden van controlepunten is voltooid, moet u ze in de configuraties plaatsen. Er zijn twee manieren, parameters corrigeren of checkpoints overzetten. Overal wordt verwacht dat de checkpoints in de hoofddirectory van het project zullen staan, respectievelijk, wat gedownload is, moet uit de bovenstaande downloadmap worden overgebracht. In de yalm-map zijn uitvoeren

mv ./download/yalm100b_checkpoint ./

Of wijzig de paden naar de bestanden in de voorbeeldbestanden
https://github.com/yandex/YaLM-100B/blob/c91b7d7fe8dbf39c9e307d6d324446d0df136a23/examples/generate_interactive.sh#L8-L9

6.2 Videokaarten

We controleren of de videokaarten correct zijn ingesteld. Als je acht videokaarten hebt, hoef je niets te veranderen. Als het nummer anders is, dan veranderen we deze regels.
Neurale netwerk YaLM 100B in de praktijk. In de tweede regel, de nummers van de gebruikte apparaten (je kunt ze bekijken in nvidia-smi, die je al hebt gelanceerd). In de vierde, hun nummer.

7. Voer de docker-container uit

Voer de opdracht uit als u zich in de yalm-map bevindt:

sudo bash ./docker/run.sh

Als alles in orde is, wordt u naar een container geleid waarin u naar de map yalm in uw thuismap moet gaan.

cd ~/yalm

8. Voer het voorbeeld uit van YaLM 100B

We zijn klaar om een ​​van de voorbeelden te lanceren. Ze worden
hier beschreven .

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

Wees geduldig, het blijft nog 10-15 minuten wachten totdat het GPT2-model is gemaakt en de gewichten van de controlepunten zijn geladen.
Neurale netwerk YaLM 100B in de praktijk.

Wanneer de build is voltooid, zal MegatronML u vragen een context in te voeren om tekst te genereren. Wees voorzichtig als je typt. Onder bepaalde omstandigheden treedt er een fout op, crasht het programma en moet u de assembly opnieuw starten. Daarom is het beter om voorbeelden te gebruiken die tekst uit een bestand halen.

9. Resultaten van het werk

Neurale netwerk YaLM 100B in de praktijk.
Neurale netwerk YaLM 100B in de praktijk. Ziet er interessant uit. Dit zijn natuurlijk maar goede voorbeelden. Ik heb de test op verschillende monsters uitgevoerd. Zoals verwacht, hoe beter de context, hoe meer betekenisvolle tekst er wordt gegenereerd. De volledige set van experimentele generaties kan worden bekeken via de links:

Voor de prijs kostte het me ongeveer 9 duizend roebel voor het huren van servers met verschillende capaciteiten, van training en van voorbereiding tot generatie. Een bijzondere teleurstelling was dat je niet alles meteen kunt genereren. Het opstarten duurt erg lang en de tekst wordt niet zo snel gegenereerd als we zouden willen, gezien de kosten van de server per uur.
Neurale netwerk YaLM 100B in de praktijk.  

Hoe YaLM draaien zonder 200Gb GPU RAM?

Je moet deepspeed zero offload toevoegen aan de config. Voor degenen die weten waar we het over hebben, het zal heel gemakkelijk zijn om het te doen. Voor anderen is dit helemaal geen triviale taak. Het is belangrijk om te weten dat offload in CPU RAM of NVMe kan zijn. NVMe kun je op dit moment wel vergeten, want. er wordt een zeer grote hoeveelheid gegevens verwerkt en de schijf kan dit niet aan. Zero offload CPU is reëler. Toegegeven, hiervoor moet je 200+ Gb CPU RAM op voorraad hebben, wat ook niet goedkoop is. En één tekst zal ongeveer 20-40 minuten worden gegenereerd, omdat het nog niet mogelijk was om deze op twee videokaarten te parallelliseren. Zoals je in de onderstaande schermafbeelding kunt zien, was er bij de generatie maar één videokaart betrokken, en dan nog maar voor een kwart van het geheugen. Het valt nog te bezien waarom niet alle 24 GB worden gebruikt,
Neurale netwerk YaLM 100B in de praktijk. Welnu, tot slot zal ik zeggen dat het mogelijk is om zelfs op één RTX 3070 TI te draaien. Maar daar is geen bijzondere zin in, want. NVMe staat niet toe dat je snel 150 GB aan gegevens in de swap verwerkt, die zich in het aanhangsel van 96 GB RAM bevinden.
Neurale netwerk YaLM 100B in de praktijk.

Opsommen

Natuurlijk zal ik nog steeds proberen de optimale lanceerpaden te vinden. Maar tot nu toe ben ik tot de conclusie gekomen dat YaLM 100b te duur/te traag is voor mijn taken. Voor hetzelfde geld zullen mensen veel meer en veel beter schrijven. Maar ik denk dat het tijdelijk is, we zullen zien. Als je hulp nodig hebt bij het starten, instellen van yalm of als je de resultaten van je contextvoorbeelden wilt zien, schrijf dan naar de e-mail of telegram.

pskucherov
Rate author
Add a comment

  1. Olha

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

    Beantwoorden
  2. Данила

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

    Beantwoorden
  3. Дмитрий

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

    Beantwoorden