- 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.
- 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.
- 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.
- 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
- 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)
- 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?
- 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.
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 jepotrebné 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.