Ohjelmointi

Katsaus: MXNet-syvä oppiminen loistaa Gluonilla

Tarkastellessani MXNet v0.7: ää vuonna 2016 tunsin, että se oli lupaava syvä oppimiskehys, jolla oli erinomainen skaalautuvuus (lähes lineaarinen GPU-klustereissa), hyvä automaattinen erilaistuminen ja huipputekninen tuki CUDA-näytönohjaimille. Minusta tuntui myös, että se tarvitsi työtä dokumentaationsa ja opetusohjelmiensa parissa, ja tarvitsin paljon enemmän esimerkkejä mallintarhassaan. Lisäksi olisin halunnut nähdä korkean tason käyttöliittymän MXNetille, jonka kuvittelin olevan Keras.

Siitä lähtien edistystä on tapahtunut melko vähän. MXNet muutti Apache Software Foundationin sateenvarjon alle vuoden 2017 alussa, ja vaikka se vielä "inkuboi" versiossa 1.3, se tuntuu melko täydelliseltä.

Vaikka Kerasilla on tehty työtä MXNet-taustapuolella, erilainen korkean tason käyttöliittymä on tullut paljon tärkeämmäksi: Gluon. Ennen Gluonin liittämistä voit joko kirjoittaa yksinkertaisen pakollisen koodin tai nopean symbolisen koodin MXNetiin, mutta et molempia kerralla. Gluonin avulla voit yhdistää molempien maailmojen parhaat puolet tavalla, joka kilpailee sekä Kerasin että PyTorchin kanssa.

Mikä on Gluon MXNetille?

Gluonille haettuja etuja ovat yksinkertainen koodi, joustava mallinnus, dynaamiset kaaviot ja korkea suorituskyky:

  1. Yksinkertainen, helposti ymmärrettävä koodi: Gluon tarjoaa täyden sarjan plug-and-play-hermoverkon rakennuspalikoita, mukaan lukien ennalta määritetyt kerrokset, optimoijat ja alustajat.
  2. Joustava, välttämätön rakenne: Gluon ei vaadi hermoverkkomallin tarkkaa määrittelyä, vaan pikemminkin tuo harjoitusalgoritmin ja mallin lähemmäksi toisiaan tarjotakseen joustavuutta kehitysprosessissa.
  3. Dynaamiset kaaviot: Gluon antaa kehittäjille mahdollisuuden määritellä dynaamisia hermoverkkomalleja, mikä tarkoittaa, että ne voidaan rakentaa lennossa, kaikilla rakenteilla ja käyttämällä mitä tahansa Pythonin natiivia ohjausvirtaa.
  4. Korkea suorituskyky: Gluon tarjoaa kaikki edellä mainitut edut vaikuttamatta harjoituksen nopeuteen, jonka taustalla oleva moottori tarjoaa.

Nämä neljä tuotetta yhdessä huomattavasti laajennetun malliesimerkkien kanssa tuovat Gluon / MXNetin karkeaan pariteettiin Keras / TensorFlow- ja PyTorch-laitteiden kanssa kehityksen ja harjoittelunopeuden helpottamiseksi. Näet Gluon-koodiesimerkit, jotka havainnollistavat näitä ominaisuuksia Gluon-pääsivulla ja toistetaan Gluon-sovellusliittymän yleiskatsaussivulla.

Gluon-sovellusliittymä sisältää toiminnot hermoverkkokerroksille, toistuville hermoverkoille, menetystoiminnot, tietojoukkomenetelmät ja näkötietojoukot, mallintarhan ja joukon kokeellisia neuroverkkomenetelmiä. Voit vapaasti yhdistää Gluonin tavallisiin MXNet- ja NumPy-moduuleihin - esimerkiksi moduuli, autogradja ndarray— Samoin kuin Python-ohjausvirtojen kanssa.

Gluonilla on hyvä valikoima kerroksia rakennemalleja varten, mukaan lukien peruskerrokset (tiheä, putoava jne.), Konvoluutiokerrokset, poolikerrokset ja aktivointikerrokset. Jokainen näistä on yhden linjan puhelu. Näitä voidaan käyttää muun muassa verkkokonttien sisällä, kuten gluon.nn.Sequential ().

A Hybridisekvenssi Verkko voidaan tallentaa välimuistiin (muuttaa symboliseksi kaaviona) korkean suorituskyvyn saavuttamiseksi hybridisoitua () menetelmä:

net = nn.HybridSequential ()

net.name_scope ():

net.add (nn. tiheä (256, aktivointi = "relu"))

net.add (nn. tiheä (128, aktivointi = "relu"))

net.add (nn. tiheä (2))

net.hybridize ()

Huomaa tapa Tiheä layer-menetelmä voi ottaa aktivointikerroksen nimen parametriksi. Se on yksi monista yhtäläisyyksistä Gluonin ja Kerasin välillä.

Kumpikaan Peräkkäinen eikä Hybridisekvenssi kontit on dokumentoitu osana Gluon-sovellusliittymää. Kuten löysin etsimällä lähdekoodipuuta, ne toteutetaan hakemistossa inkubaattori-mxnet / python / mxnet / gluon / nn / basic_layers.py.

Mitä uutta MXNet 1.3: ssa on?

MXNet v1.3 sisältää pitkän luettelon uusista ominaisuuksista, parannuksista ja virhekorjauksista. Kohokohdat sisältävät kyvyn hybridisoida RNN (toistuva hermoverkko) kerrokset suorituskyvyn saavuttamiseksi, uudet ja päivitetyt ennalta koulutetut näkömallit, mallien vienti ONNX (Open Neural Network Exchange) -muotoon ja Nvidia TensorRT: n ajonaikainen integrointi MXNetiin päättelyn nopeuttamiseksi. . Lisäksi Intel MKL: n (Math Kernel Library) integrointi MXNetiin parantaa jopa nelinkertaisesti suorituskykyä Intel-suorittimissa intensiivisiin toimintoihin, mukaan lukien konvoluutiosolmut.

MXNet-yhteisö on myös kiinnittänyt enemmän huomiota laadunvalvontaan ja jatkuvaan integraatioon. Toteutettujen vaiheiden joukossa on integroida Deep Learning: The Straight Dope -oppaasta otetut muistikirjat öiseen CI-testaukseen.

MXNetin asennus ilman repeämiä

Jos sinulla on jo käynnissä oleva Python-, MXNet- ja Jupyter-muistikirjojen Notedown-asennus, voit siirtyä seuraavaan osioon. Muussa tapauksessa seuraa ohjeita.

En voi kertoa, kuinka monta ongelmaa minulla oli ohjelmistokomponenttien vanhempien versioiden kanssa, jotka heittivät epäselviä virheitä, samoin kuin muiden pakettien asennusten aiheuttamat häiriöt, ennen kuin selvitin tämän toistettavan sarjan. Tällä tavoin sinun ei pitäisi kohdata virheitä, paitsi omassa koodissasi, eikä sinun pitäisi rikkoa muita mahdollisesti asentamiasi syvällisiä oppimisen puitteita.

Onko se ainoa mahdollinen asennusvaihtoehto? Ei tietenkään. Vielä helpompaa on ajaa MXNet Amazon SageMakerissa tai suorittaa Deep Learning AMI AWS: llä, johon kaikki tarvitsemasi on jo asennettu.

Aloita asentamalla Python 3: n uusin versio käyttöjärjestelmällesi. (Minulla on ollut ongelmia MXNetin käytössä Python 2: n tai sitä aikaisempien versioiden kanssa.) Ehdotan Python 3: n asentamista Python.org-sivustosta. Jos haluat mieluummin Anaconda- tai MiniConda-ympäristön, voit asentaa Python 3: n johonkin niistä ja mahdollisesti ohittaa Jupyter-asennusvaiheen.

Varmista, että voit suorittaa python 3 komentoriviltä ja että se raportoi uusimman version. Lokakuun lopun 2018 asennuksessani python3 -V palauttaa Python 3.7.1; versiosi voi olla myöhempi.

Asenna sitten Jupyter. Käytin pipiä. Tätä vaihetta ei tarvita, jos olet asentanut Anacondan, joka asentaa Jupyterin oletuksena.

python3 -m pip install - päivitä pip

python3 -m pip install jupyter

Jos juokset jupyter-muistikirja komentoriviltä sinun pitäisi nähdä selainikkuna auki ja pystyä luomaan uusi muistikirja Python 3 -ydin. Sulje nämä kaksi ikkunaa ja pysäytä kannettavan palvelin, yleensä painamalla Ctrl-c kahdesti komentorivillä.

Asenna nyt Notedown paketin avulla Gluonin kaatumiskurssilla Readme kuvatulla tavalla. Notedown-laajennuksen avulla Jupyter voi lukea markdown-muodossa tallennettuja muistikirjoja, mikä on hyödyllistä sekä kaatumiskurssille että Deep Learning: The Straight Dope -sovellukselle.

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

Savutesti tämä suorittamalla Jupyter Notedownilla:

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

Sulje jälleen kaikki verkkosivut ja pysäytä kannettavan palvelin.

Nyt olemme valmiita luomaan virtuaalisen ympäristön MXNetille. Jos olet Anaconda-käyttäjä, voit sen sijaan luoda virtuaalisen ympäristön condalla. Käytin omaa Python3 venv -laitetta kotihakemistostani alkaen:

python3 -m venv envs / mxnet

Aktivoi nyt virtuaaliympäristö ja asenna MXNet käyttöjärjestelmällesi. Valitsin MXNet-rakennuksen MKL: llä (Intelin korkean suorituskyvyn kirjasto suorittimille), koska olen Macissa (jolle ei ole MXNet-binaaria CUDA-näytönohjaimille), mutta jos sinulla on hiljattain Nvidia GPU, jossa CUDA on asennettu Linuxiin tai Windows, voit asentaa MXNet-version sekä CUDA- että MKL-tuella. Bash-kuoressa MXNet-asennus virtuaalisessa ympäristössä oli seuraava:

lähde envs / mxnet / bin / aktivoi

pip asenna mxnet-mkl

Aktivointi on hieman erilainen C-kuoressa ja Fish-kuoressa, koska voit suorittaa aktivointiohjelman suoraan käyttämisen sijaan lähde. Joka tapauksessa sinun on aktivoitava ympäristö aina, kun haluat palata tähän MXNet-asennukseen kuoren sulkemisen jälkeen. Jos et ole kotihakemistossasi, Bash-aktivointikomento olisi:

lähde ~ / envs / mxnet / bin / aktivoi

Testaa MXNet-asennus komentoriviltä suorittamalla Python 3 ja tuomalla juuri asentamasi MXNet-kirjasto. Huomaa, että (mxnet) komentorivillä oleva etuliite tarkoittaa, että olemme virtuaalisessa ympäristössä.

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

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

[Clang 6.0 (clang-600.0.57)] darwinilla

Kirjoita "help", "copyright", "credits" tai "license" saadaksesi lisätietoja.

>>> tuo mxnet muodossa mx

>>> mxnet-tuonnista

>>> ns. palkki (((1,2,3), (5,6,7)))

[[1. 2. 3.]

 [5. 6. 7.]]

>>> ^ D

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

Nyt olemme valmiita testaamaan MXNet-sovellusta Jupyter-muistikirjassa Notedownin kanssa virtuaalisessa ympäristössä, johon MXNet asennettiin:

Nyt kun olet testannut MXNet-asennuksesi Jupyter-muistikirjassa, voit ottaa seuraavan vaiheen ja testata Gluonia täydellisemmin. Selaa GitHubissa olevaan gluon-api / gluon-api-repoon ja lataa mallikoodin Jupyter-muistikirja. Vaihda hakemistoon, johon olet ladannut muistikirjan, aktivoi MXNet-virtuaaliympäristö tarvittaessa, suorita Jupyter-muistikirja, avaa näyte ja suorita se. Koulutuksen suorittaminen voi kestää jonkin aikaa. Jos kaikki on hyvin, näet jotain seuraavista:

Gluon- ja MXNet-moduulin oppaat

MXNetillä on nyt useita oppaita sekä Gluonille että Module API: lle. Olen jo maininnut pitkän oppimisen syvällisestä oppimisesta Gluonin kanssa, Deep Learning: The Straight Dope ja lyhyen version, 60 minuutin Gluon Crash Course.

Lisäksi Pythonille on noin 30 Gluon-opetusohjelmaa. Moduulin sovellusliittymän puolella on noin 24 opetusohjelmaa Pythonille, viisi Scalalle, kaksi C ++: lle, yhdeksän R: lle ja neljä Perlille.

Tarkastellessani Kerasia tämän vuoden syyskuussa sanoin, että "Jos aloitin uuden syvähankintaprojektin tänään, tekisin todennäköisesti tutkimuksen Kerasin kanssa." En ole enää niin varma siitä. Gluon / MXNet on melkein yhtä hyvä valinta kuin Keras / TensorFlow CPU: iden ja GPU: iden syvälliseen oppimiseen.

MXNetiltä puuttuu tällä hetkellä tuki TPU: ille tai FPGA: lle, toisin kuin TensorFlow, ja siltä puuttuu vastaava TensorFlow's TensorBoard graafien visualisointiin. Lisäksi Keras / TensorFlow'lla on suurempi ekosysteemi kuin Gluon / MXNetillä.

Keras voidaan ottaa käyttöön useammissa ympäristöissä kuin Gluon, mutta sinä voi ottaa käyttöön Gluon-mallit ennustamista varten Android-, iOS-, Raspberry Pi- ja Nvidia Jetson -laitteille niiden tietokoneiden lisäksi, jotka pystyvät kouluttamaan malleja ja TensorRT: hen. Gluon ja Keras ovat molemmat kypsempiä kuin PyTorch, joka on edelleen beetatilassa. PyTorch ja Gluon voivat molemmat luoda malleja dynaamisesti; Keras ei tällä hetkellä voi.

Viime kädessä valinta sille, minkä syvällisen oppimisen viitekehystä haluat käyttää, saattaa kiertää erityisvaatimuksesi - tai mitä tiedät ja pidät. Mutta Gluonin ja muiden dramaattisten parannusten (dokumentaatiossa, opetusohjelmissa, malleissa jne.) Ansiosta MXNet on muuttumassa yhtä hyväksi vaihtoehdoksi kuin TensorFlow tai PyTorch syvälliseen oppimiseen.

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