Distributed Deep Newral Networks

Distributed Deep Newral Networks

ニューラルネット x 分散コンピューティング ※社内LT資料

E60aa4f80303f3f386898546ddb3686a?s=128

Livesense Inc.

April 11, 2017
Tweet

Transcript

  1. Distributed Deep Newral Networks 0x64 物語 reboot 第01 夜 "Network"

    @yubessy
  2. 今日の話 ニュー ラルネットワー ク x 分散コンピュー ティング

  3. Why Distributed? デー タ量の増加 テキスト < 画像 < 動画 計算量の増加

    いわゆるディー プラー ニング 単一マシンの処理能力の頭打ち -> 時代は分散コンピュー ティング
  4. 分散コンピュー ティングの歩き方 分散対象: 何を分けるか そもそも分割できるのか 負荷を均等化できるか アー キテクチャ: どうつなぐか クライアント・

    サー バ型 / メッシュ型 / ... 同期 / 非同期 スルー プット / レイテンシ プロトコル
  5. 深層ニュー ラルネット (DNN) 多数のレイヤを接続した有向グラフ Back Propagation (BP) 入力値に対する、 モデルの出力値と正解値の 差分を求める

    差分が小さくなるよう、 出力側から順に 各レイヤのパラメー タを調整 Stochastic Gradient Descent (SGD) デー タ点を1つずつ与えながらモデルを学習
  6. 深層ニュー ラルネット (DNN) From http://joelouismarino.github.io/blog_posts/blog_googlenet_keras.html

  7. DNN と分散処理 DNN は分散処理に向いている モデル並列化 = 計算グラフを複数の部分に分割 デー タ並列化 =

    デー タを分割しノー ド毎にSGD "Large Scale Distributed Deep Networks" Dean, et al. 2012. By Google DNN のモデル / デー タ並列化両方について解説
  8. モデル並列化 分散対象 = DNN のグラフ グラフ全体を部分グラフに分割 各部分グラフを別々 のノー ドに割り当て アー

    キテクチャ = メッシュ型 元のグラフで結合されていた部分が ノー ドをまたいで通信 ボトルネック 適切に分割しないと ノー ド間のトラフィックがえらいことに
  9. モデル並列化 Dean, et al. [1] Figure 1

  10. デー タ並列化 分散対象 = 学習デー タ デー タをチャンクに分割 各チャンクを別々 のノー

    ドに処理させる アー キテクチャ = Parameter Server (PS) 方式 PS ノー ドが各レイヤのパラメー タを保持 ワー カー ノー ドは一定量の学習を終えるごとに 非同期通信によりパラメー タを更新 ボトルネック ワー カが増えるとPS ノー ドの負荷が高くなる
  11. デー タ並列化 Dean, et al. [1] Figure 2

  12. Distributed TensorFlow ここまで説明した分散処理機能が 実はすでに TensorFlow に組み込まれている Distributed TensorFlow ノー ド間はgRPC

    で通信
  13. 雰囲気だけ紹介

  14. クラスタ定義 cluster = tf.train.ClusterSpec({ # ワー カー ( デー タ分散)

    "worker": [ "worker0.example.com:2222", "worker1.example.com:2222", "worker2.example.com:2222" ], # パラメー タサー バ ( モデル分散) "ps": [ "ps0.example.com:2222", "ps1.example.com:2222" ]})
  15. モデル並列化 レイヤを複数のPS に分散 # 同じPS に乗せたいパラメー タ群を tf.device でくくる with

    tf.device("/job:ps/task:0"): weights_1 = tf.Variable(...) biases_1 = tf.Variable(...) # タスクの番号に応じてラウンドロビンでPS が決まる with tf.device("/job:ps/task:1"): weights_2 = tf.Variable(...) biases_2 = tf.Variable(...)
  16. デー タ並列化 各ワー カー に同じグラフを複製 # replica_device_setter で # 複数のワー

    カに同じグラフを複製 with tf.device(tf.train.replica_device_setter( worker_device="/job:worker/task:%d" % task_index, cluster=cluster)): input, labels = ... layer_1 = tf.nn.relu( tf.matmul(input, weights_1) + biases_1) logits = tf.nn.relu( tf.matmul(layer_1, weights_2) + biases_2) train_op = ...
  17. まとめ NN は分散コンピュー ティングと相性がよい モデル並列化 / デー タ並列化 TensorFlow 最強

  18. 参考 [1] Large Scale Distributed Deep Networks [2] Distributed TensorFlow

    [3] Distributed TensorFlow を試してみる [4] Distributed TensorFlow の話