Programmering

Anmeldelse: MXNet dyb læring skinner med Gluon

Da jeg gennemgik MXNet v0.7 i 2016, følte jeg, at det var en lovende dyb læringsramme med fremragende skalerbarhed (næsten lineær på GPU-klynger), god automatisk differentiering og avanceret support til CUDA GPU'er. Jeg følte også, at det havde brug for arbejde med sin dokumentation og tutorials, og havde brug for mange flere eksempler i sin model zoo. Derudover ville jeg gerne have set et interface på højt niveau til MXNet, som jeg forestillede mig ville være Keras.

Siden da har der været en hel del fremskridt. MXNet flyttede under Apache Software Foundation-paraplyen tidligt i 2017, og selvom det stadig "inkuberer" i version 1.3, føles det ret godt uddybet.

Mens der har været arbejde på Keras med en MXNet-back-end, er en anden grænseflade på højt niveau blevet meget vigtigere: Gluon. Før inkorporeringen af ​​Gluon kunne du enten skrive let imperativ kode eller hurtig symbolsk kode i MXNet, men ikke begge på én gang. Med Gluon kan du kombinere det bedste fra begge verdener på en måde, der konkurrerer med både Keras og PyTorch.

Hvad er Gluon for MXNet?

Fordelene, der kræves for Gluon, inkluderer simpel kode, fleksibel modellering, dynamiske grafer og høj ydeevne:

  1. Enkel, let at forstå kode: Gluon tilbyder et komplet sæt plug-and-play neurale netværksbyggesten, inklusive foruddefinerede lag, optimeringer og initialiseringer.
  2. Fleksibel, bydende struktur: Gluon kræver ikke, at den neurale netværksmodel er defineret strengt, men bringer snarere træningsalgoritmen og modellen tættere sammen for at give fleksibilitet i udviklingsprocessen.
  3. Dynamiske grafer: Gluon gør det muligt for udviklere at definere neurale netværksmodeller, der er dynamiske, hvilket betyder, at de kan bygges med det samme, med en hvilken som helst struktur og ved hjælp af en hvilken som helst af Pythons oprindelige kontrolflow.
  4. Høj ydeevne: Gluon giver alle ovenstående fordele uden at påvirke træningshastigheden, som den underliggende motor giver.

Disse fire ting sammen med en meget udvidet samling af modeleksempler bringer Gluon / MXNet til grov paritet med Keras / TensorFlow og PyTorch for at lette udvikling og træningshastighed. Du kan se eksempler på Gluon-kode, der illustrerer hver af disse egenskaber, på hovedsiden Gluon og gentages på oversigtssiden for Gluon API.

Gluon API inkluderer funktionalitet til neurale netværkslag, tilbagevendende neurale netværk, tabsfunktioner, datasætmetoder og vision-datasæt, en modelzoo og et sæt eksperimentelt bidragede neurale netværksmetoder. Du kan frit kombinere Gluon med standard MXNet- og NumPy-moduler - for eksempel modul, autogradog ndarray- såvel som med Python-kontrolstrømme.

Gluon har et godt udvalg af lag til opbygning af modeller, herunder grundlæggende lag (tæt, udfald osv.), Sammenfoldningslag, poollag og aktiveringslag. Hver af disse er et opkald i en linje. Disse kan blandt andet bruges inde i netværkscontainere som f.eks gluon.nn.Sequential ().

EN HybridSequential netværk kan cachelagres (omdannes til en symbolsk graf) for høj ydeevne ved hjælp af hybridisere () metode:

net = nn.HybridSequential ()

med net.name_scope ():

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

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

net.add (nn. tæt (2))

net.hybridiser ()

Bemærk den måde, hvorpå Tæt lagmetoden kan tage et aktiveringslagnavn som en parameter. Det er en af ​​mange ligheder mellem Gluon og Keras.

Hverken den Sekventiel ej heller HybridSequential containere er dokumenteret som en del af Gluon API. Som jeg opdagede ved at søge i kildekodetræet, implementeres de i inkubator-mxnet / python / mxnet / gluon / nn / basic_layers.py.

Hvad er nyt i MXNet 1.3?

MXNet v1.3 indeholder en lang liste med nye funktioner, forbedringer og fejlrettelser. Højdepunkter inkluderer muligheden for at hybridisere RNN (tilbagevendende neurale netværk) lag til ydeevne, nye og opdaterede foruddannede visionmodeller, modeleksport til ONNX (Open Neural Network Exchange) -format og runtime-integration af Nvidia TensorRT i MXNet for at fremskynde inferens . Desuden giver integrationen af ​​Intel MKL (Math Kernel Library) i MXNet op til 4 gange forbedring af ydeevnen på Intel-CPU'er til intensiv drift, herunder foldningsnoder.

MXNet-samfundet har også været tættere på QA og kontinuerlig integration. Blandt de skridt, der er taget, er at integrere prøvebøgerne fra tutorial Deep Learning: The Straight Dope i den natlige CI-test.

Installation af MXNet uden tårer

Hvis du allerede har en fungerende, aktuel installation af Python-, MXNet- og Jupyter-notesbøger med Notedown, kan du springe til næste afsnit. Ellers skal du følge med.

Jeg kan ikke fortælle dig, hvor mange problemer jeg havde med ældre versioner af de forskellige softwarekomponenter, der smed uklare fejl sammen med interferens fra installationen af ​​andre pakker, før jeg fandt ud af denne reproducerbare sekvens. På denne måde skal du ikke støde på bugs undtagen i din egen kode, og du bør ikke bryde andre dybe læringsrammer, du måske har installeret.

Er det den eneste mulige installationsmulighed? Nej selvfølgelig ikke. Det er endnu nemmere at køre MXNet i Amazon SageMaker eller køre en Deep Learning AMI på AWS, som allerede har alt, hvad du har brug for installeret.

Start med at installere den nyeste version af Python 3 til din platform. (Jeg har haft problemer med at køre MXNet med Python 2 eller tidligere builds af Python 3.) Jeg foreslår at installere Python 3 fra Python.org. Hvis du foretrækker et Anaconda- eller MiniConda-miljø, kan du installere Python 3 med en af ​​disse i stedet og muligvis springe Jupyter-installationstrinet over.

Bekræft, at du kan køre python3 fra kommandolinjen, og at den rapporterer den nyeste version. I min installation i slutningen af ​​oktober 2018 python3 -V returnerer Python 3.7.1; din version kan være senere.

Installer derefter Jupyter. Jeg brugte pip. Dette trin er ikke nødvendigt, hvis du installerede Anaconda, som installerer Jupyter som standard.

python3 -m pip-installation - opgrader pip

python3 -m pip install jupyter

Hvis du løber jupyter notesbog fra kommandolinjen skal du se et browservindue åbent og være i stand til at oprette en ny notesbog med en Python 3-kerne. Luk disse to vinduer og stop notebook-serveren, typisk ved at trykke på Ctrl-c to gange på kommandolinjen.

Installer nu Notedown ved hjælp af en tarball som beskrevet i Gluon crash-kurset Readme. Notedown-pluginnet lader Jupyter læse notesbøger gemt i markdown-format, hvilket er nyttigt både til crashkurset og til Deep Learning: The Straight Dope.

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

Røgtest dette ved at køre Jupyter med Notedown:

jupyter notesbog --NotebookApp.contents_manager_class = 'bemærketown.NotedownContentsManager'

Luk igen alle websider og stop notebook-serveren.

Nu er vi klar til at skabe et virtuelt miljø til MXNet. Hvis du er en Anaconda-bruger, kan du i stedet oprette det virtuelle miljø med conda. Jeg brugte den oprindelige Python3 venv-facilitet startende fra min hjemmekatalog:

python3 -m venv envs / mxnet

Aktiver nu det virtuelle miljø og installer MXNet til din platform. Jeg valgte MXNet-build med MKL (Intels højtydende bibliotek til sine CPU'er), da jeg er på en Mac (som der ikke er MXNet-binær til CUDA GPU'er), men hvis du har en nylig Nvidia GPU med CUDA installeret på Linux eller Windows, kan du installere en MXNet-version med både CUDA- og MKL-understøttelse. På en Bash-shell var MXNet-installationen i det virtuelle miljø som følger:

kilde envs / mxnet / bin / aktiver

pip installere mxnet-mkl

Aktivering er lidt anderledes i C-shell og Fish shell, da du kan køre aktiveringsscriptet direkte i stedet for at bruge kilde. Under alle omstændigheder skal du aktivere miljøet, når du vil vende tilbage til denne MXNet-installation efter lukning af skallen. Hvis du ikke er i dit hjemmekatalog, vil Bash-aktiveringskommandoen være:

kilde ~ / envs / mxnet / bin / aktiver

Test MXNet-installationen på kommandolinjen ved at køre Python 3 og importere det MXNet-bibliotek, vi lige har installeret. Bemærk, at (mxnet) præfikset på kommandolinjen betyder, at vi er i det virtuelle miljø.

(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 “hjælp”, “ophavsret”, “kreditter” eller “licens” for at få flere oplysninger.

>>> 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 $

Nu er vi klar til at teste MXNet i en Jupyter-notesbog med Notedown i det virtuelle miljø, hvor vi installerede MXNet:

Nu hvor du har testet din MXNet-installation i en Jupyter-notesbog, kan du tage det næste trin og teste Gluon mere fuldstændigt. Gå til gluon-api / gluon-api repo på GitHub, og download Jupyter-notesbogen med prøvekoden. Skift til det bibliotek, hvor du downloadede den bærbare computer, aktivér dit virtuelle MXNet-miljø, hvis det er nødvendigt, kør Jupyter-notesbog, åbn prøven og kør den. Det kan tage et stykke tid at gennemføre træningen. Hvis alt er i orden, ser du noget i retning af følgende:

Gluon og MXNet-modulvejledninger

MXNet har nu en række tutorials både til Gluon og Module API. Jeg har allerede nævnt det lange kursus om dyb læring med Gluon, Deep Learning: The Straight Dope og den korte version, 60-minutters Gluon Crash Course.

Derudover er der omkring 30 Gluon-tutorials til Python. På modulets API-side er der omkring 24 tutorials til Python, fem til Scala, to til C ++, ni til R og fire til Perl.

Da jeg gennemgik Keras i september i år, sagde jeg, at "Hvis jeg startede et nyt dyb læringsprojekt i dag, ville jeg højst sandsynligt udforske med Keras." Jeg er ikke længere så sikker på det. Gluon / MXNet er næsten lige så godt et valg som Keras / TensorFlow til dyb læringsforskning på CPU'er og GPU'er.

På den nedre side mangler MXNet i øjeblikket support til TPU'er eller FPGA'er i modsætning til TensorFlow, og det mangler et ækvivalent af TensorFlow's TensorBoard til visualisering af grafer. Yderligere har Keras / TensorFlow et større økosystem end Gluon / MXNet.

Keras kan bruges i flere miljøer end Gluon, men dig kan implementere Gluon-modeller til forudsigelse til Android-, iOS-, Raspberry Pi- og Nvidia Jetson-enheder ud over computere, der er i stand til at træne modellerne og til TensorRT. Gluon og Keras er begge i øjeblikket mere modne end PyTorch, som stadig er i en beta-tilstand. PyTorch og Gluon kan begge oprette modeller dynamisk; Keras kan i øjeblikket ikke.

I sidste ende kan valget af, hvilken dyb læringsramme der skal bruges, dreje sig om dine specifikke krav - eller hvad du kender og kan lide. Men takket være Gluon og andre dramatiske forbedringer (i dokumentation, selvstudier, modeller osv.) Udformer MXNet sig til at være et lige så godt valg som TensorFlow eller PyTorch til dyb læring.