備忘録

mxnet, keras, DeepLearning, AI

MXNetとは?【比較編】

DeepLearningのフレームワークはたくさん存在します。個人的にApache MXNetをもっと多くの人に知ってもらいたいなという想いがあり、今回はMXNetについて書きたいなと思いました。
この記事は過去に書いたものを復活させたものです。速度など変化している可能性もあります。

MXNetとは?

最初の開発はワシントン大学カーネギーメロン大学によって行われていました。
その後、AWSが公式サポートを表明したことでより注目を集めるようになりました。

現在(2018/04)ではApache Incubatorに認定されています。

2018年03月にはApache MXNet 1.1も公開されました。
->(今では1.4がリリースされています!)

このバージョンアップではCPUとGPUの性能が向上したとされています。
GPUの場合20%も性能が改善されたとこのことです。

2017年12月に1.0がでたのですがアップデートが早かったですね

ちなみにMXNetのバージョンはDockerが最新とされています
より新しいものを試したい方はDockerで使うことをおすすめします

Docker
https://hub.docker.com/u/mxnet/

1. 多くの特徴

MXNetには様々な特徴があります。

  • 様々な言語に対応している
    Python, C++, R, Scala, Java, Julia, Matlab, JavaScriptに対応しています。
    例えばPythonで学習をさせてScalaで読み込んでSparkで分散処理したい!ということが可能です。

  • 高速
    高速です。
    速さについては下でも書きたいと思います。

  • カスタマイズしやすい
    実際に使ってみてもカスタマイズのしやすさは実感しました!
    とても柔軟にやりたいことを実現することができます。
    CPUとGPUのコードもほぼ同じなので簡単に環境を変えることも可能です

  • AWSがサポートをしている
    参考: MXNet とは | AWS
    AWSが好きな身としては嬉しいです。
    SageMakerでも現状対応されているものはtensorflowとMXNetです!
    もちろん他のフレームワークでも書けますが書きやすいのはこの2つですね


このように特徴はたくさんあります
やはり様々な言語で使用できる点や高速な点など魅力的ですね

また、おもしろい魅力としてリソースを追加すればするほど速くなるという特徴もあります!

このように様々な方面から使いやすさがある点がおすすめする一つ目の理由です

2. サンプルコードが豊富

MXNetのサンプルコードは豊富にあります!

github.com

少しドキュメントが足りないなと思う部分やちょっと書いてあること違うなと思うこともでてくるかもしれません。
しかしサンプルコードが豊富なのでちょっとコードを読むと解決することができます!

画像の分類をしてみたい!
と思った場合でもサンプルコードを参照することで簡単に動かせるでしょう!

基本はPythonのコードが多いですがRなどもサンプルがあるので困ることは少ないかもしれません。

kaggleのサンプルコードもあるのでより実際に使うときに参考になります。

3. kerasとの速度を比較!

MXNet速いというのはよく聞きますがどのくらい速いのでしょうか?
わたしはkerasをよく使っていたのでkerasと比べてどのくらい速いかを比較してみました

MXNetもkerasもサンプルコードが豊富にあるので使わせていただきます

今回試してみるのはcifar10です!

MXNetのパフォーマンスをあげる方法としてrecファイルを使用するというものがあります
今回はrecファイルを使用しているものと比較をしたかったのでcifar10を使ってみました

コードは以下のURLのものを拝借しました

keras :
github.com

MXNet :
github.com

パラメータが少しずれている部分もあるのであわせます

AWS P3インスタンス
model : ResNet v1 110層
epoch : 10
batch_size : 128
data_augmentation : False
optimizer : SGD
learning rate : 0.001

MXNetは引数として用意されているものもあるので渡せるものは渡してそろえます

中身をいじらないとな部分はごにょごにょと変えます
ごにょごにょっと変えたら実行!

Keras

python3 cifar10_resnet.py

MXNet

python3 train_cifar10.py --network resnet-v1 --num_epochs 10 --batch-size 128 --gpus 0

結果

Epoch keras MXNet
1 74 s 28 s
2 51 s 27 s
3 51 s 27 s
4 51 s 27 s
5 51 s 27 s
6 51 s 28 s
7 51 s 28 s
8 51 s 27 s
9 51 s 27 s
10 51 s 27 s
total 533 s 274 s

1枚挿しのP3インスタンスでもMXNet速いですね!

カーネギーメロン大学
上の内容は私が個人的に実施をしましたが公開されている速さ比較をした結果などもあります

カーネギーメロン大学によると

MXNet tensorflow Torch7 Caffe
memory 1.6GB OOM 2.1GB 2.2GB
time 180 ms 940 ms 172 ms 170 ms

さすがCaffeもTorch 7も速いですね

しかしそれに負けないくらいMXNetも速いです
さらにメモリ効率も良いことが見てとれます

DELL
DELLがNV-Caffe, MXNet, Tensorflowの性能比較を行った結果もあります

http://ja.community.dell.com/techcenter/m/mediagallery/3765

この結果ではフレームワークの比較という点もおもしろいですが
MXNetがP100を16個使用した場合でもGoogleNet で 13.5 倍の⾼速化、Inception-BN で 14.7 倍の⾼速化を達成しました。
これは理想的な16 倍という値に近いものである点がMXNetの性能の高さを表しているともいえるでしょう。

まとめ

フレームワークはたくさんありますがその中のひとつであるMXNetの魅力をご紹介させていただきました。
今後MXNetの使い方やPythonだけでなくScala, Rなどの使い方も書いていきたいと思います。