Programmering

Gjennomgang: MXNet dyp læring skinner med Gluon

Da jeg gjennomgikk MXNet v0.7 i 2016, følte jeg at det var et lovende rammeverk for dyp læring med utmerket skalerbarhet (nesten lineær på GPU-klynger), god automatisk differensiering og toppmoderne støtte for CUDA GPUer. Jeg følte også at det trengte arbeid med dokumentasjonen og veiledningene, og trengte mange flere eksempler i sin modellpark. I tillegg hadde jeg likt å se et høyt nivågrensesnitt for MXNet, som jeg forestilte meg ville være Keras.

Siden den gang har det vært ganske mye fremgang. MXNet flyttet under Apache Software Foundation-paraplyen tidlig i 2017, og selv om den fremdeles "inkuberer" i versjon 1.3, føles den ganske godt utfyllet.

Mens det har vært arbeidet på Keras med en MXNet-bakside, har et annet høyt nivågrensesnitt blitt mye viktigere: Gluon. Før innlemmelsen av Gluon, kan du enten skrive enkel tvingende kode eller rask symbolsk kode i MXNet, men ikke begge på en gang. Med Gluon kan du kombinere det beste fra begge verdener, på en måte som konkurrerer med både Keras og PyTorch.

Hva er Gluon for MXNet?

Fordelene som er påstått for Gluon inkluderer enkel kode, fleksibel modellering, dynamiske grafer og høy ytelse:

  1. Enkel, lettfattelig kode: Gluon tilbyr et komplett sett med plug-and-play nevrale nettverksbyggesteiner, inkludert forhåndsdefinerte lag, optimaliserere og initialiserere.
  2. Fleksibel, tvingende struktur: Gluon krever ikke at nevrale nettverksmodell skal være stivt definert, men bringer heller treningsalgoritmen og modellen nærmere hverandre for å gi fleksibilitet i utviklingsprosessen.
  3. Dynamiske grafer: Gluon gjør det mulig for utviklere å definere nevrale nettverksmodeller som er dynamiske, noe som betyr at de kan bygges på farten, med hvilken som helst struktur, og bruke hvilken som helst av Pythons opprinnelige kontrollflyt.
  4. Høy ytelse: Gluon gir alle fordelene ovenfor uten å påvirke treningshastigheten som den underliggende motoren gir.

Disse fire elementene, sammen med en vidt utvidet samling av modelleksempler, bringer Gluon / MXNet til grov paritet med Keras / TensorFlow og PyTorch for enkel utvikling og treningshastighet. Du kan se eksempler på Gluon-kode som illustrerer hver av disse egenskapene på hovedsiden Gluon og gjentas på oversiktssiden for Gluon API.

Gluon API inkluderer funksjonalitet for nevrale nettverkslag, tilbakevendende nevrale nettverk, tapsfunksjoner, datasettmetoder og visjonsdatasett, en modell zoo og et sett eksperimentelt bidratt med nevrale nettverksmetoder. Du kan fritt kombinere Gluon med standard MXNet- og NumPy-moduler - for eksempel modul, autograd, og ndarray—Så vel som med Python-kontrollflyter.

Gluon har et godt utvalg av lag for å bygge modeller, inkludert grunnleggende lag (Dense, Dropout, etc.), konvolusjonslag, poolinglag og aktiveringslag. Hver av disse er en samtalelinje. Disse kan blant annet brukes inne i nettverkscontainere som gluon.nn.Sequential ().

EN HybridSekvensiell nettverket kan caches (omgjort til en symbolsk graf) for høy ytelse ved hjelp av hybridisere () metode:

netto = nn.HybridSequential ()

med net.name_scope ():

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

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

net.add (nn. tett (2))

net.hybridize ()

Legg merke til hvordan Tett lagmetoden kan ta et aktiveringslagnavn som en parameter. Det er en av mange likheter mellom Gluon og Keras.

Verken den Sekvensiell ei heller HybridSekvensiell containere er dokumentert som en del av Gluon API. Som jeg oppdaget ved å søke i kildekodetreet, implementeres de i inkubator-mxnet / python / mxnet / gluon / nn / basic_layers.py.

Hva er nytt i MXNet 1.3?

MXNet v1.3 inneholder en lang liste med nye funksjoner, forbedringer og feilrettinger. Høydepunkter inkluderer muligheten til å hybridisere RNN (tilbakevendende nevrale nettverk) lag for ytelse, nye og oppdaterte forhåndstrente visjonsmodeller, modelleksport til ONNX (Open Neural Network Exchange) -format og kjøretidsintegrering av Nvidia TensorRT i MXNet for å akselerere inferens . Videre gir integrasjonen av Intel MKL (Math Kernel Library) i MXNet opptil 4 ganger forbedring av ytelsen på Intel-prosessorer for intensiv drift, inkludert konvolusjonsnoder.

MXNet-samfunnet har også fulgt nærmere med QA og kontinuerlig integrering. Blant trinnene som er tatt er å integrere eksemplene på notatbøker fra veiledningen Deep Learning: The Straight Dope i den nattlige CI-testen.

Installasjon av MXNet uten tårer

Hvis du allerede har en fungerende, nåværende installasjon av Python-, MXNet- og Jupyter-notatbøker med Notedown, kan du hoppe til neste seksjon. Ellers følg med.

Jeg kan ikke fortelle deg hvor mange problemer jeg hadde med eldre versjoner av de forskjellige programvarekomponentene som kastet uklare feil, sammen med interferens fra installasjoner av andre pakker, før jeg fant ut denne reproduserbare sekvensen. På denne måten bør du ikke støte på bugs, bortsett fra i din egen kode, og du bør ikke bryte andre dype læringsrammer du kanskje har installert.

Er det det eneste mulige installasjonsalternativet? Nei selvfølgelig ikke. Det er enda enklere å kjøre MXNet i Amazon SageMaker, eller kjøre en Deep Learning AMI på AWS, som allerede har alt du trenger installert.

Start med å installere den nyeste versjonen av Python 3 for plattformen din. (Jeg har hatt problemer med å kjøre MXNet med Python 2 eller tidligere versjoner av Python 3.) Jeg foreslår at du installerer Python 3 fra Python.org. Hvis du foretrekker et Anaconda- eller MiniConda-miljø, kan du installere Python 3 med en av disse i stedet, og eventuelt hoppe over installasjonstrinnet for Jupyter.

Bekreft at du kan løpe python3 fra kommandolinjen og at den rapporterer den siste versjonen. I slutten av oktober 2018-installasjonen, python3 -V returnerer Python 3.7.1; din versjon kan komme senere.

Deretter installerer du Jupyter. Jeg brukte pip. Dette trinnet er ikke nødvendig hvis du installerte Anaconda, som installerer Jupyter som standard.

python3 -m pip install - oppgrader pip

python3 -m pip install jupyter

Hvis du løper jupyter notatbok fra kommandolinjen skal du se et nettleservindu åpent, og kunne lage en ny notatbok med en Python 3-kjerne. Lukk de to vinduene og stopp notebook-serveren, vanligvis ved å trykke Ctrl-c to ganger på kommandolinjen.

Installer nå Notedown ved hjelp av en tarball som beskrevet i Gluon-kollisjonskurset Readme. Med Notedown-plugin-modulen kan Jupyter lese notatbøker lagret i markdown-format, noe som er nyttig både for kollisjonskurset og for Deep Learning: The Straight Dope.

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

Røykprøve dette ved å kjøre Jupyter med Notedown:

jupyter notatbok --NotebookApp.contents_manager_class = 'bemerketown.NotedownContentsManager'

Nok en gang lukker du nettsider og stopper den bærbare serveren.

Nå er vi klare til å skape et virtuelt miljø for MXNet. Hvis du er en Anaconda-bruker, kan du i stedet opprette det virtuelle miljøet med conda. Jeg brukte det opprinnelige Python3 venv-anlegget, startende fra hjemmekatalogen min:

python3 -m venv envs / mxnet

Aktiver nå det virtuelle miljøet og installer MXNet for plattformen din. Jeg valgte MXNet-bygningen med MKL (Intels høyytelsesbibliotek for sine CPUer), da jeg er på en Mac (som det ikke er noe MXNet-binært for CUDA GPUer), men hvis du har en nylig Nvidia GPU med CUDA installert på Linux eller Windows, kan du installere en MXNet-versjon med både CUDA- og MKL-støtte. På et Bash-skall var MXNet-installasjonen i det virtuelle miljøet som følger:

kilde envs / mxnet / bin / aktivere

pip installere mxnet-mkl

Aktivering er litt annerledes i C-skall og Fiskeskall, da du kan kjøre aktiveringsskriptet direkte i stedet for å bruke kilde. I alle fall må du aktivere miljøet når du vil komme tilbake til denne MXNet-installasjonen etter å ha lukket skallet. Hvis du ikke er i hjemmekatalogen din, vil Bash-aktiveringskommandoen være:

kilde ~ / envs / mxnet / bin / aktiver

Test MXNet-installasjonen på kommandolinjen ved å kjøre Python 3 og importere MXNet-biblioteket vi nettopp har installert. Merk at (mxnet) prefikset på kommandolinjen betyr at vi er i det virtuelle miljøet.

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

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

[Clang 6.0 (clang-600.0.57)] på darwin

Skriv inn “help”, “copyright”, “credits” eller “lisens” for mer informasjon.

>>> importer mxnet som mx

>>> fra mxnet import nd

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

[[1. 2. 3.]

 [5. 6. 7.]]

>>> ^ D

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

Nå er vi klare til å teste MXNet i en Jupyter-notatbok med Notedown, i det virtuelle miljøet der vi installerte MXNet:

Nå som du har testet MXNet-installasjonen din i en Jupyter-notatbok, kan du ta neste trinn og teste Gluon mer fullstendig. Bla til gluon-api / gluon-api repo på GitHub, og last ned Jupyter-notatblokken med eksempelkoden. Bytt til katalogen der du lastet ned notisboken, aktiver om nødvendig det virtuelle MXNet-miljøet, kjør Jupyter-notatblokken, åpne prøven og kjør den. Det kan ta litt tid å fullføre opplæringen. Hvis alt er bra, ser du noe som følger:

Gluon og MXNet Module tutorials

MXNet har nå en rekke opplæringsprogrammer både for Gluon og Module API. Jeg har allerede nevnt det lange kurset om dyp læring med Gluon, Deep Learning: The Straight Dope, og kortversjonen, 60-minutters Gluon Crash Course.

I tillegg er det omtrent 30 Gluon-opplæringsprogrammer for Python. På Module API-siden er det omtrent 24 opplæringsprogrammer for Python, fem for Scala, to for C ++, ni for R og fire for Perl.

Da jeg gjennomgikk Keras i september i år, sa jeg at "Hvis jeg startet et nytt dyplæringsprosjekt i dag, ville jeg mest sannsynlig gjøre undersøkelsen med Keras." Jeg er ikke lenger så sikker på det. Gluon / MXNet er nesten et like godt valg som Keras / TensorFlow for dyp læringsforskning på CPUer og GPUer.

På den nedre siden mangler MXNet for tiden støtte for TPUer eller FPGAer, i motsetning til TensorFlow, og det mangler et ekvivalent av TensorFlow's TensorBoard for visualisering av grafer. Videre har Keras / TensorFlow et større økosystem enn Gluon / MXNet.

Keras kan distribueres i flere miljøer enn Gluon, men du kan distribuere Gluon-modeller for prediksjon til Android-, iOS-, Raspberry Pi- og Nvidia Jetson-enheter, i tillegg til datamaskiner som kan trene modellene og til TensorRT. Gluon og Keras er for tiden mer modne enn PyTorch, som fremdeles er i beta-tilstand. PyTorch og Gluon kan begge lage modeller dynamisk; Keras kan for øyeblikket ikke.

Til syvende og sist kan valget av rammeverk for dyp læring du kan bruke, dreie seg om dine spesifikke krav — eller hva du vet og liker. Men takket være Gluon og andre dramatiske forbedringer (i dokumentasjon, opplæringsprogrammer, modeller osv.), Formes MXNet til å bli et like godt valg som TensorFlow eller PyTorch for dyp læring.

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