Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

スケーラブルな Deep Leaning フレームワーク "Apache MXNet” を AWS で学ぶ

8,503 views

Published on

2017/09/27 に開催された,DeNA TECH STUDIO の講演資料です.
https://denatechstudio.connpass.com/event/65607/

Published in: Technology
  • Sex in your area is here: ❶❶❶ http://bit.ly/2ZDZFYj ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Follow the link, new dating source: ❤❤❤ http://bit.ly/2ZDZFYj ❤❤❤
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

スケーラブルな Deep Leaning フレームワーク "Apache MXNet” を AWS で学ぶ

  1. 1. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Makoto Shimura, Data Science Solution Architect Amazon Web Services Japan, K. K. 2017.09.27 スケーラブルな Deep Leaning フレームワーク "Apache MXNet” を AWS で学ぶ
  2. 2. 自己紹介 所属: アマゾンウェブサービスジャパン株式会社 業務: ソリューションアーキテクト (データサイエンス領域) 経歴: Hadoopログ解析基盤の開発 データ分析 データマネジメントや組織のデータ活用 志村 誠 (Makoto Shimura)
  3. 3. Agenda Apache MXNet オーバービュー • 特徴 • AWS プラットフォームとの連携 • アップデート & ロードマップ デモ • マルチ GPU による学習 • Keras + MXNet backend • AWS Batch による並列ハイパーパラメータ学習 • Sockeye による seq2seq の実演
  4. 4. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Apache MXNet の特徴
  5. 5. Apache MXNet とは カーネギーメロン大学で開発された Deep Learning のフ レームワーク 2016/11 に AWS が MXNet を自分たちに最適なフレー ムワークだと判断したことを公表 2017/01 に Apache Incubator に移管された http://aws.typepad.com/sajp/2016/11/mxnet-default-framework-deep-learning-aws.html https://aws.amazon.com/blogs/aws/excited-about-mxnet-joining-apache/ https://aws.amazon.com/mxnet/
  6. 6. MXNet の開発者コミュニティ https://www.svds.com/getting-started-deep-learning/
  7. 7. MXNet の特徴 シンプルな記述 複数の言語に対応 メモリ効率の良さ モバイル / IoT への可搬性 高いスケーラビリティ マルチ GPU / マルチノード 256 GPU で 88% 効率のスケール 1024 層 Resnet で 4GB のメモリ消費
  8. 8. MXNet のスケーラビリティ • Inception v3 を p2.16xlarge で実行 • データは EFS をマウントして読み込み • EFS は複数の EC2 インスタンスからマウント可能な分散ファイルシステム • マルチノードで 85% の分散実行の効率性 Item Spec GPU Count 16 Memory 732 GiB GPU Memory 192 GiB Network Performance 20 Gigabit http://aws.typepad.com/sajp/2016/11/mxnet-default-framework-deep-learning-aws.html https://aws.amazon.com/jp/efs/
  9. 9. Deep Learning における分散学習 • データ並列とモデル並列がある前者の方が開発のしやす さや耐障害性などが優れており,主流となっている
  10. 10. データ並列による分散学習 • MXNet はデフォルトではデータ並列により分散学習 • モデル並列もサポートはしており,LSTM 等で利用可能 https://mxnet.incubator.apache.org/how_to/multi_devices.html https://mxnet.incubator.apache.org/how_to/model_parallel_lstm.html http://engineering.skymind.io/distributed-deep-learning-part-1-an-introduction-to- distributed-training-of-neural-networks マシン オプション パラメタ更新 単一 local CPU で更新 device GPU で更新 複数 dist_sync CPU で更新 dist_device_sync GPU で更新 dist_async 非同期更新
  11. 11. 分散学習の記述 マルチ GPU import mxnet as mx module = mx.module.Module(context=[mx.gpu(0), mx.gpu(2)], ...) マルチノード $ cat hosts 172.30.0.172 172.30.0.171 $ python ../../tools/launch.py -n 2 --launcher ssh -H hosts python train_mnist.py $ python train_mnist.py
  12. 12. プログラミングモデル Imperative (命令的) Declarative (宣言的) a = mx.nd.ones((2,3)) b = mx.nd.ones((2,3)) c = a + b d = - c e = mx.nd.sin(c**2).T f = mx.nd.maximum(a, c) data = mx.symbol.Variable('data') net1 = mx.symbol.FullyConnected( data=data, name='fc1', num_hidden=10) net1.list_arguments() net2 = mx.symbol.Variable('data2') net2 = mx.symbol.FullyConnected( data=net2, name='fc2', num_hidden=10) composed = net2(data2=net1, name='composed')
  13. 13. Imperative + Declarative 両者を組み合わせることで柔軟な書き方が可能 モデル更新処理を for ループで書くような記述もできる texec = mx.module.Module(net) for batch in train_data: texec.forward(batch) texec.backword() for param, grad in zip(texec.get_params(), texec.get_grads()): param -= 0.2 * grad
  14. 14. 多くのサンプルコードと Notebook https://github.com/apache/incubator-mxnet/tree/master/example https://github.com/dmlc/mxnet-notebooks/tree/master/python
  15. 15. LSTM による AWS スポットインスタンスの価格予測 これまでの価格変動履歴をもとに, LSTM で時系列予測 を実施 https://github.com/dmlc/mxnet-notebooks/blob/master/python/tutorials/aws_spot_price_predict_lstm.ipynb
  16. 16. MXNet と他のフレームワークの比較 (1) https://www.slideshare.net/AmazonWebServices/intro-to-scalable-deep-learning-on-aws-with-apache-mxnet
  17. 17. Mxnet と他のフレームワークの比較 (2) https://www.svds.com/getting-started-deep-learning/
  18. 18. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. AWS プラットフォームとの連携
  19. 19. 4 レイヤーから構成される AWS の機械学習サービス Services Amazon Rekognition Amazon Polly Amazon Lex Platform Amazon Machine Learning Engines TensorFlow Caffe Torch Theano CNTK Keras CPU IoT MobileInfrastructure GPU Apache Spark & Amazon EMR Amazon Kinesis AWS Batch Amazon ECS MXNet AWS Deep Learning AMI
  20. 20. 4 レイヤーから構成される AWS の機械学習サービス Services Amazon Rekognition Amazon Polly Amazon Lex Platform Amazon Machine Learning Engines TensorFlow Caffe Torch Theano CNTK Keras CPU IoT MobileInfrastructure GPU Apache Spark & Amazon EMR Amazon Kinesis AWS Batch Amazon ECS MXNet AWS Deep Learning AMI
  21. 21. • 多量のバッチジョブ実行をクラスタの 管理を行う事なしに容易に実現できる • ジョブとして登録したアプリケーショ ンやコンテナイメージをスケジューラ が実行 • 利用するインスタンスタイプや数、ス ポット利用有無などCompute Environmentとして任意に指定可能 フルマネージド型のバッチ処理実行サービス AWS Batchで管理 処理を 依頼 スケジュール 実行 AWS Batch によるバッチ処理の管理
  22. 22. • 管理ノード不要の、安定かつ高パ フォーマンスなクラスタ管理サー ビス • Serviceスケジューラで多様なロ ングランニングプロセスを実行す る基盤に • コンテナを必要な台数稼働させる • ELB連携で、デプロイも簡単に • Run Taskでバッチジョブを実行 する基盤に • どこかのEC2でコンテナを起動して処 理させる 管理されたEC2クラスタ上に、コンテナを自在に配置できる Amazon ECR Amazon ECS Elastic Load Balancing Amazon EC2 Container Service (ECS)
  23. 23. ECS を活用した機械学習モデルの DevOps 1. Jupyter Notebook でモデルの開発 2. 作成済みモデルを S3 にアップロード 3. 新しいコードを CodeComit に コミット 4. CodePipeline 経由で ECR に新しい イメージを push 5. CloudFormation で新しいコンテナ をデプロイして,モデルを S3 から ダウンロード 6. ALB で順次リクエスト先を切り替え
  24. 24. 主要な Deep Learning フレームワークをサポートした AMI AWS Deep Learning AMI MXNet TensorFlow Caffe & Caffe2 Theano Cognitive Toolkit Torch Keras Nvidia CUDA & cuDNN Python 2 & Python 3 Intel MKL Anaconda Amazon EC2 (Amazon Linux / Ubuntu)
  25. 25. Deep Learningに最適なP2インスタンス 最新のGPUアクセラレータNVIDIA Tesla K80を最大16個搭載可能 大量のGPUを使うことで,ディープラーニングのモデル構築にかかる時間を 大幅に短縮可能 AMI(Amazon Machine Image)を使うことで,ディープラーニングの学習環 境を容易に構築可能 Instance Name GPU Count Memory GPU Memory Network Performance P2.xlarge 1 61GiB 12 GiB High P2.8xlarge 8 488GiB 96 GiB 10 Gigabit P2.16xlarge 16 732GiB 192 GiB 20 Gigabit
  26. 26. 次世代 GPU V100 搭載インスタンス GTC2017 にて Volta V100 発表 • キーノート中に,V100 をサポートする EC2 インスタンスに対しての パートナーシップをアナウンス https://aws.amazon.com/jp/blogs/news/aws-and-nvidia-expand-deep-learning-partnership-at-gtc-2017/
  27. 27. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. アップデート & ロードマップ
  28. 28. 2017/09/07 MXNet 0.11.0 リリース Keras v1.2.2 サポート Apache CoreML モデルコンバータ Gluon インターフェース (experimental) https://github.com/apache/incubator-mxnet/releases https://aws.amazon.com/blogs/ai/apple-core-ml-and-keras-support-now-available-for-apache-mxnet/#more-1556
  29. 29. Keras v1.2.2 サポート Keras v1.2.2 のバックエンドで MXNet を利用可能に • pip install keras-mxnet で fork 版の dmlc/keras をインストール • ~/.keras/keras.json で “backend”: “mxnet” に変更 Keras 上でマルチ GPU での分散学習が容易に https://devblogs.nvidia.com/parallelforall/scaling-keras-training-multiple-gpus/
  30. 30. Apple CoreML モデルコンバータ Apple CoreML は,WWDC 2017 で発表された,Apple のデバ イスに対して簡単に機械学習モデルを組み込めるフレームワー ク • Caffe v1 • Keras 1.2.2+ • sckit-learn 0.18 etc… V0.11.0 リリースにより, MXNet からも CoreML への 変換が可能に https://aws.amazon.com/jp/blogs/news/bring-machine-learning-to-ios-apps-using-apache-mxnet-and-apple-core-ml-2/
  31. 31. Gluon インターフェース (experimental) MXNet に対するハイレベルのインターフェース 非常に抽象的で簡単なネットワークの記述が可能に experimental のため仕様が大きく変わる可能性あり
  32. 32. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. デモ
  33. 33. Deep Learning AMI による環境構築 AWS Deep Learning AMI MXNet TensorFlow Caffe & Caffe2 Theano Cognitive Toolkit Torch Keras Nvidia CUDA & cuDNN Python 2 & Python 3 Intel MKL Anaconda Amazon EC2 (Amazon Linux / Ubuntu) • EC2 のインスタンス起動時の メニューから AMI を選択可能 • 立ち上がった時点で,主要な フレームワークはすべてイン ストール済み • 2017/9/18 に MXNet 0.11.0 および Tensorflow 1.3.0 対 応の新バージョンがリリース https://aws.amazon.com/about-aws/whats-new/2017/09/aws-deep-learning-ami-now-includes- apache-mxnet-0-11-and-tensorflow-1-3-0/
  34. 34. MXNet のマルチ GPU による分散学習 import mxnet as mx … if num_gpus != 0: devs = [mx.gpu(i) for i in range(num_gpus)] else: devs = mx.cpu(0) mod = mx.mod.Module(symbol=new_sym, context=devs) • 基本的には,Context で CPU / GPU を指定するだけ • あとはマルチノードに自動的に分散して学習を実施 • 基本的にはデータ分割の方式をとる
  35. 35. Keras のマルチ GPU による分散学習 • 基本的には MXNet のときと同じ記述 • Context で CPU / GPU を指定するだ け • パフォーマンスの差は 8GPU で 30% 程度 • GPU の自動検出にはまだ対応していな いので,自分でGPU 数を記述する必要 はある • Tensorflow と比較することで,分散 時のパフォーマンスを確認可能 https://devblogs.nvidia.com/parallelforall/scaling-keras-training-multiple-gpus/
  36. 36. MXNet のマルチノードによる分散学習 Cloud Formation のテンプ レートを提供 EFS をマウントすることで, 学習用データを各ワーカーで 高速に読み出す マルチノードでの学習をキッ クするためのスクリプトが付 属 https://github.com/awslabs/deeplearning-cfn
  37. 37. AWS Batch によるハイパーパラメータ探索 ECS エージェント,cuDNN 等設定済みの AMI を作成 Docker Hub の mxnet/python:gpu コンテナを使用 キューに積んだジョブをコンテナ上で実行 https://aws.amazon.com/jp/blogs/news/deep-learning-on-aws-batch/ AWS Batchで管理 処理を 依頼 スケジュール 実行 学習率 0.01 学習率 0.02 学習率 0.03
  38. 38. Sockeye による seq2seq Seq2seq の NMT 用パッケージ AWS の github で公開 多くの手法をサポート https://aws.amazon.com/blogs/ai/train-neural-machine-translation-models-with-sockeye/ http://sockeye.readthedocs.io/en/latest/
  39. 39. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. まとめ
  40. 40. まとめ MXNet は以下の特徴を備えた Deep Learning フレーム ワーク • 記述のしやすさと多言語の対応 • マルチ GPU / マルチノードへの高いスケーラビリティ • 非常に軽いメモリのフットプリント AWS のさまざまなサービスと組み合わせることで,効率的 に学習を実施したり,推論アプリケーションを運用したりす ることが可能

×