forked from KEMT/zpwiki
		
	
		
			
				
	
	
		
			219 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			219 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | |
| title: Lukáš Pokrývka
 | |
| published: true
 | |
| taxonomy:
 | |
|     category: [dp2021,bp2019]
 | |
|     tag: [gpu,cloud]
 | |
|     author: Daniel Hladek
 | |
| ---
 | |
| # 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](https://www.banggood.com/NVIDIA-Jetson-Nano-Developer-Embedded-Development-Board-A57-Artificial-Intelligence-AI-Development-Platform-p-1519173.html?gpla=1&gmcCountry=SK¤cy=EUR&createTmp=1&utm_source=googleshopping&utm_medium=cpc_bgs&utm_content=lijing&utm_campaign=ssc-sk-ele-0309&ad_id=424274501985&gclid=Cj0KCQjw2PP1BRCiARIsAEqv-pTspekjYB4EACHoOyFRq41LhNM2dQ532-fTAsjzZPy9-2aH7H9cEh0aAuf0EALw_wcB&cur_warehouse=CN) / pre vedúceho
 | |
| - nájsť vhodnú neurónovú sieť ktorá bude vedieť využívať NCCL, optimálne založenú na PyTorchm napr. [Fairseq](https://github.com/pytorch/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:
 | |
| 
 | |
| - Pozrite si [metódy vyhodnotenia embedding modelov](https://duckduckgo.com/?t=ffab&q=word+embedding+evaluation&ia=web). Ako by ste postupovali pri vyhodnotení slovenského modelu?
 | |
| - Pozrite si https://spacy.io/usage/training
 | |
| - Pozrite si [repozitáre a výsledky týkajúce sa Spacy](/topics/spacy).
 | |
| - Vyhodnotte slovenský spacy model
 | |
| 
 | |
| 
 | |
| 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](./timovy_projekt)
 | |
| 
 | |
| 
 | |
| 
 | |
| - Zaujímavá príručka [Word2vec na Spark](http://spark.apache.org/docs/latest/ml-features.html#word2vec)
 | |
| 
 | |
| ### 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](./dp2021/scripts/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.
 | |
| 
 | |
| 
 | |
| 
 | |
| 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. 
 |