Programování

Recenze: MXNet deep learning září s Gluon

Když jsem v roce 2016 zkontroloval MXNet v0.7, cítil jsem, že se jedná o slibný rámec hlubokého učení s vynikající škálovatelností (téměř lineární u GPU klastrů), dobrou automatickou diferenciací a nejmodernější podporou GPU CUDA. Také jsem cítil, že potřebuje práci na své dokumentaci a cvičeních, a potřebuje mnohem více příkladů ve své modelové zoo. Kromě toho bych rád viděl rozhraní na vysoké úrovni pro MXNet, o kterém jsem si myslel, že bude Keras.

Od té doby došlo k malému pokroku. MXNet se pod záštitou Apache Software Foundation přestěhovala počátkem roku 2017, a přestože se stále „inkubuje“ ve verzi 1.3, cítí se celkem dobře.

Zatímco se na Kerasu s back-endem MXNet pracovalo, stalo se mnohem důležitější jiné rozhraní na vysoké úrovni: Gluon. Před začleněním Gluonu jste mohli do MXNet napsat jednoduchý imperativní kód nebo rychlý symbolický kód, ale ne oba najednou. S Gluon můžete kombinovat to nejlepší z obou světů způsobem, který konkuruje Keras i PyTorch.

Co je Gluon pro MXNet?

Mezi výhody nárokované pro Gluon patří jednoduchý kód, flexibilní modelování, dynamické grafy a vysoký výkon:

  1. Jednoduchý a snadno srozumitelný kód: Gluon nabízí celou sadu stavebních bloků neuronových sítí typu plug-and-play, včetně předdefinovaných vrstev, optimalizátorů a inicializátorů.
  2. Flexibilní, nezbytná struktura: Gluon nevyžaduje, aby byl model neuronové sítě přesně definován, ale spíše přibližuje tréninkový algoritmus a model k sobě, aby poskytoval flexibilitu v procesu vývoje.
  3. Dynamické grafy: Gluon umožňuje vývojářům definovat modely neuronových sítí, které jsou dynamické, což znamená, že je lze vytvářet za běhu, s jakoukoli strukturou a s využitím jakéhokoli toku nativního řízení Pythonu.
  4. Vysoký výkon: Gluon poskytuje všechny výše uvedené výhody, aniž by to ovlivnilo rychlost tréninku, kterou poskytuje základní motor.

Tyto čtyři položky spolu s obrovsky rozšířenou kolekcí modelových příkladů přinášejí Gluon / MXNet k hrubé paritě s Keras / TensorFlow a PyTorch pro snadný vývoj a rychlost tréninku. Na hlavní stránce Gluon a na stránce s přehledem Gluon API můžete vidět příklady kódu Gluon ilustrující každou z těchto charakteristik.

Gluon API zahrnuje funkce pro vrstvy neuronových sítí, rekurentní neuronové sítě, funkce ztráty, metody datových sad a datové sady vidění, modelovou zoo a sadu experimentálních metod neuronových sítí. Gluon můžete libovolně kombinovat se standardními moduly MXNet a NumPy - například modul, autograd, a ndarray- stejně jako u toků řízení Pythonu.

Gluon má dobrý výběr vrstev pro vytváření modelů, včetně základních vrstev (Dense, Dropout atd.), Konvolučních vrstev, sdružování vrstev a aktivačních vrstev. Každý z nich je volání na jednu linku. Ty lze použít mimo jiné uvnitř síťových kontejnerů, jako jsou gluon.nn. Sekvenční ().

A Hybridní sekvenční síť může být uložena do mezipaměti (přeměněna na symbolický graf) pro vysoký výkon pomocí hybridizovat () metoda:

net = nn.HybridSequential ()

s net.name_scope ():

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

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

net.add (nn. Hustý (2))

net.hybridize ()

Všimněte si, jak Hustý metoda vrstvy může jako parametr brát název aktivační vrstvy. To je jedna z mnoha podobností mezi Gluonem a Kerasem.

Ani Sekvenční ani Hybridní sekvenční Kontejnery jsou dokumentovány jako součást Gluon API. Jak jsem zjistil prohledáním stromu zdrojového kódu, jsou implementovány v inkubátoru-mxnet / python / mxnet / gluon / nn / basic_layers.py.

Co je nového v MXNet 1.3?

MXNet v1.3 obsahuje dlouhý seznam nových funkcí, vylepšení a oprav chyb. Mezi hlavní výhody patří schopnost hybridizovat vrstvy RNN (rekurentní neurální sítě) pro výkon, nové a aktualizované předem vyškolené modely vidění, export modelu do formátu ONNX (Open Neural Network Exchange) a runtime integrace Nvidia TensorRT do MXNet, aby se urychlil závěr . Integrace Intel MKL (Math Kernel Library) do MXNet dále poskytuje až 4x zlepšení výkonu na procesorech Intel pro intenzivní operace, včetně konvolučních uzlů.

Komunita MXNet také věnuje větší pozornost QA a nepřetržité integraci. Mezi kroky patří integrace ukázkových notebooků z tutoriálu Deep Learning: The Straight Dope do nočního testování CI.

Instalace MXNet bez slz

Pokud již máte funkční aktuální instalaci notebooků Python, MXNet a Jupyter s Notedown, můžete přeskočit na další část. Jinak prosím pokračujte.

Než zjistím tuto reprodukovatelnou sekvenci, nemohu vám říci, kolik problémů jsem měl se staršími verzemi různých softwarových komponent, které způsobovaly obskurní chyby, spolu s rušením instalací jiných balíčků. Tímto způsobem byste se neměli setkávat s chybami, s výjimkou vlastního kódu, a neměli byste porušovat další rámce hlubokého učení, které jste nainstalovali.

Je to jediná možná možnost instalace? Ne, samozřejmě že ne. Je ještě snazší spustit MXNet v Amazon SageMaker nebo spustit Deep Learning AMI na AWS, který má vše, co potřebujete, již nainstalované.

Začněte instalací nejnovější verze Pythonu 3 pro vaši platformu. (Měl jsem problémy se spuštěním MXNet s Pythonem 2 nebo staršími verzemi Pythonu 3.) Navrhuji nainstalovat Python 3 z Python.org. Pokud dáváte přednost prostředí Anaconda nebo MiniConda, můžete místo toho nainstalovat Python 3 s jedním z nich a případně přeskočit instalační krok Jupyter.

Ověřte, že můžete spustit python3 z příkazového řádku a že hlásí nejnovější verzi. V mé instalaci z konce října 2018 python3 -V vrací Python 3.7.1; vaše verze může být později.

Poté nainstalujte Jupyter. Použil jsem pip. Tento krok není nutný, pokud jste nainstalovali Anacondu, která ve výchozím nastavení instaluje Jupyter.

python3 -m pip install --upgrade pip

python3 -m pip install jupyter

Pokud běžíte notebook jupyter z příkazového řádku byste měli vidět otevřené okno prohlížeče a být schopni vytvořit nový notebook s jádrem Pythonu 3. Zavřete tato dvě okna a zastavte server poznámkového bloku, obvykle dvojím stisknutím Ctrl-c na příkazovém řádku.

Nyní nainstalujte Notedown pomocí tarballu, jak je popsáno v Gluonově havarijním kurzu Readme. Zásuvný modul Notedown umožňuje Jupyteru číst notebooky uložené ve formátu markdown, což je užitečné jak pro rychlokurz, tak pro Deep Learning: The Straight Dope.

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

Kouř otestujte spuštěním Jupyter s Notedown:

notebook jupyter --NotebookApp.contents_manager_class = 'poznamenalown.NotownownContentsManager'

Opět zavřete všechny webové stránky a zastavte server poznámkového bloku.

Nyní jsme připraveni vytvořit virtuální prostředí pro MXNet. Pokud jste uživatelem Anaconda, můžete místo toho vytvořit virtuální prostředí s conda. Použil jsem nativní zařízení Python3 venv, počínaje mým domovským adresářem:

python3 -m venv envs / mxnet

Nyní aktivujte virtuální prostředí a nainstalujte MXNet pro svou platformu. Vybral jsem sestavení MXNet s MKL (vysoce výkonná knihovna Intel pro jeho CPU), protože jsem na Macu (pro který neexistuje GPN binární pro GPU CUDA), ale pokud máte nedávnou GPU Nvidia s CUDA nainstalovanou na Linuxu nebo Windows, můžete nainstalovat verzi MXNet s podporou CUDA i MKL. Na prostředí Bash shell byla instalace MXNet ve virtuálním prostředí následující:

zdroj envs / mxnet / bin / Activate

pip install mxnet-mkl

Aktivace se mírně liší v prostředí C a Fish, protože aktivační skript můžete spustit přímo namísto použití zdroj. V každém případě budete muset prostředí aktivovat, kdykoli se budete chtít po zavření prostředí vrátit k této instalaci MXNet. Pokud nejste ve svém domovském adresáři, příkaz Bash Activation bude:

zdroj ~ / envs / mxnet / bin / Activate

Otestujte instalaci MXNet na příkazovém řádku spuštěním Pythonu 3 a importem knihovny MXNet, kterou jsme právě nainstalovali. Všimněte si, že (mxnet) prefix na příkazovém řádku znamená, že jsme ve virtuálním prostředí.

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

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

[Clang 6.0 (clang-600.0.57)] na darwin

Další informace získáte zadáním „help“, „copyright“, „credit“ nebo „license“.

>>> importovat mxnet jako 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 $

Nyní jsme připraveni otestovat MXNet v notebooku Jupyter s Notedown ve virtuálním prostředí, kde jsme nainstalovali MXNet:

Nyní, když jste otestovali instalaci MXNet v notebooku Jupyter, můžete udělat další krok a podrobněji otestovat Gluon. Přejděte na gluon-api / gluon-api repo na GitHubu a stáhněte si poznámkový blok Jupyter ukázkového kódu. Přejděte do adresáře, do kterého jste notebook stáhli, v případě potřeby aktivujte virtuální prostředí MXNet, spusťte notebook Jupyter, otevřete ukázku a spusťte jej. Absolvování školení může chvíli trvat. Pokud je vše v pořádku, uvidíte něco jako následující:

Výukový program pro moduly Gluon a MXNet

MXNet má nyní řadu výukových programů jak pro Gluon, tak pro Module API. Již jsem zmínil dlouhý kurz hlubokého učení s Gluonem, Deep Learning: The Straight Dope a krátkou verzi, 60minutový kurz Crash Crash.

Kromě toho existuje asi 30 výukových programů Gluon pro Python. Na straně modulu API existuje asi 24 výukových programů pro Python, pět pro Scala, dva pro C ++, devět pro R a čtyři pro Perl.

Když jsem v září tohoto roku recenzoval Keras, řekl jsem, že „Kdybych dnes zahajoval nový projekt hlubokého učení, nejpravděpodobněji bych provedl průzkum s Kerasem.“ Už si tím nejsem úplně jistý. Gluon / MXNet je téměř stejně dobrá volba jako Keras / TensorFlow pro hloubkový výzkum CPU a GPU.

Na druhé straně MXNet v současné době na rozdíl od TensorFlow postrádá podporu TPU nebo FPGA a pro vizualizaci grafů postrádá ekvivalent TensorFlow's TensorBoard. Kromě toho má Keras / TensorFlow větší ekosystém než Gluon / MXNet.

Keras lze nasadit ve více prostředích než Gluon, ale vy umět nasadit modely Gluon pro predikci na zařízení Android, iOS, Raspberry Pi a Nvidia Jetson, kromě počítačů schopných trénovat modely a na TensorRT. Gluon a Keras jsou v současné době zralejší než PyTorch, který je stále ve stavu beta. PyTorch a Gluon mohou oba vytvářet modely dynamicky; Keras v současné době nemůže.

Volba toho, který rámec hlubokého učení použít, se nakonec může dobře točit kolem vašich konkrétních požadavků - nebo toho, co znáte a máte rádi. Ale díky Gluon a dalším dramatickým vylepšením (v dokumentaci, výukových programech, modelech atd.) Se MXNet formuje tak, aby byla stejně dobrou volbou jako TensorFlow nebo PyTorch pro hluboké učení.

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