Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Distributed Deep Newral Networks

Distributed Deep Newral Networks

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

Livesense Inc.

April 11, 2017
Tweet

More Decks by Livesense Inc.

Other Decks in Programming

Transcript

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

    いわゆるディー プラー ニング 単一マシンの処理能力の頭打ち -> 時代は分散コンピュー ティング
  2. 深層ニュー ラルネット (DNN) 多数のレイヤを接続した有向グラフ Back Propagation (BP) 入力値に対する、 モデルの出力値と正解値の 差分を求める

    差分が小さくなるよう、 出力側から順に 各レイヤのパラメー タを調整 Stochastic Gradient Descent (SGD) デー タ点を1つずつ与えながらモデルを学習
  3. DNN と分散処理 DNN は分散処理に向いている モデル並列化 = 計算グラフを複数の部分に分割 デー タ並列化 =

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

    キテクチャ = メッシュ型 元のグラフで結合されていた部分が ノー ドをまたいで通信 ボトルネック 適切に分割しないと ノー ド間のトラフィックがえらいことに
  5. デー タ並列化 分散対象 = 学習デー タ デー タをチャンクに分割 各チャンクを別々 のノー

    ドに処理させる アー キテクチャ = Parameter Server (PS) 方式 PS ノー ドが各レイヤのパラメー タを保持 ワー カー ノー ドは一定量の学習を終えるごとに 非同期通信によりパラメー タを更新 ボトルネック ワー カが増えるとPS ノー ドの負荷が高くなる
  6. クラスタ定義 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" ]})
  7. モデル並列化 レイヤを複数の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(...)
  8. デー タ並列化 各ワー カー に同じグラフを複製 # 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 = ...
  9. 参考 [1] Large Scale Distributed Deep Networks [2] Distributed TensorFlow

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