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のサンプルコードは豊富にあります!
少しドキュメントが足りないなと思う部分やちょっと書いてあること違うなと思うこともでてくるかもしれません。
しかしサンプルコードが豊富なのでちょっとコードを読むと解決することができます!
画像の分類をしてみたい!
と思った場合でもサンプルコードを参照することで簡単に動かせるでしょう!
基本は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などの使い方も書いていきたいと思います。