Programovanie

Recenzia: MXNet deep learning žiari s Gluonom

Keď som v roku 2016 recenzoval MXNet v0.7, cítil som, že to bol sľubný rámec hlbokého učenia s vynikajúcou škálovateľnosťou (takmer lineárnou na klastroch GPU), dobrou automatickou diferenciáciou a najmodernejšou podporou grafických procesorov CUDA. Tiež som cítil, že potrebuje prácu na dokumentácii a návodoch, a potreboval oveľa viac príkladov vo svojej modelovej zoo. Okrem toho by som rád videl rozhranie na vysokej úrovni pre MXNet, o ktorom som si myslel, že bude Keras.

Odvtedy nastal dosť veľký pokrok. MXNet prešiel pod záštitu Apache Software Foundation začiatkom roku 2017, a hoci sa stále „inkubuje“ vo verzii 1.3, cíti sa byť celkom dobre koncipovaný.

Aj keď sa na serveri Keras s koncovým serverom MXNet už pracovalo, stalo sa oveľa dôležitejšie odlišné rozhranie na vysokej úrovni: Gluon. Pred začlenením Gluonu ste mohli do MXNet napísať buď jednoduchý imperatívny kód, alebo rýchly symbolický kód, ale nie obidva naraz. S Gluonom môžete kombinovať to najlepšie z oboch svetov spôsobom, ktorý konkuruje produktom Keras aj PyTorch.

Čo je to Gluon pre MXNet?

Medzi výhody nárokované pre Gluon patrí jednoduchý kód, flexibilné modelovanie, dynamické grafy a vysoký výkon:

  1. Jednoduchý a ľahko pochopiteľný kód: Gluon ponúka celú sadu stavebných blokov neurónovej siete typu plug-and-play, vrátane preddefinovaných vrstiev, optimalizátorov a inicializátorov.
  2. Flexibilná, nevyhnutná štruktúra: Gluon nevyžaduje, aby bol model neurónovej siete dôsledne definovaný, ale skôr zbližuje výcvikový algoritmus a model, aby poskytol flexibilitu v procese vývoja.
  3. Dynamické grafy: Gluon umožňuje vývojárom definovať modely neurónových sietí, ktoré sú dynamické, čo znamená, že je možné ich zostavovať za behu, s ľubovoľnou štruktúrou a s využitím ľubovoľného toku natívneho riadenia v Pythone.
  4. Vysoký výkon: Gluon poskytuje všetky vyššie uvedené výhody bez ovplyvnenia tréningovej rýchlosti, ktorú poskytuje základný motor.

Tieto štyri položky, spolu s výrazne rozšírenou zbierkou modelových príkladov, umožňujú Gluon / MXNet dosiahnuť hrubú paritu s Keras / TensorFlow a PyTorch pre ľahký vývoj a rýchlosť tréningu. Príklady kódov Gluon, ktoré ilustrujú každú z týchto charakteristík, môžete vidieť na hlavnej stránke Gluon a opakované na stránke súhrnu pre API Gluon.

Gluon API obsahuje funkcie pre vrstvy neurónovej siete, rekurentné neurónové siete, stratové funkcie, metódy súborov dát a súbory dát videnia, modelovú zoo a sadu experimentálnych metód neurónovej siete. Gluon môžete ľubovoľne kombinovať so štandardnými modulmi MXNet a NumPy - napríklad modul, autograda ndarray- rovnako ako pri riadiacich tokoch Pythonu.

Gluon má dobrý výber vrstiev pre vytváranie modelov, vrátane základných vrstiev (Dense, Dropout atď.), Konvolučných vrstiev, združovacích vrstiev a aktivačných vrstiev. Každé z nich je volanie prostredníctvom jednej linky. Môžu byť použité okrem iného aj vo vnútri sieťových kontajnerov ako napr gluon.nn. Sekvenčné ().

A HybridSequential sieť môže byť uložená v medzipamäti (zmenená na symbolický graf) pre vysoký výkon pomocou hybridizovať () metóda:

net = nn.HybridSequential ()

s net.name_scope ():

net.add (nn.Dense (256, activation = "relu"))

net.add (nn.Dense (128, activation = "relu"))

net.add (nn.Dense (2))

net.hybridize ()

Všimnite si spôsob Husté metóda vrstvy môže ako parameter brať názov aktivačnej vrstvy. To je jedna z mnohých podobností medzi Gluonom a Kerasom.

Ani Postupné ani HybridSequential kontajnerov je zdokumentovaná ako súčasť API Gluon. Ako som zistil pri prehľadávaní stromu zdrojových kódov, sú implementované v inkubátore-mxnet / python / mxnet / gluon / nn / basic_layers.py.

Čo je nové v MXNet 1.3?

MXNet v1.3 obsahuje dlhý zoznam nových funkcií, vylepšení a opráv chýb. Medzi najdôležitejšie patrí schopnosť hybridizovať vrstvy RNN (rekurentné neurónové siete) pre výkon, nové a aktualizované vopred vyškolené modely videnia, export modelu do formátu ONNX (Open Neural Network Exchange) a runtime integrácia Nvidia TensorRT do MXNet s cieľom urýchliť odvodenie . Ďalej integrácia Intel MKL (Math Kernel Library) do MXNet poskytuje až štvornásobné zlepšenie výkonu na procesoroch Intel pre intenzívne operácie vrátane konvolučných uzlov.

Komunita MXNet tiež venuje väčšiu pozornosť QA a neustálej integrácii. Medzi podniknuté kroky patrí integrácia vzorových notebookov z tutoriálu Deep Learning: The Straight Dope do nočného testovania CI.

Inštalácia siete MXNet bez sĺz

Ak už máte funkčnú a aktuálnu inštaláciu notebookov Python, MXNet a Jupyter s programom Notedown, môžete prejsť na ďalšiu časť. V opačnom prípade postupujte nasledovne.

Nemôžem vám povedať, koľko problémov som mal so staršími verziami rôznych softvérových komponentov, ktoré spôsobovali nejasné chyby spolu s interferenciou z inštalácií iných balíkov, kým som zistil túto reprodukovateľnú postupnosť. Týmto spôsobom by ste sa nemali stretávať s chybami, okrem svojho vlastného kódu, a nemali by ste porušovať ďalšie rámce hlbokého učenia, ktoré ste nainštalovali.

Je to jediná možná možnosť inštalácie? Nie, samozrejme, že nie. Je ešte jednoduchšie spustiť MXNet v Amazon SageMaker alebo spustiť Deep Learning AMI na AWS, v ktorom je už nainštalované všetko, čo potrebujete.

Začnite inštaláciou najnovšej verzie Pythonu 3 pre svoju platformu. (Mal som problémy so spustením MXNet s Pythonom 2 alebo staršími zostavami Pythonu 3.) Navrhujem nainštalovať Python 3 z Python.org. Ak uprednostňujete prostredie Anaconda alebo MiniConda, môžete namiesto toho nainštalovať Python 3 s jedným z nich a prípadne preskočiť krok inštalácie Jupyter.

Overte, či môžete spustiť python3 z príkazového riadku a že hlási najnovšiu verziu. V mojej inštalácii z konca októbra 2018 python3 -V vráti Python 3.7.1; vaša verzia môže byť neskôr.

Potom nainštalujte Jupyter. Použil som pip. Tento krok nie je potrebný, ak ste nainštalovali program Anaconda, ktorý predvolene inštaluje Jupyter.

python3 -m pip install --upgrade pip

python3 -m pip install jupyter

Ak bežíte zápisník jupyter z príkazového riadku by ste mali vidieť otvorené okno prehľadávača a byť schopní vytvoriť nový notebook s jadrom Python 3. Zatvorte tieto dve okná a zastavte server poznámkového bloku, zvyčajne dvojitým stlačením klávesovej skratky Ctrl-c na príkazovom riadku.

Teraz nainštalujte program Notedown pomocou tarballu, ako je opísané v rýchlokurze Gluon Readme. Zásuvný modul Notedown umožňuje Jupyteru čítať notebooky uložené vo formáte markdown, čo je užitočné ako pre rýchlokurz, tak pre Deep Learning: The Straight Dope.

pip install //github.com/mli/notedown/tarball/master

Vyskúšajte to dymom spustením programu Jupyter s programom Notedown:

poznámkový blok jupyter --NotebookApp.contents_manager_class = 'poznamenal.NotownownContentsManager'

Znova zatvorte všetky webové stránky a zastavte server prenosného počítača.

Teraz sme pripravení vytvoriť virtuálne prostredie pre MXNet. Ak ste používateľom Anacondy, môžete namiesto toho vytvoriť virtuálne prostredie s conda. Použil som natívne zariadenie Python3 venv, počnúc domovským adresárom:

python3 -m venv envs / mxnet

Teraz aktivujte virtuálne prostredie a nainštalujte MXNet pre svoju platformu. Vybral som si zostavu MXNet s MKL (vysokovýkonná knižnica spoločnosti Intel pre jej procesory), pretože som na počítači Mac (pre ktorý neexistuje grafická karta MXNet pre grafické karty CUDA), ale ak máte nedávny grafický procesor Nvidia s CUDA nainštalovaný v systéme Linux alebo Windows, môžete si nainštalovať verziu MXNet s podporou CUDA aj MKL. V prostredí Bash shell bola inštalácia MXNet vo virtuálnom prostredí nasledovná:

zdroj envs / mxnet / bin / aktivovať

pip nainštaluj mxnet-mkl

Aktivácia sa mierne líši v prostredí C shell a Fish shell, pretože namiesto použitia môžete priamo spustiť aktivačný skript zdroj. V každom prípade budete musieť prostredie zavrieť, kedykoľvek sa budete chcieť po zatvorení shellu vrátiť k tejto inštalácii MXNet. Ak sa nenachádzate vo svojom domovskom adresári, príkaz Bash Activation bude:

zdroj ~ / envs / mxnet / bin / aktivovať

Vyskúšajte inštaláciu MXNet na príkazovom riadku spustením Pythonu 3 a importom knižnice MXNet, ktorú sme práve nainštalovali. Všimnite si, že (mxnet) prefix na príkazovom riadku znamená, že sa nachádzame vo virtuálnom prostredí.

(mxnet) Martins-Retina-MacBook: ~ martinheller $ python3

Python 3.7.1 (v3.7.1: 260ec2c36a, 20. októbra 2018, 03:13:28)

[Clang 6.0 (clang-600.0.57)] na darwin

Ďalšie informácie získate zadaním výrazu „help“, „copyright“, „credit“ alebo „license“.

>>> importovať mxnet ako mx

>>> z mxnet import nd

>>> nd.array ((((1,2,3), (5,6,7)))

[[1. 2. 3.]

 [5. 6. 7.]]

>>> ^ D

(mxnet) Martins-Retina-MacBook: ~ martinheller $

Teraz sme pripravení otestovať MXNet v rámci notebooku Jupyter s programom Notedown vo virtuálnom prostredí, kde sme nainštalovali MXNet:

Teraz, keď ste testovali inštaláciu MXNet v notebooku Jupyter, môžete urobiť ďalší krok a podrobnejšie otestovať Gluon. Prejdite na gluon-api / gluon-api repo na GitHub a stiahnite si poznámkový blok Jupyter so vzorovým kódom. Prejdite do adresára, do ktorého ste prenosný počítač stiahli, v prípade potreby aktivujte svoje virtuálne prostredie MXNet, spustite poznámkový blok Jupyter, otvorte ukážku a spustite ho. Absolvovanie školenia môže chvíľu trvať. Ak je všetko v poriadku, uvidíte niečo ako toto:

Výukové programy pre moduly Gluon a MXNet

MXNet má teraz množstvo tutoriálov pre Gluon aj pre Module API. Už som spomenul dlhý kurz hlbokého učenia s Gluonom, Deep Learning: The Straight Dope a krátku verziu, 60-minútový kurz Crash Gluon.

Okrem toho existuje asi 30 výukových programov Gluon pre Python. Na strane modulu API existuje asi 24 výukových programov pre Python, päť pre Scala, dva pre C ++, deväť pre R a štyri pre Perl.

Keď som v septembri tohto roku recenzoval Keras, povedal som, že „Keby som dnes začínal nový projekt hlbokého učenia, s najväčšou pravdepodobnosťou by som urobil výskum s Kerasom.“ Tým si už nie som celkom istý. Gluon / MXNet je takmer rovnako dobrá voľba ako Keras / TensorFlow pre hlboký výučbový výskum na CPU a GPU.

Na druhej strane, MXNet na rozdiel od TensorFlow momentálne nemá podporu TPU alebo FPGA a na vizualizáciu grafov mu chýba ekvivalent TensorFlow’s TensorBoard. Ďalej má Keras / TensorFlow väčší ekosystém ako Gluon / MXNet.

Keras je možné nasadiť do viacerých prostredí ako Gluon, ale vy môcť nasadiť modely Gluon pre predikciu na zariadenia so systémom Android, iOS, Raspberry Pi a Nvidia Jetson, okrem počítačov schopných trénovať modely a do TensorRT. Gluon a Keras sú v súčasnosti vyspelejšie ako PyTorch, ktorý je stále v beta verzii. PyTorch a Gluon môžu vytvárať modely dynamicky; Keras momentálne nemôže.

V konečnom dôsledku sa výber toho, ktorý rámec hlbokého učenia chcete použiť, môže dobre točiť okolo vašich konkrétnych požiadaviek - alebo toho, čo viete a máte radi. Ale vďaka Gluon a ďalším dramatickým vylepšeniam (v dokumentácii, výukových programoch, modeloch atď.) Sa MXNet formuje tak, aby bola rovnako dobrou voľbou ako TensorFlow alebo PyTorch pre hlboké učenie.

$config[zx-auto] not found$config[zx-overlay] not found