TFUG_yuma_matsuoka__distributed_GPU

43
深層学習フレームワークと 分散GPU処理の比較 法政大学 松岡 佑磨

Transcript of TFUG_yuma_matsuoka__distributed_GPU

Page 1: TFUG_yuma_matsuoka__distributed_GPU

深層学習フレームワークと分散GPU処理の比較

法政大学 松岡 佑磨

Page 2: TFUG_yuma_matsuoka__distributed_GPU

自己紹介

松岡 佑磨

法政大学 理工学研究科 M1

• 彌冨研究室[1]

• 画像処理

• 深層学習

全脳アーキテクチャ若手の会[2] 副代表

1年ぶり[3]のLTで緊張しています![1] http://iyatomi-lab.info/front.html[2] http://wbawakate.jp/[3] https://www.slideshare.net/YumaMatsuoka/auto-encoder

Page 3: TFUG_yuma_matsuoka__distributed_GPU

普段はChainerを使っています

http://chainer.org/

Page 4: TFUG_yuma_matsuoka__distributed_GPU

なので...Chainerで分散GPU処理をやってみた!

Page 5: TFUG_yuma_matsuoka__distributed_GPU
Page 6: TFUG_yuma_matsuoka__distributed_GPU

ここ...TensorFlow User Groupだろ

Page 7: TFUG_yuma_matsuoka__distributed_GPU

なので...Chainerで分散GPU処理をやってみた!

Page 8: TFUG_yuma_matsuoka__distributed_GPU

目的に合う深層学習フレームワークは?

Posted by Silicon Valley Data Science LLC

https://www.svds.com/getting-started-deep-learning/

Page 9: TFUG_yuma_matsuoka__distributed_GPU

ホットなフレームワークはTensorflow???

https://twitter.com/fchollet

Page 10: TFUG_yuma_matsuoka__distributed_GPU

人はなぜTensorFlowを使うのか

Page 11: TFUG_yuma_matsuoka__distributed_GPU

分散GPU処理における複数の深層学習フレームワークの比較

Page 12: TFUG_yuma_matsuoka__distributed_GPU

今日話す内容

①使用した深層学習フレームワークと実装について

• Chainer(PFN)

• TensorFlow(Google)

• MXNet(Amazon)

• CNTK(Microsoft)

• Paddle(Baidu)

②フレームワーク間の結果の比較

Page 13: TFUG_yuma_matsuoka__distributed_GPU

今日話す内容

①使用した深層学習フレームワークと実装について

• Chainer(PFN)

• TensorFlow(Google)

• MXNet(Amazon)

• CNTK(Microsoft)

• Paddle(Baidu)

②フレームワーク間の結果の比較

Page 14: TFUG_yuma_matsuoka__distributed_GPU

Tensorflowとのかかわり...

2015年12月23日、例のチュートリアル[4]を写経

2016年2月8日、女の子のかわいさの定量化

2016年2月10日、TensorFlow勉強会(2)[5]に参加

2017年3月 TFの分散GPU処理を書こうとして洗礼を受ける

2017年4月、(NEW!)TFUG#4に登壇

[4] https://www.tensorflow.org/get_started/mnist/beginners

[5] https://connpass.com/event/24265/

Page 15: TFUG_yuma_matsuoka__distributed_GPU

チュートリアルとクリスマスデート♡

Page 16: TFUG_yuma_matsuoka__distributed_GPU

女の子のかわいさの定量化に挑戦!

• 青い本[6]でConvolutional Neural Network(CNN)を勉強

• Google画像検索で拾った

女性の顔画像3000枚に

1~100点を主観で

ラベル付け

• 層構造を変えて

学習誤差の比較

• TensorFlowムズイ...!

[6]岡谷, 講談社, ISBN:4061529021深層学習(機械学習プロフェッショナルシリーズ), 2015.

Page 17: TFUG_yuma_matsuoka__distributed_GPU

1年前にはここに立つとは思っていなかった

Page 18: TFUG_yuma_matsuoka__distributed_GPU

上司ご乱心(TensorFlowを使えだと...)

2017年3月某日某所

Tensorflowを使って分散GPU処理コード作成を試みる

⇒実装力がなさすぎて洗礼を受ける

1年以上の付き合いだが

Tensorflowだけは好きになれない!書けない!

⇒BackendがTensorflowのKerasを使用

Page 19: TFUG_yuma_matsuoka__distributed_GPU

今日話す内容

①使用した深層学習フレームワークと実装について

• Chainer(PFN, http://docs.chainer.org/en/latest/)

• TensorFlow(Google, https://www.tensorflow.org/)

⇒Keras, TF Backend(François Cholletsさん, https://keras.io/ja/)

• MXNet(Amazon, http://mxnet.io/)

• CNTK(Microsoft, https://github.com/Microsoft/CNTK/wiki)

• Paddle(Baidu, https://github.com/PaddlePaddle/Paddle/wiki)

②フレームワーク間の結果の比較

Page 20: TFUG_yuma_matsuoka__distributed_GPU

GPUによる並列処理について

GPUごとに分割したbatchの誤差を計算マージした誤差を1つのGPUでBackprop

Page 21: TFUG_yuma_matsuoka__distributed_GPU

実験環境

• Computer• さくらインターネット高火力

NVIDIA TitanX(PASCAL)×4

• TitanX(900series)×2

• OS: Ubuntu14.04

• Python: anaconda3-2.5.0

• CUDA environment• CUDA 8.0

• cudnn 5.0

[高火力]https://www.sakura.ad.jp/koukaryoku/[高火力の使い方]http://knowledge.sakura.ad.jp/knowledge/8363/

1時間300円程度で格安!!!インスタンスを作成している時間で課金される

Page 22: TFUG_yuma_matsuoka__distributed_GPU

実験環境

• Computer• さくらインターネット高火力

NVIDIA TitanX(PASCAL)×4

• TitanX(900series)×2

• OS: Ubuntu14.04

• Python: anaconda3-2.5.0

• CUDA environment• CUDA 8.0

• cudnn 5.0

[高火力]https://www.sakura.ad.jp/koukaryoku/[高火力の使い方]http://knowledge.sakura.ad.jp/knowledge/8363/

課金を止めるごとにCUDA環境を作るのがめんどくさい⇒今回は使用せず

Page 23: TFUG_yuma_matsuoka__distributed_GPU

実験環境

• Computer• さくらインターネット高火力

NVIDIA TitanX(PASCAL)×4

• TitanX(900series)×2

• OS: Ubuntu14.04

• Python: anaconda3-2.5.0

• CUDA environment• CUDA 8.0

• cudnn 5.0

[セットアップの作業ログ]

https://gist.github.com/yumatsuoka/d8a31742c572f0c20229dc7847a8c08b

このTitanXの環境を使いたかった...!

Page 24: TFUG_yuma_matsuoka__distributed_GPU

実験環境

使用時のフレームワークのバージョン

• Chainer: 1.23.0

• TensorFlow: tensorflow-gpu==1.0.1

• Keras: 2.0.3

• MXNet: mxnet-cu80==0.9.5

• CNTK: 2.0.beta15.0

• Paddle: 0.9.0

Page 25: TFUG_yuma_matsuoka__distributed_GPU

実験環境

使用したデータセット:CIFAR10

使用したCNNのモデル:All Convolutional Net[7]

• CNNのプーリング層、全結合層を畳込み層で代用

• VGG netほど大きくない

• batchsize=100, epoch=100, Optimizer=Adam

[7]https://arxiv.org/abs/1412.6806

Page 26: TFUG_yuma_matsuoka__distributed_GPU

今日話す内容

①使用した深層学習フレームワークと実装について

• Chainer(PFN)

• Keras-TF Backend(François Cholletsさん)

• MXNet(Amazon)

• CNTK(Microsoft)

• Paddle(Baidu)

②フレームワーク間の結果の比較

Page 27: TFUG_yuma_matsuoka__distributed_GPU

Chainer

モダンに作られており”ヒト”が

記述すべき内容が少なくて済む

NNの派生のadversarial training,

triplet networkなども実装可能

コードや情報がネットにまとまっている

http://docs.chainer.org/en/latest/

Page 28: TFUG_yuma_matsuoka__distributed_GPU

Chainer

インストール

• pip install chainer

分散GPU処理に必要なこと

• StanderedUpdaterをParallelUpdaterに変更

• Chainer=2.0では大きく変わる?

Page 29: TFUG_yuma_matsuoka__distributed_GPU

今日話す内容

①使用した深層学習フレームワークと実装について

• Chainer(PFN)

• Keras-TF Backend(François Cholletsさん)

• MXNet(Amazon)

• CNTK(Microsoft)

• Paddle(Baidu)

②フレームワーク間の結果の比較

Page 30: TFUG_yuma_matsuoka__distributed_GPU

Keras

とても書き易い

TensorFlowのWrapperとして使用可能

ExampleとReferenceが充実

TeosorFlowの並列処理の恩恵を

受けモダンに実装できる?

https://keras.io/ja/

Page 31: TFUG_yuma_matsuoka__distributed_GPU

Keras

インストール

• pip install keras

分散GPU処理に必要なこと

• 30行ほど分散用のコードを書く必要あり

Page 32: TFUG_yuma_matsuoka__distributed_GPU

今日話す内容

①使用した深層学習フレームワークと実装について

• Chainer(PFN)

• Keras-TF Backend(François Cholletsさん)

• MXNet(Amazon)

• CNTK(Microsoft)

• Paddle(Baidu)

②フレームワーク間の結果の比較

Page 33: TFUG_yuma_matsuoka__distributed_GPU

MXNet

CNN、LSTM、DQNなど柔軟に書きやすい(らしい)

モダンで書きやすい

GPUの並列化がとても簡単

複数ノード(マシン)を通したGPU処理も簡単に記述可能

Pythonだけでなく、R、Scala、Julia、C++で使用可能

documment、exampleがしっかりしている

http://mxnet.io

Page 34: TFUG_yuma_matsuoka__distributed_GPU

MXNet

インストール

• pip install mxnet-cu80; (Pre-built Binaries) [8]

• ソースコードからのインストール[9]をオススメ

• 4月18日時点でcudnn6.0には対応していない?

コードの実装について

• MNIST使ったTutorials[10]をオススメ

• 公式repositoryにexampleがたくさん[8] http://mxnet.io/get_started/index.html[9] http://mxnet.io/get_started/ubuntu_setup.html[10] http://mxnet.io/tutorials/python/mnist.html

Page 35: TFUG_yuma_matsuoka__distributed_GPU

今日話す内容

①使用した深層学習フレームワークと実装について

• Chainer(PFN)

• Keras-TF Backend(François Cholletsさん)

• MXNet(Amazon)

• CNTK(Microsoft)

• Paddle(Baidu)

②フレームワーク間の結果の比較

Page 36: TFUG_yuma_matsuoka__distributed_GPU

CNTK

分散GPU処理でTensorFlowよりも高いスケーラビリティ

をもつらしい[11]

コードを書く量が多い

インストール[12]

• pip install https://cntk.ai/PythonWheel/GPU/cntk-2.0.beta15.0-cp35-cp35m-linux_x86_64.whl

• Python3.6には未対応

[11] http://qiita.com/usuyama/items/bb7600ab7cfc1f5b8be3[12] https://github.com/Microsoft/CNTK/wiki/Setup-CNTK-on-your-machine

Page 37: TFUG_yuma_matsuoka__distributed_GPU

今日話す内容

①使用した深層学習フレームワークと実装について

• Chainer(PFN)

• Keras-TF Backend(François Cholletsさん)

• MXNet(Amazon)

• CNTK(Microsoft)

• Paddle(Baidu)

②フレームワーク間の結果の比較

Page 38: TFUG_yuma_matsuoka__distributed_GPU

Paddle(PaddlePaddle)

インストール[13]

• apt-get install gdebi

• wget https://github.com/PaddlePaddle/Paddle/releases/dowonload/v0.9.0/paddle-

0.9.0-gpu-ubuntu14.04.deb

• gdebi paddle-0.9.0-gpu0ubuntu14.04.deb

Python2, Ubuntu14.04でしか動かない?

コードはモダンで書き易い[14]

[13]http://www.paddlepaddle.org/doc/build/build_from_source.html[14]http://book.paddlepaddle.org/03.image_classification/index.en.html

Page 39: TFUG_yuma_matsuoka__distributed_GPU

今日話す内容

①使用した深層学習フレームワークと実装について

• Chainer(PFN)

• Keras-TF Backend(François Cholletsさん)

• MXNet(Amazon)

• CNTK(Microsoft)

• Paddle(Baidu)

②フレームワーク間の結果の比較

Page 40: TFUG_yuma_matsuoka__distributed_GPU

10,000updateした時の学習時間

GPU1枚に対する2枚並列の経過時間の割合chainer: 2.2倍、MXNet: 0.77倍、Keras: 0.77倍

Kerasの結果のみTitanX(Pascal)を使用

Page 41: TFUG_yuma_matsuoka__distributed_GPU

異なるGPU環境でChainerを検証

※GTX980×2の環境GPUを2枚に並列にした時の経過時間の割合 chainer: 0.67倍

Page 42: TFUG_yuma_matsuoka__distributed_GPU

おれ選、深層学習フレームワークの比較表

Good... +++, Not Bad... ++, bad... +

TutorialとExample

書きやすさ 分散GPUコードの書き易さ

ネット上の情報量

Chainer ++ +++ +++ ++

TensorFlow ++ + + +++

Keras +++ +++ ++ ++

MXNet +++ +++ +++ +

CNTK ++ + + +

Paddle + ++ + +

Page 43: TFUG_yuma_matsuoka__distributed_GPU

まとめ

分散GPU処理のスケーラビリティ

⇒MXNet

コードの書きやすさ

⇒Chainer、Keras、MXNet

ピュアなTensorflowを検証し、好きになりたい

⇒懇親会で専門のみなさんからご教授いただきたいです