SlideShare uma empresa Scribd logo
1 de 19
Baixar para ler offline
秒速☆ChainerMN
CHAINER UG /
PREFERRED NETWORKS, INC.
福⽥圭祐
秒速☆ChainerMN ⽬次
1. 分散する前に動作確認しましょう
2. 分散深層学習の概要を把握しよう
3. MPIを必要最低限理解しよう
4. MPIが正しく動いているかどうかチェックしよう
5. ⾃分のプログラムの修正が必要な箇所を特定しよう
6. 最低限の変更 + 動作確認
7. 発展
2
分散化する前に動作確認しましょう
• 必要な module、Pythonパッケージが⼊っているかどう
かチェック
• 「利⽤の⼿引き」を参照して、1 GPUジョブを投げてみ
て動作確認しましょう
(数⼗ iteration〜1 Epoch程度でOK)
• かならず「バッチジョブ」でもテストしましょう
3
4
ABCI
$ module load cuda/9.2
$ module load cudnn/7.1
$ module load openmpi/2.1.5
$ module load nccl/2.3
$ module load python/3.6
$ module load singularity # optional
$ pip install --user cupy-cuda92==5.2.0 
chainer==5.2.0 
mpi4py
5
分散学習とは何かを理解しよう:NVIDIA様の資料を10回読む
MPIを必要最低限理解しよう
• ChainerMNは、MPIという通信ライブラリの上に構築されています
(MPI=並列計算で標準的に使われる通信ライブラリ)
• 要点
– mpiexecというコマンドで起動する
→ SSHを使って、⾃動的にプロセスを起動/管理してくれる
– 基本的に、サーバー/クライアントという概念はない
(全プロセスが互いに対等)
– 個々のプロセスはRankというプロセス番号を持つ(0〜N-1)
– すべてのプロセスが同じプログラムを実⾏する
(ただし、Rankによって条件分岐することが可能)6
MPIを必要最低限理解しよう ‘cont
• 注意点:インストールが⾯倒
• OK:
– ○ChainerMNドキュメントを読んで⼊れた
– ○詳しい⼈が(ChainerMNドキュメントを読んで)⼊れてくれた
– ○スパコンに元から⼊っているものを使う
• NG:
– ×OSのパッケージマネージャで⼊れた
– ×なんかよくわからないけど、⾯倒だからドキュメント読まずに
とりあえず⼊れた 7
MPIが正しく動いているかどうかチェックしよう
$ mpiexec -n 4 
--host gpcl-gpu131:slots=2,gpcl-gpu132:slots=2 
--map-by ppr:2:node 
python mpi_check.py
8
import chainermn
from mpi4py import MPI
comm = chainermn.create_communicator('pure_nccl')
for i in range(comm.size):
if i == comm.rank:
print("{} {}".format(comm.rank, comm.intra_rank))
MPI.COMM_WORLD.Barrier()
MPIが正しく動いているかどうかチェックしよう
9
import chainermn
from mpi4py import MPI
comm = chainermn.create_communicator('pure_nccl')
for i in range(comm.size):
if i == comm.rank:
print("{} {}".format(comm.rank, comm.intra_rank))
MPI.COMM_WORLD.Barrier()
MPIが正しく動いているかどうかチェックしよう
10
$ vi job.sh
#!/bin/sh
#$-cwd
#$-j y
source /etc/profile.d/modules.sh
module load cuda/9.2
module load cudnn/7.1
module load openmpi/2.1.5
module load nccl/2.3module load python/3.6
module load singularity
mpiexec -n 8 --map-by ppr:4:node python mpi_check.py
$ qsub -l rt_F=2 -g gaa00000 -l h_rt=01:00:00 job.sh
MPIが正しく動いているかどうかチェックしよう
0 0
1 1
2 2
3 3
4 0
5 1
6 2
7 3
11
期待される出⼒(8プロセスの例):
intra_rank: 物理計算ノード内でのRank
rank: 全体でのRank
ChainerMNの動作の概要
• 同期型、データ並列が基本
• 最低限のMN化のために必要なこと:
1. ChainerMNが使うオブジェクトを作成する
2. 勾配を交換(平均)するためのOptimizerを作成
3. ログ出⼒などの細かいところをマルチプロセス仕様にする
12
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( … )
13
これだけの変更で(最⼩限の)MN化!
1. ChaierMNが使うオブジェクトを作成する
2. 勾配を交換するためのOptimizerを作成
3.ログ出⼒などの細かいところをマルチプロセス仕様にする
• まずは秒速MN化したうえで、動作確認をしましょう
• その後やること:
– scatter_dataset
(プロセス間で学習データに重複が無いように分割)
– evaluatorの並列化
(現在はrank 0だけのevaluationの結果が記録される)
– バッチサイズ増加に伴うパラメーターチュニング
• 発展編
– Multi node BN (inter-GPU BN)
– モデル並列
秒速MN化のその後
14
scatter_dataset
データ全体をプロセスごとに分解する
15
scatter_dataset使⽤前
scatter_dataset
データ全体をプロセスごとに分解する
16
scatter_dataset使⽤後
精度への影響:
• (未知数)
• データの重複がなくなる分 ↑ ?
• プロセスごとの
データ多様性が減る分 ↓ ?
速度への影響:
• 向上する
(メモリキャッシュに乗りやすくなる)
evaluatorの並列化
• ChainerMNは、Evaluatorの並列化もサポートしています
• …が
– サポートしているのは、Evaluationの並列化+スコアを
平均するという機能の MultinodeEvaluator
– 平均では不⼗分な場合は困難→無理して並列化する必
要なし
17
さらに発展
Even more advanced topics…
• Hyperparameter tuning
– Learning Rate
– Using Optuna
• Multinode Batch Normalization
• Model parallelism
• Double Buffering (ABCIでは不要)
• チューターにお尋ねください
18
19

Mais conteúdo relacionado

Mais procurados

仮想マシンを使った開発環境の簡単共有方法
仮想マシンを使った開発環境の簡単共有方法 仮想マシンを使った開発環境の簡単共有方法
仮想マシンを使った開発環境の簡単共有方法 Hideo Takahashi
 
すごい cron ? - Jenkins 試した
すごい cron ? - Jenkins 試したすごい cron ? - Jenkins 試した
すごい cron ? - Jenkins 試したTomohiko Himura
 
20130723 ecシステムにchefを導入してみた v1.0
20130723 ecシステムにchefを導入してみた v1.020130723 ecシステムにchefを導入してみた v1.0
20130723 ecシステムにchefを導入してみた v1.0NIFTY Cloud
 
Nseg20120929
Nseg20120929Nseg20120929
Nseg20120929hiro345
 
DevOpsを実現するChef活用テクニック
DevOpsを実現するChef活用テクニックDevOpsを実現するChef活用テクニック
DevOpsを実現するChef活用テクニックYusuke Ando
 
あなたの安心を高速に守る Container-based CI
あなたの安心を高速に守る Container-based CIあなたの安心を高速に守る Container-based CI
あなたの安心を高速に守る Container-based CIWataru MIYAGUNI
 
2人でOpenStackを開発環境に導入した話
2人でOpenStackを開発環境に導入した話2人でOpenStackを開発環境に導入した話
2人でOpenStackを開発環境に導入した話Shohei Koyama
 
Logback stackdriver-loggingを作った
Logback stackdriver-loggingを作ったLogback stackdriver-loggingを作った
Logback stackdriver-loggingを作ったkuro kuro
 
誰でも出来るローカル開発環境の作り方
誰でも出来るローカル開発環境の作り方誰でも出来るローカル開発環境の作り方
誰でも出来るローカル開発環境の作り方666oh666
 
自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~
自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~
自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~aha_oretama
 
今日から始めるLaravel
今日から始めるLaravel今日から始めるLaravel
今日から始めるLaravelMasaru Matsuo
 
クラウド上でのChef活用と ベストプラクティス v0.2.0
クラウド上でのChef活用と ベストプラクティス v0.2.0クラウド上でのChef活用と ベストプラクティス v0.2.0
クラウド上でのChef活用と ベストプラクティス v0.2.0NIFTY Cloud
 
Isomorphic web development with scala and scala.js
Isomorphic web development  with scala and scala.jsIsomorphic web development  with scala and scala.js
Isomorphic web development with scala and scala.jsTanUkkii
 
【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.jsYuto Suzuki
 

Mais procurados (20)

Clrh 110827 wfho
Clrh 110827 wfhoClrh 110827 wfho
Clrh 110827 wfho
 
仮想マシンを使った開発環境の簡単共有方法
仮想マシンを使った開発環境の簡単共有方法 仮想マシンを使った開発環境の簡単共有方法
仮想マシンを使った開発環境の簡単共有方法
 
進撃のSbt
進撃のSbt進撃のSbt
進撃のSbt
 
第六回Jenkins勉強会
第六回Jenkins勉強会第六回Jenkins勉強会
第六回Jenkins勉強会
 
すごい cron ? - Jenkins 試した
すごい cron ? - Jenkins 試したすごい cron ? - Jenkins 試した
すごい cron ? - Jenkins 試した
 
20130723 ecシステムにchefを導入してみた v1.0
20130723 ecシステムにchefを導入してみた v1.020130723 ecシステムにchefを導入してみた v1.0
20130723 ecシステムにchefを導入してみた v1.0
 
Nseg20120929
Nseg20120929Nseg20120929
Nseg20120929
 
DevOpsを実現するChef活用テクニック
DevOpsを実現するChef活用テクニックDevOpsを実現するChef活用テクニック
DevOpsを実現するChef活用テクニック
 
20121205 jjbug
20121205 jjbug20121205 jjbug
20121205 jjbug
 
あなたの安心を高速に守る Container-based CI
あなたの安心を高速に守る Container-based CIあなたの安心を高速に守る Container-based CI
あなたの安心を高速に守る Container-based CI
 
SubversionServer設置
SubversionServer設置SubversionServer設置
SubversionServer設置
 
Jenkins tips 20161014
Jenkins tips 20161014Jenkins tips 20161014
Jenkins tips 20161014
 
2人でOpenStackを開発環境に導入した話
2人でOpenStackを開発環境に導入した話2人でOpenStackを開発環境に導入した話
2人でOpenStackを開発環境に導入した話
 
Logback stackdriver-loggingを作った
Logback stackdriver-loggingを作ったLogback stackdriver-loggingを作った
Logback stackdriver-loggingを作った
 
誰でも出来るローカル開発環境の作り方
誰でも出来るローカル開発環境の作り方誰でも出来るローカル開発環境の作り方
誰でも出来るローカル開発環境の作り方
 
自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~
自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~
自動化を支えるCI/CDツールの私の選択 ~何をするためにCI/CDツールを選ぶか~
 
今日から始めるLaravel
今日から始めるLaravel今日から始めるLaravel
今日から始めるLaravel
 
クラウド上でのChef活用と ベストプラクティス v0.2.0
クラウド上でのChef活用と ベストプラクティス v0.2.0クラウド上でのChef活用と ベストプラクティス v0.2.0
クラウド上でのChef活用と ベストプラクティス v0.2.0
 
Isomorphic web development with scala and scala.js
Isomorphic web development  with scala and scala.jsIsomorphic web development  with scala and scala.js
Isomorphic web development with scala and scala.js
 
【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js
 

Semelhante a 秒速ChainerMN

研究生のためのC++ no.7
研究生のためのC++ no.7研究生のためのC++ no.7
研究生のためのC++ no.7Tomohiro Namba
 
企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624Yusuke Suzuki
 
What's new in open shift container platform 4.7 japan_20210318
What's new in open shift container platform 4.7 japan_20210318What's new in open shift container platform 4.7 japan_20210318
What's new in open shift container platform 4.7 japan_20210318Yuhki Hanada
 
BotとWikiを使った試験的な並列プログラミング
BotとWikiを使った試験的な並列プログラミングBotとWikiを使った試験的な並列プログラミング
BotとWikiを使った試験的な並列プログラミングTakashi Yamanoue
 
継続的デリバリー読書会資料 #1
継続的デリバリー読書会資料 #1継続的デリバリー読書会資料 #1
継続的デリバリー読書会資料 #1Yusuke HIDESHIMA
 
継続的デリバリー読書会 第 5 章 デプロイメントパイプラインの解剖学
継続的デリバリー読書会 第 5 章 デプロイメントパイプラインの解剖学継続的デリバリー読書会 第 5 章 デプロイメントパイプラインの解剖学
継続的デリバリー読書会 第 5 章 デプロイメントパイプラインの解剖学Takuma SHIRAISHI
 
Bringing Continuous Agile to Japan
Bringing Continuous Agile to JapanBringing Continuous Agile to Japan
Bringing Continuous Agile to JapanAndy Singleton
 
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -Yukihiko SAWANOBORI
 
Git & GitHub & kintone でウルトラハッピー!
Git & GitHub & kintone でウルトラハッピー!Git & GitHub & kintone でウルトラハッピー!
Git & GitHub & kintone でウルトラハッピー!ymmt
 
テスト勉強会よしおか100311 1
テスト勉強会よしおか100311 1テスト勉強会よしおか100311 1
テスト勉強会よしおか100311 1Hiro Yoshioka
 
Unit testで定時帰宅!
Unit testで定時帰宅!Unit testで定時帰宅!
Unit testで定時帰宅!Funato Takashi
 
試験にでるSpring
試験にでるSpring試験にでるSpring
試験にでるSpring土岐 孝平
 
ビジネス的に高価値なアジャイルテスト
ビジネス的に高価値なアジャイルテストビジネス的に高価値なアジャイルテスト
ビジネス的に高価値なアジャイルテストTsutomu Chikuba
 
Slurmのジョブスケジューリングと実装
Slurmのジョブスケジューリングと実装Slurmのジョブスケジューリングと実装
Slurmのジョブスケジューリングと実装Ryuichi Sakamoto
 
Rookの基礎・バージョンアップ
Rookの基礎・バージョンアップRookの基礎・バージョンアップ
Rookの基礎・バージョンアップTakashi Sogabe
 
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例UnityTechnologiesJapan002
 

Semelhante a 秒速ChainerMN (20)

研究生のためのC++ no.7
研究生のためのC++ no.7研究生のためのC++ no.7
研究生のためのC++ no.7
 
企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624
 
What's new in open shift container platform 4.7 japan_20210318
What's new in open shift container platform 4.7 japan_20210318What's new in open shift container platform 4.7 japan_20210318
What's new in open shift container platform 4.7 japan_20210318
 
BotとWikiを使った試験的な並列プログラミング
BotとWikiを使った試験的な並列プログラミングBotとWikiを使った試験的な並列プログラミング
BotとWikiを使った試験的な並列プログラミング
 
継続的デリバリー読書会資料 #1
継続的デリバリー読書会資料 #1継続的デリバリー読書会資料 #1
継続的デリバリー読書会資料 #1
 
継続的デリバリー読書会 第 5 章 デプロイメントパイプラインの解剖学
継続的デリバリー読書会 第 5 章 デプロイメントパイプラインの解剖学継続的デリバリー読書会 第 5 章 デプロイメントパイプラインの解剖学
継続的デリバリー読書会 第 5 章 デプロイメントパイプラインの解剖学
 
Bringing Continuous Agile to Japan
Bringing Continuous Agile to JapanBringing Continuous Agile to Japan
Bringing Continuous Agile to Japan
 
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
 
Git & GitHub & kintone でウルトラハッピー!
Git & GitHub & kintone でウルトラハッピー!Git & GitHub & kintone でウルトラハッピー!
Git & GitHub & kintone でウルトラハッピー!
 
Cibc lecture imagire
Cibc lecture imagireCibc lecture imagire
Cibc lecture imagire
 
テスト勉強会よしおか100311 1
テスト勉強会よしおか100311 1テスト勉強会よしおか100311 1
テスト勉強会よしおか100311 1
 
Unit testで定時帰宅!
Unit testで定時帰宅!Unit testで定時帰宅!
Unit testで定時帰宅!
 
試験にでるSpring
試験にでるSpring試験にでるSpring
試験にでるSpring
 
PHP agile test tips
PHP agile test tipsPHP agile test tips
PHP agile test tips
 
ビジネス的に高価値なアジャイルテスト
ビジネス的に高価値なアジャイルテストビジネス的に高価値なアジャイルテスト
ビジネス的に高価値なアジャイルテスト
 
Slurmのジョブスケジューリングと実装
Slurmのジョブスケジューリングと実装Slurmのジョブスケジューリングと実装
Slurmのジョブスケジューリングと実装
 
How to run P4 BMv2
How to run P4 BMv2How to run P4 BMv2
How to run P4 BMv2
 
Scrum
ScrumScrum
Scrum
 
Rookの基礎・バージョンアップ
Rookの基礎・バージョンアップRookの基礎・バージョンアップ
Rookの基礎・バージョンアップ
 
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
 

Mais de Keisuke Fukuda

Supercomputing'18 概要紹介
Supercomputing'18 概要紹介Supercomputing'18 概要紹介
Supercomputing'18 概要紹介Keisuke Fukuda
 
深層学習インフラ、借りるべきか?買うべきか?
深層学習インフラ、借りるべきか?買うべきか?深層学習インフラ、借りるべきか?買うべきか?
深層学習インフラ、借りるべきか?買うべきか?Keisuke Fukuda
 
Clojure座談会 #1 LT 独自コレクションを定義しよう
Clojure座談会 #1 LT 独自コレクションを定義しようClojure座談会 #1 LT 独自コレクションを定義しよう
Clojure座談会 #1 LT 独自コレクションを定義しようKeisuke Fukuda
 
Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35Keisuke Fukuda
 
Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22Keisuke Fukuda
 
Effective modern C++ 勉強会 #3 Item 12
Effective modern C++ 勉強会 #3 Item 12Effective modern C++ 勉強会 #3 Item 12
Effective modern C++ 勉強会 #3 Item 12Keisuke Fukuda
 
Effective Modern C++勉強会#2 Item 11(,12)
Effective Modern C++勉強会#2 Item 11(,12)Effective Modern C++勉強会#2 Item 11(,12)
Effective Modern C++勉強会#2 Item 11(,12)Keisuke Fukuda
 

Mais de Keisuke Fukuda (7)

Supercomputing'18 概要紹介
Supercomputing'18 概要紹介Supercomputing'18 概要紹介
Supercomputing'18 概要紹介
 
深層学習インフラ、借りるべきか?買うべきか?
深層学習インフラ、借りるべきか?買うべきか?深層学習インフラ、借りるべきか?買うべきか?
深層学習インフラ、借りるべきか?買うべきか?
 
Clojure座談会 #1 LT 独自コレクションを定義しよう
Clojure座談会 #1 LT 独自コレクションを定義しようClojure座談会 #1 LT 独自コレクションを定義しよう
Clojure座談会 #1 LT 独自コレクションを定義しよう
 
Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35
 
Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22
 
Effective modern C++ 勉強会 #3 Item 12
Effective modern C++ 勉強会 #3 Item 12Effective modern C++ 勉強会 #3 Item 12
Effective modern C++ 勉強会 #3 Item 12
 
Effective Modern C++勉強会#2 Item 11(,12)
Effective Modern C++勉強会#2 Item 11(,12)Effective Modern C++勉強会#2 Item 11(,12)
Effective Modern C++勉強会#2 Item 11(,12)
 

秒速ChainerMN