Programiranje

Pregled: MXNet globoko učenje sije z Gluonom

Ko sem leta 2016 pregledoval MXNet v0.7, sem začutil, da gre za obetaven okvir za globoko učenje z odlično razširljivostjo (skoraj linearno na grozdih GPU), dobro samodejno diferenciacijo in najsodobnejšo podporo za grafične procesorje CUDA. Zdelo se mi je tudi, da potrebuje delo v zvezi z dokumentacijo in vadnicami ter da potrebuje veliko več primerov v vzorčnem živalskem vrtu. Poleg tega bi rad videl vmesnik na visoki ravni za MXNet, za katerega sem mislil, da bi bil Keras.

Od takrat je bilo kar nekaj napredka. MXNet se je pod okriljem fundacije Apache Software Foundation preselil v začetku leta 2017, in čeprav še vedno "inkubira" v različici 1.3, se zdi precej dobro izpopolnjen.

Medtem ko je bilo na Kerasu že opravljeno delo s hrbtnim delom MXNet, je drugačen vmesnik na visoki ravni postal veliko pomembnejši: Gluon. Pred vključitvijo Gluona ste lahko v MXNet napisali preprosto obvezno kodo ali hitro simbolično kodo, vendar ne oboje hkrati. Z Gluonom lahko združite najboljše iz obeh svetov na način, ki tekmuje tako s Kerasom kot s PyTorchom.

Kaj je Gluon za MXNet?

Prednosti, ki jih zahteva Gluon, vključujejo preprosto kodo, prilagodljivo modeliranje, dinamične grafe in visoko zmogljivost:

  1. Preprosta, razumljiva koda: Gluon ponuja celoten sklop gradnikov nevronske mreže plug-and-play, vključno z vnaprej določenimi plastmi, optimizatorji in inicializatorji.
  2. Prilagodljiva, nujna struktura: Gluon ne zahteva natančnega definiranja modela nevronske mreže, temveč algoritem in model vadbe bolj približata, da zagotovita fleksibilnost v razvojnem procesu.
  3. Dinamični grafi: Gluon razvijalcem omogoča, da opredelijo dinamične modele nevronskih omrežij, kar pomeni, da jih je mogoče graditi sproti, s katero koli strukturo in z uporabo katerega koli Pythonovega naravnega krmilnega toka.
  4. Visokozmogljivo: Gluon zagotavlja vse zgoraj navedene prednosti, ne da bi to vplivalo na hitrost vadbe, ki jo zagotavlja osnovni motor.

Ti štirje predmeti, skupaj z močno razširjeno zbirko vzorčnih primerov, Gluon / MXNet približajo grobemu paritetam s Keras / TensorFlow in PyTorch za lažji razvoj in hitrost treninga. Na glavni strani Gluon si lahko ogledate primere kode Gluon, ki ponazarjajo vsako od teh značilnosti in ponovljene na strani s pregledom API-ja Gluon.

API Gluon vključuje funkcionalnost za plasti nevronske mreže, ponavljajoče se nevronske mreže, funkcije izgub, metode nizov podatkov in nize podatkov vida, modelni živalski vrt in niz eksperimentalno prispevanih metod nevronske mreže. Gluon lahko prosto kombinirate s standardnimi moduli MXNet in NumPy - na primer modul, avtograd, in ndarray- kot tudi pri nadzornih tokovih Pythona.

Gluon ima dober izbor plasti za gradnjo modelov, vključno z osnovnimi plastmi (gosto, izpadno itd.), Zvitimi plastmi, združitvenimi plastmi in aktivacijskimi plastmi. Vsak od teh je enosmerni klic. Ti se lahko med drugim uporabljajo tudi znotraj omrežnih vsebnikov, kot so gluon.nn.Sequential ().

A HybridSequential omrežje je mogoče predpomniti (pretvoriti v simbolični graf) za visoko zmogljivost z uporabo hibridiziraj () metoda:

net = nn.HybridSequential ()

z net.name_scope ():

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

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

net.add (nn.Dense (2))

net.hybridize ()

Upoštevajte način Gosta metoda plasti lahko za parameter vzame ime aktivacijske plasti. To je ena od številnih podobnosti med Gluonom in Kerasom.

Niti Zaporedni niti HybridSequential vsebniki je dokumentiran kot del API-ja Gluon. Kot sem odkril z iskanjem drevesa izvorne kode, so implementirani v incubator-mxnet / python / mxnet / gluon / nn / basic_layers.py.

Kaj je novega v MXNetu 1.3?

MXNet v1.3 vključuje dolg seznam novih funkcij, izboljšav in popravkov napak. Poudarki vključujejo zmožnost hibridizacije plasti RNN (ponavljajoče se nevronsko omrežje) za zmogljivost, nove in posodobljene predhodno usposobljene modele vida, izvoz modelov v format ONNX (Open Neural Network Exchange) in integracijo Nvidia TensorRT med izvajanjem v MXNet, da se pospeši sklepanje. . Poleg tega integracija Intel MKL (Math Kernel Library) v MXNet omogoča do štirikratno izboljšanje zmogljivosti procesorjev Intel za intenzivne operacije, vključno s konvolucijskimi vozli.

Skupnost MXNet je tudi bolj pozorna na zagotavljanje kakovosti in stalno integracijo. Med sprejetimi koraki je vključitev vzorčnih zvezkov iz vaje Deep Learning: The Straight Dope v nočno testiranje CI.

Namestitev MXNet brez solz

Če že imate delujočo, trenutno nameščeno zvezko Python, MXNet in Jupyter z Notedownom, lahko preskočite na naslednji razdelek. V nasprotnem primeru sledite.

Ne morem vam povedati, koliko težav sem imel pri starejših različicah različnih komponent programske opreme, ki so povzročale nejasne napake, skupaj z motnjami zaradi namestitev drugih paketov, preden sem ugotovil to ponovljivo zaporedje. Na ta način ne smete naleteti na napake, razen v lastni kodi, in ne smete razbiti drugih okvirov za poglobljeno učenje, ki ste jih morda namestili.

Ali je to edina možna možnost namestitve? Ne, seveda ne. Še lažje je zagnati MXNet v Amazon SageMaker ali zagnati AMP za globoko učenje na AWS, ki ima že nameščeno vse, kar potrebujete.

Začnite z namestitvijo najnovejše različice Python 3 za vašo platformo. (Imel sem težave pri zagonu MXNet s Python 2 ali starejšimi različicami Python 3.) Predlagam namestitev Pythona 3 s Python.org. Če imate raje okolje Anaconda ali MiniConda, lahko namesto tega namestite Python 3 in morda preskočite korak namestitve Jupyter.

Preverite, ali lahko zaženete python3 iz ukazne vrstice in da poroča o najnovejši različici. V moji namestitvi konec oktobra 2018 python3 -V vrne Python 3.7.1; vaša različica je lahko kasneje.

Nato namestite Jupyter. Uporabil sem pip. Ta korak ni potreben, če ste namestili Anacondo, ki privzeto namesti Jupyter.

python3 -m pip install - nadgradnja pipa

python3 -m pip namestite jupyter

Če tečeš zvezek jupyter v ukazni vrstici bi morali videti odprto okno brskalnika in ustvariti nov zvezek z jedrom Python 3. Zaprite ti dve okni in zaustavite strežnik zvezka, običajno tako, da dvakrat pritisnete Ctrl-c v ukazni vrstici.

Zdaj namestite Notedown s pomočjo tarball, kot je opisano v tečaju Gluon crash Readme. Vtičnik Notedown omogoča Jupyterju branje zvezkov, shranjenih v obliki zmanjšanja vrednosti, kar je koristno tako za potek trčenja kot za Deep Learning: The Straight Dope.

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

Preizkusite dim, tako da zaženete Jupyter z Notedown:

jupyter notebook --NotebookApp.contents_manager_class = 'noteown.NotedownContentsManager'

Še enkrat zaprite vse spletne strani in zaustavite strežnik prenosnika.

Zdaj smo pripravljeni ustvariti virtualno okolje za MXNet. Če ste uporabnik Anaconde, lahko namesto tega ustvarite navidezno okolje s conda. Uporabil sem izvorni objekt Python3 venv, začenši od domačega imenika:

python3 -m venv envs / mxnet

Zdaj aktivirajte navidezno okolje in namestite MXNet za svojo platformo. Izbral sem gradnjo MXNet z MKL (Intelova visokozmogljiva knjižnica za CPU), saj sem na Macu (za katerega ni binarne datoteke MXNet za grafične procesorje CUDA), če pa imate v Linuxu nameščen nedavno grafični procesor Nvidia s CUDA ali Windows, lahko namestite različico MXNet s podporo za CUDA in MKL. V lupini Bash je bila namestitev MXNet v navideznem okolju naslednja:

izvor envs / mxnet / bin / activate

pip namestite mxnet-mkl

Aktiviranje se nekoliko razlikuje pri lupini C in lupini Fish, saj lahko namesto uporabe zaženete skript za aktiviranje neposredno vir. V vsakem primeru boste morali okolje zapreti vsakič, ko se želite po zapiranju lupine vrniti v to namestitev MXNet. Če niste v domačem imeniku, bi bil ukaz za aktiviranje Bash:

vir ~ / envs / mxnet / bin / activate

Preizkusite namestitev MXNet v ukazni vrstici tako, da zaženete Python 3 in uvozite knjižnico MXNet, ki smo jo pravkar namestili. Upoštevajte, da (mxnet) predpona v ukazni vrstici pomeni, da smo v navideznem okolju.

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

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

[Clang 6.0 (clang-600.0.57)] na darwinu

Za več informacij vnesite »pomoč«, »avtorske pravice«, »dobropisi« ali »licenca«.

>>> uvozi mxnet kot mx

>>> iz mxnet import nd

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

[[1. 2. 3.]

 [5. 6. 7.]]

>>> ^ D

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

Zdaj smo pripravljeni preizkusiti MXNet v zvezku Jupyter z Notedownom v navideznem okolju, kjer smo namestili MXNet:

Zdaj, ko ste svojo namestitev MXNet preizkusili v prenosniku Jupyter, lahko naredite naslednji korak in celoviteje preizkusite Gluon. Poiščite repo za gluon-api / gluon-api na GitHub in prenesite Jupyterjev zvezek z vzorčno kodo. Preklopite v imenik, kamor ste prenesli zvezek, po potrebi aktivirajte navidezno okolje MXNet, zaženite zvezek Jupyter, odprite vzorec in ga zaženite. Učenje lahko traja nekaj časa. Če je vse v redu, boste videli nekaj takega:

Vadnice za modul Gluon in MXNet

MXNet ima zdaj številne vaje za Gluon in Module API. Omenil sem že dolg tečaj globokega učenja z Gluonom, Deep Learning: The Straight Dope in kratko različico, 60-minutni tečaj Gluon Crash.

Poleg tega obstaja približno 30 vaj za Gluon za Python. Na strani Module API je približno 24 vaj za Python, pet za Scalo, dve za C ++, devet za R in štiri za Perl.

Ko sem septembra letos pregledoval Kerasa, sem rekel: "Če bi danes začel nov projekt globokega učenja, bi najverjetneje raziskal s Kerasom." Nisem več tako prepričan v to. Gluon / MXNet je skoraj tako dobra izbira kot Keras / TensorFlow za globoko učenje raziskav CPU-jev in GPU-jev.

Na spodnji strani MXNet trenutno nima podpore za TPU-je ali FPGA-je, za razliko od TensorFlow, in nima enakovredne TensorFlowove TensorBoard za vizualizacijo grafov. Poleg tega ima Keras / TensorFlow večji ekosistem kot Gluon / MXNet.

Keras je mogoče namestiti v več okolij kot Gluon, vendar vi lahko modele Gluon za napovedovanje namestite na naprave Android, iOS, Raspberry Pi in Nvidia Jetson, poleg računalnikov, ki bodo sposobni trenirati modele, in na TensorRT. Gluon in Keras sta trenutno bolj zrela kot PyTorch, ki je še vedno v beta stanju. PyTorch in Gluon lahko oba dinamično ustvarjata modele; Keras trenutno ne more.

Na koncu se izbira, kateri okvir za poglobljeno učenje uporabiti, lahko vrti okoli vaših posebnih zahtev - ali tistega, kar veste in imate radi. Toda zahvaljujoč Gluonu in drugim dramatičnim izboljšavam (v dokumentaciji, vajah, modelih itd.) Se MXNet oblikuje kot dobra izbira kot TensorFlow ali PyTorch za globoko učenje.

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