• 検索結果がありません。

第 1 回ディープラーニング分散学習ハッカソン <ChainerMN 紹介 + スパコンでの実 法 > チューター福 圭祐 (PFN) 鈴 脩司 (PFN)

N/A
N/A
Protected

Academic year: 2021

シェア "第 1 回ディープラーニング分散学習ハッカソン <ChainerMN 紹介 + スパコンでの実 法 > チューター福 圭祐 (PFN) 鈴 脩司 (PFN)"

Copied!
33
0
0

読み込み中.... (全文を見る)

全文

(1)

第1回

ディープラーニング分散学習ハッカソン

<ChainerMN

紹介 + スパコンでの実⾏⽅法>

チューター 福⽥圭祐(PFN) 鈴⽊脩司(PFN)

(2)

2

(3)

Define-by-Run

Ca

Chainer:

A Flexible Deep Learning Framework

Define Model definition Computational  graph Gradient function Run Computational  graph Gradient function Training data Define‐by‐Run Model definition Computational  graph Gradient function Training data Define-and-Run 3

(4)

ChainerMN: Distributed Training with

Chainer

• Bundled with Chainer (from Chainer v5)

• Enables multi-node distributed deep learning using NVIDIA NCCL2

Features

Scalable: Near-linear scaling with hundreds of GPUs

Flexible: Even GANs, dynamic NNs, and RL are applicable

All-Reduce Forward Forward Forward Backward Backward Backward Optimize Optimize Optimize

Distributed Training with ChainerMN

(5)
(6)

0 10 20 30 40 50 60 70 T ime [min]

Training time of ResNet-50 (90 epochs) on ImageNet

11

Achievement on MN-1a: ImageNet in 15 minutes

2018 July

2018 Nov 2017 Nov

arXiv: 1711.04325

Extremely Large Minibatch SGD: Training ResNet-50 on ImageNet in 15 Minutes

(7)

12

(8)

13

• Google AI Open Images - Object Detection Track – Competition using Largest-class image dataset – 12 million bounding boxes, 1.7 million images – 454 competitiors

– Approx. 500GB (annotated subset)

• Object detection: much harder than object recognition task

(9)

• We won the 2

nd

position

(0.023% diff to the 1st)

14

(10)

Opensourcing PFDet:

Technical report is already on arXiv: arXiv:1809.00778

(11)
(12)

MN-1: An in-house supercomputer

MN-1a (Sep. ʻ17~)

━ 1024 NVIDIA Tesla P100 ━ InfiniBand FDR

━ Peak 9.3 Peta FLOPS (SP) ━ #227 in Top500 Nov. 2018

MN-1b (July. ʻ18~)

━ 512 NVIDIA Tesla V100 32GB ━ InfiniBand EDR

━ Peak 56 Peta (tensor) Flops

 Targeting Exa FL ops by 2020

(13)

CHAINER

プログラムを

秒速でMN化する⼿順

(14)

ChainerMN

の動作の概要

• ChainerMNは、MPIという通信ライブラリの上に構築されています – (MPI=並列計算で標準的に使われる通信ライブラリ) • 要点 – mpiexecというコマンドで起動する(後述) – 基本的に、サーバー/クライアントという概念はない (全プロセスが互いに対等) – 個々のプロセスはRankというプロセス番号を持つ(0〜N-1) – すべてのプロセスが同じプログラムを実⾏する(ただし、Rankに よって条件分岐することが可能) 19

(15)

device = … chainer.cuda.get_device_from_id(device).use() … optimizer = chainer.optimizers.Adam() import chainermn … comm = chainermn.create_communicator('pure_nccl') device = comm.intra_rank chainer.cuda.get_device_from_id(device).use() … optimizer = chainermn.create_multi_node_optimizer( chainer.optimizers.Adam(), comm) … if comm.rank == 0:  # LogReportなどを代表一人だけが出力するようにする trainer.extend( … ) 20 これだけの変更で(最⼩限の)MN化︕

(16)

まずは秒速MN化でReedbush上で動作確認をしましょう

その後やること︓

– scatter_dataset

(プロセス間で学習データに重複が無いように分割)

– evaluator

の並列化

(現在はrank 0だけのevaluationの結果が記録される)

– Multi node BN

(必要に応じて)

MN

化のその後

21

(17)

普段、どうやって学習を実⾏していますか︖

(フレームワークによらず)

1.

研究室/⾃社クラスタ

2.

クラウド(AWS etc.)

3.

スパコン

22

(18)

Reedbush

スパコンにおけるChainerの使い⽅

• スパコンは、普通の計算機と環境が(すこし)違います • 主な違い︓ – 計算機の種類が、計算ノードとログインノードに分かれている計算実⾏するために、ジョブスケジューラと呼ばれるソフト ウェアを使う必要がある – 計算ノードからは、インターネット環境にアクセスできない – 計算ノードからは、HOME も⾒えない 23

(19)

Reedbush

スパコンにおけるChainerの使い⽅

• スパコンは、普通の計算機と環境が(すこし)違います • 主な違い︓ – 計算機の種類が、計算ノードとログインノードに分かれている計算実⾏するために、ジョブスケジューラと呼ばれるソフト ウェアを使う必要がある – 計算ノードからは、インターネット環境にアクセスできない – 計算ノードからは、HOME も⾒えない 24

(20)

Reedbush

スパコンにおけるChainerの使い⽅

• なので… 以下のことを実⾏しておく必要があります – インターネットからダウンロードの必要があるものは、あらかじめロ グインノード上でダウンロードしておく – Lustreという共有ファイルシステムを事実上のHOMEとして使う – PythonモジュールもLustre上にインストールする – 環境変数に気をつける(non-interactive環境になるため) – ジョブスクリプトと呼ばれるものを書く必要がある 25

(21)

Reedbush

スパコンにおけるChainerの使い⽅

使い⽅説明︓

https://bit.ly/2MsNzuA

(22)

Reedbush

スパコンにおけるChainerの使い⽅

(23)

Reedbush

スパコンにおけるChainerの使い⽅

id –ng コマンドでグループ名

$USER 環境変数(あるいは id –nu コマンド)でユーザー名がわかる

(24)

Reedbush

スパコンにおけるChainerの使い⽅

好きなエディタで env.sh の内容を作成して、

/lustre/$(id –ng)/$USER/env.sh として保存しましょう (完全コピペでOK)

(25)

Reedbush

スパコンにおけるChainerの使い⽅

(26)

Reedbush

スパコンにおけるChainerの使い⽅

cupy ではなく、 cupy‐cuda91 を使いましょう

(27)

Reedbush

スパコンにおけるChainerの使い⽅

(28)

Reedbush

スパコンにおけるChainerの使い⽅

(29)
(30)

ジョブを投げるたびに調整するところ

必要がなければ触らない あなたのプログラム

(31)

Reedbush

スパコンにおけるChainerの使い⽅

#PBS –l select=2:mpiprocs=2:ompthreads=1

ノード数=2 ノードあたりのGPU数=2

2x2=4GPUで実⾏

• 「ノードあたりのGPU数」は増やせないので2で固定がおすすめ • 「ノード数」を変更することで、全体のGPU数を調整 • 開発・デバッグ中は「1x2」もしくは「2x2」くらいがおすすめ 36

(32)

Reedbush

スパコンにおけるChainerの使い⽅

mpiexec –x PYTHONUSERBASE ¥ python ./train_mnist.py –g ‐‐communicator pure_nccl おまじない 引数はスクリプトの書き⽅によるが、 コミュニケーターは pure_nccl がおすすめ (というか、プログラムに書いてしまっても良い) 37

(33)

参照

関連したドキュメント

ON Semiconductor makes no warranty, representation or guarantee regarding the suitability of its products for any particular purpose, nor does ON Semiconductor assume any

Figure 70 shows a typical heating profile for use when soldering a surface mount device to a printed circuit board. This profile will vary among soldering systems, but it is a

子どもの学習従事時間を Fig.1 に示した。BL 期には学習への注意喚起が 2 回あり,強 化子があっても学習従事時間が 30

In this operation, the master device sends a command byte and a byte count followed by the stated number of data bytes to the slave device as follows:.. The master device asserts

S ADDR Input Selects device address for the two−wire slave serial interface.. When connected to GND, the device ID

Dock eSATA Device(eSATA ドッキングデバイス) 、LOM MAC Address(LOM MAC アドレス) 、Video Controller(ビ デオコントローラ) 、Video BIOS Version(ビデオ

Pulling this pin to ground switches the device into Low Power mode and pushing this pin to output voltage switches the device into Active mode.. 2 OUT

第 1 四半期は、海外エキスパートが講師となり「 SOER2003-2 米国デービス ベッセ RPV 上蓋損傷」について学習会を実施、計 199 名が参加(福島第一: 5 月 19 日( 37 名)、福島第二: