Lukáš Pokrývka

March 5, 2021 Daniel Hladek dp2021, bp2019 5 minutes, 27 seconds

Lukáš Pokrývka

Rok začiatku štúdia: 2016

Názov: Paralelné trénovanie neurónových sietí

Meno vedúceho: Ing. Daniel Hládek, PhD.

Diplomová práca 2021

  1. Vypracujte prehľad literatúry na tému "Paralelné trénovanie neurónových sietí".
  2. Vyberte vhodnú metódu paralelného trénovania.
  3. Pripravte dáta a vykonajte sadu experimentov pre overenie funkčnosti a výkonu paralelného trénovania.
  4. Navrhnite možné zlepšenia paralelného trénovania neurónových sietí.

Stretnutie: 5.3.2021

Stav:

  • Urobené trénovanie na dvoch servroch pomocou distributed_data_parallel MNIST.
  • Funguje LUNA dataset (na 1 stroji a na viacerých kartách).

Diplomový projekt 2 2020

Ciele na semester:

  • Pripraviť tabuľku s výsledkami experimentov v rôznych konfiguráciách
  • Napísať stručný report (cca 8 strán) vo forme článku.

Zásobník úloh:

  • Ten istý scenár spustiť v rôznych podmienkach a zmerať čas.
    • Trénovanie na jednej karte na jednom stroji
      • tesla
      • xavier
    • Trénovanie na dvoch kartách na jednom stroji
      • idoc DONE
      • titan
    • možno trénovanie na 4 kartách na jednom
      • quadra
    • Trénovanie na dvoch kartách na dvoch strojoch pomocou NCCL (idoc, tesla)
    • možno trénovanie na 2 kartách na dvoch strojoch (quadra plus idoc).

Virtuálne stretnutie 4.12.2020

Stav:

  • Vyriešený problém s CUDA Compute Capability. Každý conda baliček podporuje inú verziu CC. Aktuálna verzia Pytorch pracuje iba s Compute Capability 3.7 a viac. Conda Pytorch 1.3 vyžaduje CC 3.7. Tesla karta podporuje iba 3.5. Podpora CC sa dá pridať inštaláciou zo zdroja. Funguje cuda 10.0.
  • Podarilo sa natrénovať MNIST na dvoch strojoch naraz - idoc + tesla. Pytorch 1.4, wrapper distributed_data_paralel. NCCL backend. Na každom stroji sa používa rovnaký počet GPU. GPU môžu byť rôzne.

Úlohy:

  • Doplniť tabuľku podpory CC v Pytorch.
  • Opísať problém s Compute Capability. Čo je to CC?
  • Napísať "tutoriál" ako paralelne trénovať pomocou distributed_data_parallel a NCCL. Napíšte aký setup (verzia pytorch, verzia cuda, požiaadavky na GPU ..) si paralelné trénovanie vyžaduje.
  • Opísať testovacie úlohy ktoré používate
  • Vypracujte tabuľku s vykonanými experimentami.
  • Skúste trénovanie na xavier, skompilovaný Pytorch je v adresári hladek.
  • Quadru prediskutovať (vedúci).

Virtuálne stretnutie 13.11.2020

Stav:

  • Preštudovaná kniha "Deep Learning with PyTorch" o multi GPU tréningu.
  • vyskúšaný LUNA dataset, CT torza pre detekciu rakoviny pľúc - 60GB dát. Dáta sa predpripravia a uložia do cache. 10 epoch trvá 1 hod na bežnom počítači. Nastal problém s "Compute Capability" - kompatibilita verzie CUDA, Pytorch a GPU Tesla V40.
  • vyskúšaný wrapper data_paralel, distribute_data_parallel (trénovanie pytorch v klastri).
  • Pytorch Lightning - cluster trénovanie Pytorch cez Slurm.

Úlohy na ďalšie stretnutie:

  • Pracujte na písomnej časti.
  • Pokračujte na benchmark experimentoch - trénovanie na viacerých strojoch (idoc a tesla) naraz.

Virtuálne stretnutie 27.10.2020

Stav:

  • Trénovanie na procesore, na 1 GPU, na 2 GPU na idoc
  • Príprava podkladov na trénovanie na dvoch strojoch pomocou Pytorch.
  • Vytvorený prístup na teslu a xavier.

Úlohy na ďďalšie stretnutie:

  • Štdúdium odbornej literatúry a vypracovanie poznámok.
  • Pokračovať v otvorených úlohách zo zásobníka
  • Vypracované skripty uložiť na GIT repozitár
  • vytvorte repozitár dp2021

Stretnutie 2.10.2020

Urobené https://github.com/LukasPokryvka/YELP-on-GPU

  • demonštračná úloha pre automatické hodnotenie reštaurácií na základe recenzie v anglickom jazyku, dátová sada yelp.
  • preštudovaná kniha NLP with Pytorch, NLP in Action.
  • trénovanie na NVIDIA RTX2070 Super.

Úlohy do ďalšieho stretnutia:

  • Prejsť odborné publikácie na tému "benchmarking" a "parallel training of neural networks".
    • Zapísať si relevantné bibliografické odkazy.
    • Zapísať poznámky
    • Použiť index scopus alebo scholar
  • Trénovanie na jednej karte na jednom stroji
    • tesla.fei.tuke.sk
  • Trénovanie na dvoch kartách na jednom stroji - zistite čas trénovania a spotrebu pamäte.
    • idoc

Diplomový projekt 1 2020

Paralelné trénovanie neurónových sietí pomocou knižnice Pytorch. Úlohy na semester:

  • podrobne si naštudovať vybranú metódu trénovania neurónových sietí
  • identifikujte možný spôsob paralelizácie
  • natrénujte zvolený model metódou paralelizácie

Revízia 11.6:

  • Prebieha nákup https://www.nvidia.com/en-us/autonomous-machines/embedded-systems/jetson-agx-xavier/
  • zatiaľ NCCL nefunguje na Jetson Nano, funguje na Jetson Xavier?
  • Spustenie paralelného trénovania PyTorch https://pytorch.org/docs/stable/distributed.html#launch-utility
  • Spustenie paralelného trénovania Fairseq https://fairseq.readthedocs.io/en/latest/getting_started.html#distributed-training

Revízia 13.5:

Pozrite si odkazy na paralelné trénovanie:

  • Knižnica pre neuronové siete podobná TensorFlow https://pytorch.org
  • Trénovanie WordEmbedding v PyTorch https://pytorch.org/tutorials/beginner/nlp/word_embeddings_tutorial.html
  • Toolkit na medziprocesovú komunikáciu https://developer.nvidia.com/nccl Podporuje aj trénovanie na viacerých výpočtových uzloch naraz. PyTorch podporuje NCCL aj Goo toolit
  • Toolkit na medziprocesovú komunikáciu https://github.com/facebookincubator/gloo
  • Paralelné trénovanie pomocou Pytorch https://pytorch.org/docs/stable/distributed.html /

Virtuálne stretnutie 14.4:

Nové úlohy:

  • rozbehať knižnicu NCCL na servri idoc
  • Preskúmať možnosti zakúpenia NVIDIA Jetson / pre vedúceho
  • nájsť vhodnú neurónovú sieť ktorá bude vedieť využívať NCCL, optimálne založenú na PyTorchm napr. Fairseq

Revízia 14.4.

  • Natrénovaný FastText a GenSim word embedding model na slovenských dátach.

Revízia 9.4.:

Nové úlohy:

Natrénujte word embedding model na veľkých dátach (odkaz poskytnutý). Môžete použiť server idoc.

Nové úlohy:

Stretnutie 9.3.2020

Úlohy na ďalšie stretnutie:

  • Skúste natrénovať slovenský word2vec model podľa tutoriálu: http://spark.apache.org/docs/latest/ml-features.html#word2vec (podľa dát z emailu)
  • Pozrite si niečo o metóde BERT

  • https://medium.com/huggingface/introducing-fastbert-a-simple-deep-learning-library-for-bert-models-89ff763ad384
  • https://github.com/huggingface/transformers

Tímový projekt 2019

Úlohy tímového projektu:

  • Vypracujte min. 4 stranový rešerš na tému: "Paralelné spracovanie prirodzeného jazyka" (využitie napr. s word2vec, word embeddings, GloVe, fastText).
  • Citujte min. 10 najvýznamnejších bibliografických zdrojov.

Písomná práca: Paralelné spracovanie prirodzeného jazyka

Priebeh práce

1. Pokus o natrénovanie modelu pomocou knižnice Gensim

Ako prvý nástroj na zoznámenie sa s trénovaním W2V som zvolil Gensim. Nevýhodou knižnice je, že pri trénovaní nevyužíva GPU v žiadnom prípade. Podľa zdrojov na internete je však Gensim násobne rýchlejšia knižnica pri implementácii na menšie korpusy (https://rare-technologies.com/gensim-word2vec-on-cpu-faster-than-word2veckeras-on-gpu-incubator-student-blog/). Keďže môj korpus má približne 30GB, trénovanie pomocou Gensim by zrejme nebol najlepší nápad. Preto som si z korpusu vytiahol prvých 10,000 riadkov a otestoval implementáciu na tomto súbore. Celý skript je dostupný na gensim_W2V.py. Výsledok nebol vôbec presný, čo sa vzhľadom na veľkosť korpusu dalo očakávať. Pri slove letisko bola však zhoda vysoká, čo potvrdzuje správnosť implementácie.

Výsledok implementácie Gensim

Keďže som mal problém skript s plným korpusom spustiť na školskom serveri, v ďalšom riešení chcem využiť aj GPU. V úvahu pripadá aj rozdelenie korpusu na viacero častí s tým, že sa zachová kontext.

2. Natrénovanie slovenského modelu pomocou knižnice fasttext

Ako druhú možnosť na natrénovanie slovenského modelu som využil fasttext, knižnicu od Facebook-u. Prostredie a všetky dependencies som si vytvoril pomocou Anacondy. Následne som si naklonoval projekt z gitu (https://github.com/facebookresearch/fastText.git). Fasstext poskytuje jednoduchý nástroj na vyčistenie dát, ktorý všetky slová pretransformuje na lowercase a oddelí ich od čiarok, bodiek, atď... Následne je potrebné správne nastaviť spúšťacie parametre a zvoliť si metódu CBOW alebo skip-gram. V mojom prípade som zvolil 2-gram, dimenzionalitu vektorov 200, a nastavil som počet epochov na 10, pomocou ktorých sa vhybovosť výrazne znížila. Taktiež je možné nastaviť, koľko jadier procesora sa má využívať pre multi-threading. Na dátach o veľkosti približne 13GB trvalo trénovanie takmer 24 hodín. Výstupom su 2 súbory .bin a .vec. Prvý súbor obsahuje celý natrénovaný model a môže byť ďalej používaný a načítavaný podľa potreby, druhý súbor obsahuje vektory slov, jeden riadok pre každé slovo.

alt