MXNet 入門

 MXNet DeepLearning Python
2016.12.06

DeepLearning Advent Calendar 2016 4 日目です。 3 日目は @tereka114 さんの「グレーの画像に色をつけるネットワークについて発表しました。」でした。

 

最近 AWS が公式にサポートを表明した深層学習フレームワーク MXNet に、彼らの記事や各種チュートリアルを通して入門してみようと思います。

MXNet とは

概要

mxnet.jpg

MXNet はワシントン大学とカーネギーメロン大学によって、CNN と LSTM をサポートするために開発されはじめました。効率的で柔軟な深層学習フレームワークとなるよう設計されています。

特徴

AWS が MXNet を支援すると決めた理由に、以下の 3 つをあげています。

その他にも MXNet には以下のような特徴があります。

余談ですが、re:Invent2016 のセッション中、AWS のとある AI エンジニア曰く 「多くの部分で TensorFlow より秀でている1。ドキュメントは負けてるけどね!笑」

スケーラビリティ

MXNet はコンピュートリソースを追加すればするほど処理能力が向上します。 つまりリソースを追加する だけ で、より精度の高いモデルを、より速い時間で学習できる可能性があるということです。

以下は Inception v3 を AWS の P2 インスタンス で動作させた検証結果だそうです。スケーリングの実行効率はおおよそ 85% とのこと。 mxnet-result.png

TensorFlow などもマルチ GPU 対応による同様の能力はあるものの、検証した結果、現在 MXNet がもっとも理想に近い処理能力向上がみられるとのこと。TensorFlow については GCP なら TPU で最適化されているようですし、個人的にはいつか GCP で同様の検証をしてみたいところです。

豊富な対応言語

languages.png

学習には PythonC++RScala/JavaJulia が使え、 推論にはそれらに加え MatlabJavaScript 向けの API も用意されています。

AWS のエンジニアによると、AWS の各種サービスそのものを始め、社内では様々な言語が使われている背景からも MXNet が魅力的だったとのことです。

軽量かつ高い可搬性

portable.png

MXNet は RunAnywhere、様々なデバイスやプラットフォームに対応2しています。

またメモリ効率にも優れており、1,000 層もの深いネットワークでもわずか 4GB のメモリしか消費しません。Android や iOS、ブラウザ側で推論を行う際にこの特徴はとても際立ちます。

命令的 / 宣言的プログラムの混合

効率性・生産性を高めるために、命令的 / 宣言的なプログラムを 併用する ことができます。 論文 によれば、これは主要な深層学習フレームワークの中では MXNet だけが持っている特徴であり、MXNet という名前の由来になってもいるようです。(Mix => MX)

具体的にどういうことかというと、それぞれ以下のようなプログラムのことを指し

import numpy as np
a = np.ones(10)
b = np.ones(10) * 2
c = b * a
d = c + 1
A = Variable('A')
B = Variable('B')
C = B * A
D = C + Constant(1)
# compiles the function
f = compile(D)
d = f(A=np.ones(10), B=np.ones(10)*2)

それぞれ

であり、汎用性や最適化可能性などにおいて一長一短あります。 ディープダイブしたい方は こちら に公式ドキュメントがあります。

豊富な深層学習モデルのサポート

もともと、畳み込みニューラルネットワーク (CNN) や Long Short-Term Memory ネットワーク (LSTM) を含む最先端の深層学習モデルをサポートしていました。しかし今では RCNNDQN と言った手法での利用例も公開しています。

適応範囲も画像認識だけでなく、自然言語処理からレコメンド生成まで幅広く使われています。

使い方

インストール

Python の依存性解決によるインストールは こちら。Docker なら こちら。 AmazonLinux の場合は、後述の AMI を利用するのがオススメです。

チュートリアル

適用分野やプログラミング言語で分類された、公式ドキュメントはこちら http://mxnet.io/tutorials/index.html

GitHub で公開されている全ての参考ソースはこちら https://github.com/apache/incubator-mxnet/tree/master/example

簡単にそれらを始めるためには http://qiita.com/pottava/items/0d40747287ff31b8db77

 

  1. お祭りの中での一言です。TensorFlow ガチ勢な各位におかれましては、暖かい心で読んでいただけばと。 

  2. FPGA については TensorFlow 同様現在未対応ですが、コミッタの一人は「ロードマップにはあるよ」と言っていました。ここ にはなさそうですが。笑