狠狠撸
Submit Search
颁丑补颈苍别谤惭狈について
?
Download as PPTX, PDF
?
4 likes
?
5,230 views
Shuji Suzuki
Follow
Chainer Meetup #5のChainerMNの紹介スライド
Read less
Read more
1 of 21
Download now
More Related Content
颁丑补颈苍别谤惭狈について
1.
颁丑补颈苍别谤惭狈について 鈴木 脩司 Preferred Networks,
Inc. Chainer Meetup #05 2017/06/10
2.
今日のお話 ? 颁丑补颈苍别谤惭狈とは? ? 颁丑补颈苍别谤惭狈の仕组み ?
颁丑补颈苍别谤惭狈の使い方 2
3.
颁丑补颈苍别谤惭狈とは?
4.
颁丑补颈苍别谤惭狈とは? Chainerによる学習を、分散処理によって高速化するための追加パッケージ 特徴 – Scalable ? NVIDIA
NCCLやCUDA-Aware MPIなどの最新技術より高い並列性能を 実現 – Flexible ? Chainerの特徴の一つである、動的なネットワークも分散学習可能 – Easy ? 既存のChainerのコードに少し変更を加えれば利用可能 GitHubリポジトリ – https://github.com/chainer/chainermn 4
5.
颁丑补颈苍别谤惭狈の仕组み
6.
分散学習の手法 ? データ並列 – データを分割して、複数のワーカーが並列に学習 ?
モデル並列 – モデルを分割して、複数のワーカーが並列に学習 6 データ並列 モデル並列 ChainerMNはこちら
7.
学習イテレーション 7 通常のChainerによる学習 Forward Backward Optimize All-Reduce Forward Forward Forward Backward Backward Backward Optimize Optimize Optimize ChainerMNによる分散学習
8.
All-Reduce ? 各ワーカーが持つ値を集計し、集計した結果を全ワーカーに配る処理 ? ChainerMNでは各ワーカーが持つ勾配??から平均
?を計算して配る 8 All-Reduce ?0 = 1 ?1 = 2 ?2 = 3 ? = 2 ? = 2 ? = 2
9.
9 詳細: https://chainer.org/general/2017/02/08/Performance-of-Distributed-Deep- Learning-Using-ChainerMN.html
10.
颁丑补颈苍别谤惭狈の使い方
11.
ChainerMNに必要なライブラリ (GPUを利用する場合) 1. Chainer –
CuPyとcuDNN も含めてインストールする 2. MPI (OpenMPIなど) – CUDA-Awareのサポートを入れてコンパイルする 3. NVIDIA NCCL – CUDA 8.0より前のバージョンのCUDAを利用する場合は、makeのときに NVCC_GENCODEを指定する必要がある 4. MPI4py 5. Cython – 事前にpipなどでインストールする必要がある 11 CPUのみの場合は以下を参照 http://chainermn.readthedocs.io/en/latest/installation/guide.html
12.
ChainerMNのインストールとサンプル実行(GPUを利用する場合) ? インストール方法 – pip
install chainermn ? MNISTのサンプルの実行 – git clone git@github.com:chainer/chainermn.git – cd chainermn – mpiexec -n 4 python examples/mnist/train_mnist.py –g ? この例では1つのノードで4つのワーカーが起動して、4つのGPUを使って分散学 習が実行される 12
13.
あれ、動かない?と思ったら??? ? ドキュメントのStep-by-Step Troubleshootingを見る! –
http://chainermn.readthedocs.io/en/latest/installation/troubleshooti ng.html ? Step-by-Step TroubleshootingはChainerMNを使うときにハマりそう な部分を、1つ1つ問題がないか確認していく手順が書かれている – たとえば??? ? Check SSH connection 13 $ ssh host00 'hostname' host00 # without hitting the password $ ssh host01 'hostname' host01 # without hitting the password ...
14.
環境別のインストール方法の紹介記事 ? AWSのGPUインスタンスでChainerMNを動かす環境構築 – http://qiita.com/pst-ic/items/e01033dee4d389df3a5e ?
共用環境向けのChainerMNのインストール – http://qiita.com/htsst/items/a38d4e09d05c2ef80242 ? Chainermn をTSUBAME2.5にインストール – http://graphium.hatenadiary.jp/entry/2017/06/06/012502 14 みなさま、ありがとうございます!
15.
Chainerのコードを改良してChainerMNを使う手順 ? 説明にはMNISTのサンプルを利用 ? 完成コード –
https://github.com/chainer/chainermn/blob/master/examples/mnist /train_mnist.py ? 最低限必要な変更点 1. Communicatorの作成と使用するGPUの指定 2. マルチノード用のOptimizerの作成 ? 追加の変更 3. データの分配 4. マルチノード用のEvaluatorの作成15
16.
1. Communicatorの作成と使用するGPUの指定 ? Communicatorの作成 –
高い並列性能を実現するためには計算機環境に合わせてCommunicatorを 選択する必要がある。詳しくは以下を参照 ? https://chainermn.readthedocs.io/en/latest/reference/index.html#communicators ? プロセスが使用するGPUを指定 – ChainerのMNISTのサンプル: – ChainerMNのMNISTのサンプル: 16 # args.gpu: 使用するGPUのID chainer.cuda.get_device(args.gpu).use() # comm.intra_rank:マシン内におけるワーカーの番号 device = comm.intra_rank chainer.cuda.get_device(device).use() comm = chainermn.create_communicator()
17.
2. マルチノード用のOptimizerの作成 ? マルチノード用のOptimizerを以下のようにして作成 –
ChainerのMNISTのサンプル: – ChainerMNのMNISTのサンプル: 17 optimizer = chainer.optimizers.Adam() optimizer = chainermn.create_multi_node_optimizer( chainer.optimizers.Adam(), comm)
18.
3.データの分配 ? 2.までの状態では、1つのワーカーだけで改良前と同じサイズのデータを学習 – このため、Chainerのサンプルよりも1エポックの合計の大きさが、ワーカー数倍増加 ?
1エポックを改良前と同じ大きさにするために、1つのワーカーがデータの読み 込みを行い、全ワーカーに分割して配る – ChainerのMNISTのサンプル: – ChainerMNのMNISTのサンプル: 18 train, test = chainer.datasets.get_mnist() if comm.rank == 0: # rank 0 のワーカーが読み込み train, test = chainer.datasets.get_mnist() else: train, test = None, None # データを分割して配る train = chainermn.scatter_dataset(train, comm) test = chainermn.scatter_dataset(test, comm)
19.
4. マルチノード用のEvaluatorの作成 ? マルチノード用のEvaluatorを以下のように作成 –
ChainerのMNISTのサンプル: – ChainerMNのMNISTのサンプル: – 注意 ? PrintReportなどのExtensionは1つのワーカーだけ実行するようする 19 trainer.extend(extensions.Evaluator(test_iter, model, device=args.gpu)) evaluator = extensions.Evaluator(test_iter, model, device=device) evaluator = chainermn.create_multi_node_evaluator(evaluator, comm) trainer.extend(evaluator)
20.
実行! ? シングルノード実行 – mpiexec
-n 4 python train_mnist.py –g ? 1つのノードで4つのワーカーを立ち上げ、4個のGPUを使って分散学習を行う ? マルチノード実行 – mpiexec -n 8 -host host00,host01 python train_mnist.py –g ? host00,host01 という2つのノードで、4つずつワーカーが立ち上げ、 合計8個のGPUを使って分散学習を行う 20
21.
まとめ ? ChainerMNとは – Chainerによる学習を、分散処理によって高速化するための追加パッケージ –
特徴 ? Scalable、Flexible、Easy – GitHubリポジトリ ? https://github.com/chainer/chainermn ? 颁丑补颈苍别谤惭狈の使い方 – 最低限必要な変更点 ? Communicatorの作成と使用するGPUの指定 ? マルチノード用のOptimizerの作成 21
Download