SlideShare a Scribd company logo
scikit-learnとTensorFlow
による実践機械学習
12章 複数のデバイス、サーバーを使った
分散TensorFlow
2018年8⽉31⽇
⾃⼰紹介
• ID: rysk
• 職業: スパコン屋さん
• 機械学習歴: 10ヶ⽉
• 趣味1: バドミントン (プレイヤ歴25年、コーチ歴15年)
はじめに
• 本書の12章はつまらないので、本⽂に沿った発表はしま
せん。
• サンプルプログラムはローカルではどうせ動かせないの
でjupyterの準備は不要です。NVIDIAのGPUを2つ以上搭載した超弩級ノー
トパソコンを持ってきているなら別ですが……。
• この資料は後でSlideShareに上げるので記録の為にスラ
イドを写真で撮る必要も無いです。
• 質問は随時受け付けます。出来れば挙⼿して下さい。
深層学習の問題
• モデル(ネットワーク)が⼤きくなると、学習にとんでもな
く時間がかかる。
• シングルGPUだと学習に1週間とかざらにある。
• 学習に時間がかかると⾊々なモデルの試⾏錯誤が出来な
い。
• 1週間かけて学習したモデルの精度が悪いと泣ける。
学習を加速する
システムの性能を上昇させる場合、やり⽅は2つ
1. スケールアップ → より⾼性能なものにする
2. スケールアウト → 数を増やす
スケールアップでよくない?
• より⾼性能なCPU/GPUにする、メモリを増やすとか単純に性能
の上昇が⾒込める
• 実際簡単。
• でも限界がある。
• 市場にある最⾼のCPU/GPUで性能が打ち⽌め。
• それ以上が欲しければ新しい商品を待つしかない。
• がムーアの法則にも限界が⾒えてきた。
ムーアの法則
• インテルの創業者ゴードン・ムーアが提唱した経験則。
• おおむね18から24ヶ⽉で⼤規模集積回路(例えばCPU)を構
成するトランジスタ数が2倍になる、というもの。
• 性能が2倍になる、と勘違いしている⼈が多い。
• とは⾔え、トランジスタ数は性能と強い正の相関があ
る。
その限界
• CPUが⼤規模・⾼速化するにつれ構造が複雑になり、
• 近年では単純な⾼速化が難しくなってきた。
• 2010年代に⼊ったあたりからムーアの法則が破れ初めた。
• それ以降はマルチCPUでの性能向上が主流に。
• その最たる例が皆さんが使っているノートパソコン。
• 今やモバイルですらマルチCPUが当たり前。
並列化へ
• 最早、単⼀マシン内ではマルチCPUが主流。
• その流れの中で、並列プログラミングの技法が洗練されて
きた。
• 当然の発想として、複数マシン間での並列プログラミン
グ、という話しになる。
• つまりスケールアウト。
Y
とは⾔っても
• 普通の⼈は複数のGPUとか持ってない。
• 況んや複数のサーバに於いておや。
• だから並列化とか分散処理とか⾔われても興味湧かない。
• だいたい本章のコードは⼿元では動かせない。
なぜ並列化の話をするのか
• クラウドなら簡単に複数GPU、複数サーバ(インスタンス)
が使える。
• でもお⾦は多少必要。
• お⾦かけるなら効率良くやりたい。
• ん、効率?
求む⾼効率
クラウドサービスの料⾦は⼤雑把に⾔えば
インスタンスの性能 × インスタンス数 × 利⽤時間
なのでインスタンス数が増えても利⽤時間が減れば料⾦は変
わらない。
同じ料⾦で実⾏時間(訓練時間)が短かくなるなら全⼈類が嬉
しい。
よろしい。
ならば並列化だ。
並列化の問題
• 当然、並列化にもデメリットがある。
• 並列プログラミングは複雑。デッドロックの回避とか共
有メモリとか再現性とか……
• 並列化しても速度が向上しない処理もある。
• 並列化した処理間でのデータの転送時間がボトルネック
になる場合もある。
並列化による性能向上の指標
• アムダールの法則
• グスタフソンの法則
というのがある。後者は前者を⼀般化したもの。簡単なアム
ダールの法則を紹介。
アムダールの法則
並列化による性能向上率: S
並列化可能な処理の⽐率: P
S =
1
(1 − P)
並列化による性能上昇は⾮線形
並列化で線形に
スケールしちゃう例
• Chainerの並列フレームワ
ークであるChainerMNの
例。
• GPU数に対して線形にスケ
ールしている。
• これはPFNの中の⼈が無茶
苦茶チューニングした結果
と思われる。
TensorFlowの話マダー??
マダー?(・ ・ )っ/凵͡☆チンチン
まだです。
僕の⼤好きな並列・分散処理の話しだもん。
まだまだ続きます。
つーかDistributed TensorFlowは退屈。あんな⾯倒なもん誰
も使わない。使いたくない。
最後の⽅でもっと良いものを紹介します。
並列プログラミングの諸問題
• デッドロック
• 共有・分散メモリ
• ノード間通信
• NUMA
などなど
こういう⾯倒な事は
フレームワークに
解決してもらう
クリティカルセクション
• プログラムに於いて並列化できない処理の事。
• 排他制御をする必要がある。
• デッドロックに留意しないとだめ。
• 深層学習なら勾配計算の時とか。
と、ここまでが
⼀般的な並列処理の話
ようやく深層学習の並列化に移ります。
モデル並列かデータ並列か
深層学習で処理を並列化する場合、⽅法は2つ。
• モデル並列
• データ並列
基本前者の⽅が難しい。
モデル並列
モデルとなるニューラルネットワーク⾃体を分割して、その
分割した単位事に学習を進める事で並列化する。
完全結合のネットワークだと上⼿く並列化できない。
部分結合のネットワークだと上⼿く⾏く場合がある。
完全結合 部分結合
データ並列
モデル(ニューラルネットワーク)は同じものを使うが訓練デ
ータを分割して、それぞれの同じモデルが別のデータで訓練
する並列化。
簡単だけど個々のモデルに於いては訓練データ数が減るので
普通は精度が落ちる。
勾配の更新⽅針
• 深層学習の最後のステップで勾配を更新する。
• 並列化されている場合、この更新を集計する必要がある
(同期更新)。
• 勾配を集計して全モデルに再配布する場合、ここがクリテ
ィカルセッション(並列化不可能)になる。
• 集計せずに個々の計算結果を使って次のエポックに進むの
も可能(⾮同期更新)。
同期更新の善し悪し
• 全モデルの学習結果を利⽤出来るので精度が⾼い。
• 同期更新はクリティカルセッションになるので、並列化に
よる恩恵が減少する。
• モデル間でデータ(勾配)のコピーが発⽣するので、並列化
している場合ネットワーク上に⼤量のデータが流れる。
• 上記のためネットワーク速度が学習速度のボトルネック
になる可能性が出てくる。
⾮同期更新の善し悪し
• 同期更新の真逆。
• 場合によっては勾配の収束が極端に遅れたり、下⼿すると
発散する可能性もある。
では
もう少し具体的な
深層学習の実装の話に
Distributed TensorFlow
• ようやく登場。
• TensorFlow⾃体に組み込まれている並列化の仕組み。
• CPUもGPUも当然使える。
• 設定が柔軟。
• モデル並列もデータ並列も出来る。
• 同期更新も⾮同期更新も可能。
だけど
• 設定がとにかく⾯倒。
• 細かくノードやGPUを指定する必要があるので、作成したプログ
ラムの移植性が低い。
• 例えばGPU1つの⼿元の環境で動かしたプログラムをAWSで8並列
で動かす、とかやろうとすると⼀々プログラム修正が必要。
• そもそもAWSの設定して……プログラム修正して……テストし
て……エラー出て……調べて……
• とかやってらんない。
そこで
例の「もっと良いもの」
Horovod
• あのタクシー会社のUberが開発しているオープンソース
の分散学習フレームワーク。
• TensorFlow、Keras、PyTorchに対応。
https://github.com/uber/horovod/
Horovodの特徴
• データ並列、同期更新のみ対応。
• 並列化による精度の低下が少ない(と⾔われている)。
• ノード間通信が多くないのでネットワークの問題が発⽣
し難い。
• 並列処理にMPIを使っているので利⽤者は細かくノードを
意識する必要が少ない。
Horovodの特徴2
• 通常のTensorFlowのプログラムに10⾏程度追加すれば並
列化出来る。
• 環境設定はちょっと⾯倒(MPI⼊れたり)
• 公式はDockerイメージを使った⼀発環境構築推奨。
• だけどDockerはroot権限で動く(セキュリティが気になる)
唐突な、結び
• というわけで並列処理のオハナシでした。
• もっと横道に逸れたかったけどかなり我慢した。
• Horovodについて詳しく説明してほしい⼈多そうだけど、
まだ僕も使った事がない。
• 最後の強化学習の章も頑張ります。
参考⽂献
• プロセッサを⽀える技術, Hisa Ando, 技術評論社
• Horovodによる分散学習の実装⽅法と解説, https://
www.slideshare.net/leapmind/20180613-horovod
ご清聴ありがとう
ございました。

More Related Content

What's hot

RubyKaigi2011の雰囲気
RubyKaigi2011の雰囲気RubyKaigi2011の雰囲気
RubyKaigi2011の雰囲気Sea Mountain
 
DjangoのORMことはじめ
DjangoのORMことはじめDjangoのORMことはじめ
DjangoのORMことはじめ
ko ty
 
計算数学
計算数学計算数学
計算数学
blackenedgold
 
mruby for embedded systems
mruby for embedded systemsmruby for embedded systems
mruby for embedded systems
masayoshi takahashi
 
量子コンピュータでニューラルネットワークな論文紹介
量子コンピュータでニューラルネットワークな論文紹介量子コンピュータでニューラルネットワークな論文紹介
量子コンピュータでニューラルネットワークな論文紹介
Takatomo Torigoe
 
Ros,gazeboとchainerを用いた畳込みニューラルネットワークによる3次元形状の学習
Ros,gazeboとchainerを用いた畳込みニューラルネットワークによる3次元形状の学習Ros,gazeboとchainerを用いた畳込みニューラルネットワークによる3次元形状の学習
Ros,gazeboとchainerを用いた畳込みニューラルネットワークによる3次元形状の学習
Hiroaki Kaneda
 
Siv3Dのすゝめ
Siv3DのすゝめSiv3Dのすゝめ
Siv3Dのすゝめ
Azaika At
 
先端技術 関数型プログラミング
先端技術 関数型プログラミング先端技術 関数型プログラミング
先端技術 関数型プログラミング聡 中川
 
Mix leaplt#12登壇資料
Mix leaplt#12登壇資料Mix leaplt#12登壇資料
Mix leaplt#12登壇資料
NakamuraHien
 
OpenLayersで始める地図の操作
OpenLayersで始める地図の操作OpenLayersで始める地図の操作
OpenLayersで始める地図の操作
Yuki Yazaki
 
メモリアロケーションからみた拡張ライブラリに大切なこと
メモリアロケーションからみた拡張ライブラリに大切なことメモリアロケーションからみた拡張ライブラリに大切なこと
メモリアロケーションからみた拡張ライブラリに大切なこと
Masaya TARUI
 
jTthree V3 technical preview
jTthree V3 technical previewjTthree V3 technical preview
jTthree V3 technical preview
Masaki Yamamoto
 

What's hot (12)

RubyKaigi2011の雰囲気
RubyKaigi2011の雰囲気RubyKaigi2011の雰囲気
RubyKaigi2011の雰囲気
 
DjangoのORMことはじめ
DjangoのORMことはじめDjangoのORMことはじめ
DjangoのORMことはじめ
 
計算数学
計算数学計算数学
計算数学
 
mruby for embedded systems
mruby for embedded systemsmruby for embedded systems
mruby for embedded systems
 
量子コンピュータでニューラルネットワークな論文紹介
量子コンピュータでニューラルネットワークな論文紹介量子コンピュータでニューラルネットワークな論文紹介
量子コンピュータでニューラルネットワークな論文紹介
 
Ros,gazeboとchainerを用いた畳込みニューラルネットワークによる3次元形状の学習
Ros,gazeboとchainerを用いた畳込みニューラルネットワークによる3次元形状の学習Ros,gazeboとchainerを用いた畳込みニューラルネットワークによる3次元形状の学習
Ros,gazeboとchainerを用いた畳込みニューラルネットワークによる3次元形状の学習
 
Siv3Dのすゝめ
Siv3DのすゝめSiv3Dのすゝめ
Siv3Dのすゝめ
 
先端技術 関数型プログラミング
先端技術 関数型プログラミング先端技術 関数型プログラミング
先端技術 関数型プログラミング
 
Mix leaplt#12登壇資料
Mix leaplt#12登壇資料Mix leaplt#12登壇資料
Mix leaplt#12登壇資料
 
OpenLayersで始める地図の操作
OpenLayersで始める地図の操作OpenLayersで始める地図の操作
OpenLayersで始める地図の操作
 
メモリアロケーションからみた拡張ライブラリに大切なこと
メモリアロケーションからみた拡張ライブラリに大切なことメモリアロケーションからみた拡張ライブラリに大切なこと
メモリアロケーションからみた拡張ライブラリに大切なこと
 
jTthree V3 technical preview
jTthree V3 technical previewjTthree V3 technical preview
jTthree V3 technical preview
 

Similar to scikit-learnとTensorFlowによる実践機械学習 第12章

Introduction to DEEPstation the GUI Deep learning environment for chainer
Introduction to DEEPstation the GUI Deep learning environment for chainerIntroduction to DEEPstation the GUI Deep learning environment for chainer
Introduction to DEEPstation the GUI Deep learning environment for chainer
Ryo Shimizu
 
機械学習環境にハマってみよう
機械学習環境にハマってみよう機械学習環境にハマってみよう
機械学習環境にハマってみよう
You&I
 
JSAI 2020 1J5-GS-2-01 TensorShader 高次元ニューラルネットワーク深層学習フレームワーク
JSAI 2020 1J5-GS-2-01 TensorShader 高次元ニューラルネットワーク深層学習フレームワークJSAI 2020 1J5-GS-2-01 TensorShader 高次元ニューラルネットワーク深層学習フレームワーク
JSAI 2020 1J5-GS-2-01 TensorShader 高次元ニューラルネットワーク深層学習フレームワーク
Takuma Yoshimura
 
ChainerRL の学習済みモデルを gRPC 経由で使ってみる試み (+アルファ)
ChainerRL の学習済みモデルを gRPC 経由で使ってみる試み (+アルファ)ChainerRL の学習済みモデルを gRPC 経由で使ってみる試み (+アルファ)
ChainerRL の学習済みモデルを gRPC 経由で使ってみる試み (+アルファ)
NVIDIA Japan
 
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
ManaMurakami1
 
kernel/vm@okinawa 2014
kernel/vm@okinawa 2014kernel/vm@okinawa 2014
kernel/vm@okinawa 2014
y0t4
 
Chainer でのプロファイリングをちょっと楽にする話
Chainer でのプロファイリングをちょっと楽にする話Chainer でのプロファイリングをちょっと楽にする話
Chainer でのプロファイリングをちょっと楽にする話
NVIDIA Japan
 
ディープラーニングイメージで構築する快適・高速な機械学習環境
ディープラーニングイメージで構築する快適・高速な機械学習環境ディープラーニングイメージで構築する快適・高速な機械学習環境
ディープラーニングイメージで構築する快適・高速な機械学習環境
Yaboo Oyabu
 
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
Preferred Networks
 
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正前 typoあり)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正前 typoあり)」「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正前 typoあり)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正前 typoあり)」
ManaMurakami1
 
SWEST16「LED-Camp2の実施報告と実習教材のリアルタイムデバッグ」
SWEST16「LED-Camp2の実施報告と実習教材のリアルタイムデバッグ」SWEST16「LED-Camp2の実施報告と実習教材のリアルタイムデバッグ」
SWEST16「LED-Camp2の実施報告と実習教材のリアルタイムデバッグ」
Hideki Takase
 
Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6
信之 岩永
 
Deep Learning Abstract
Deep Learning AbstractDeep Learning Abstract
Deep Learning Abstract
Ryousuke Wayama
 
Halide, Darkroom - 並列化のためのソフトウェア・研究
Halide, Darkroom - 並列化のためのソフトウェア・研究Halide, Darkroom - 並列化のためのソフトウェア・研究
Halide, Darkroom - 並列化のためのソフトウェア・研究
Yuichi Yoshida
 
研究を加速するChainerファミリー
研究を加速するChainerファミリー研究を加速するChainerファミリー
研究を加速するChainerファミリー
Deep Learning Lab(ディープラーニング・ラボ)
 
NIIクラウドチームとDocker
NIIクラウドチームとDockerNIIクラウドチームとDocker
NIIクラウドチームとDocker
Satoshi Yazawa
 
Moving computation to the data (1)
Moving computation to the data (1)Moving computation to the data (1)
Moving computation to the data (1)Kazunori Sato
 
ぼくのかんがえたさいきょうのじたくかんきょう
ぼくのかんがえたさいきょうのじたくかんきょうぼくのかんがえたさいきょうのじたくかんきょう
ぼくのかんがえたさいきょうのじたくかんきょう
Yusuke Watanabe
 
GW躍進会報告
GW躍進会報告GW躍進会報告
GW躍進会報告
Yosuke Ueno
 
NGN2012B 発表資料
NGN2012B 発表資料NGN2012B 発表資料
NGN2012B 発表資料Kenji Nagase
 

Similar to scikit-learnとTensorFlowによる実践機械学習 第12章 (20)

Introduction to DEEPstation the GUI Deep learning environment for chainer
Introduction to DEEPstation the GUI Deep learning environment for chainerIntroduction to DEEPstation the GUI Deep learning environment for chainer
Introduction to DEEPstation the GUI Deep learning environment for chainer
 
機械学習環境にハマってみよう
機械学習環境にハマってみよう機械学習環境にハマってみよう
機械学習環境にハマってみよう
 
JSAI 2020 1J5-GS-2-01 TensorShader 高次元ニューラルネットワーク深層学習フレームワーク
JSAI 2020 1J5-GS-2-01 TensorShader 高次元ニューラルネットワーク深層学習フレームワークJSAI 2020 1J5-GS-2-01 TensorShader 高次元ニューラルネットワーク深層学習フレームワーク
JSAI 2020 1J5-GS-2-01 TensorShader 高次元ニューラルネットワーク深層学習フレームワーク
 
ChainerRL の学習済みモデルを gRPC 経由で使ってみる試み (+アルファ)
ChainerRL の学習済みモデルを gRPC 経由で使ってみる試み (+アルファ)ChainerRL の学習済みモデルを gRPC 経由で使ってみる試み (+アルファ)
ChainerRL の学習済みモデルを gRPC 経由で使ってみる試み (+アルファ)
 
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
 
kernel/vm@okinawa 2014
kernel/vm@okinawa 2014kernel/vm@okinawa 2014
kernel/vm@okinawa 2014
 
Chainer でのプロファイリングをちょっと楽にする話
Chainer でのプロファイリングをちょっと楽にする話Chainer でのプロファイリングをちょっと楽にする話
Chainer でのプロファイリングをちょっと楽にする話
 
ディープラーニングイメージで構築する快適・高速な機械学習環境
ディープラーニングイメージで構築する快適・高速な機械学習環境ディープラーニングイメージで構築する快適・高速な機械学習環境
ディープラーニングイメージで構築する快適・高速な機械学習環境
 
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
 
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正前 typoあり)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正前 typoあり)」「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正前 typoあり)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正前 typoあり)」
 
SWEST16「LED-Camp2の実施報告と実習教材のリアルタイムデバッグ」
SWEST16「LED-Camp2の実施報告と実習教材のリアルタイムデバッグ」SWEST16「LED-Camp2の実施報告と実習教材のリアルタイムデバッグ」
SWEST16「LED-Camp2の実施報告と実習教材のリアルタイムデバッグ」
 
Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6Unityで使える C# 6.0~と .NET 4.6
Unityで使える C# 6.0~と .NET 4.6
 
Deep Learning Abstract
Deep Learning AbstractDeep Learning Abstract
Deep Learning Abstract
 
Halide, Darkroom - 並列化のためのソフトウェア・研究
Halide, Darkroom - 並列化のためのソフトウェア・研究Halide, Darkroom - 並列化のためのソフトウェア・研究
Halide, Darkroom - 並列化のためのソフトウェア・研究
 
研究を加速するChainerファミリー
研究を加速するChainerファミリー研究を加速するChainerファミリー
研究を加速するChainerファミリー
 
NIIクラウドチームとDocker
NIIクラウドチームとDockerNIIクラウドチームとDocker
NIIクラウドチームとDocker
 
Moving computation to the data (1)
Moving computation to the data (1)Moving computation to the data (1)
Moving computation to the data (1)
 
ぼくのかんがえたさいきょうのじたくかんきょう
ぼくのかんがえたさいきょうのじたくかんきょうぼくのかんがえたさいきょうのじたくかんきょう
ぼくのかんがえたさいきょうのじたくかんきょう
 
GW躍進会報告
GW躍進会報告GW躍進会報告
GW躍進会報告
 
NGN2012B 発表資料
NGN2012B 発表資料NGN2012B 発表資料
NGN2012B 発表資料
 

scikit-learnとTensorFlowによる実践機械学習 第12章