2016-07-19 12 views
1

分散型テンソルフロー(TF v0.9.0rc0)を設定すると、3つのパラメータサーバを起動し、次に6人の作業者を起動します。パラメータサーバは正常で、メッセージはStarted server with target: grpc://localhost:2222です。しかし、労働者は私が疑問を持っている他のエラー(下記)を出します。Distributed Tensorflow Errors/

コンピュータが互いに通信できないことがあり、エラーが発生することがあります。socket error, connection refusedエラーが発生することがあります。また、変数を初期化するときにワーカーがパラメータサーバーを見つけられず、Cannot assign a deviceエラーが発生するように見えます。

個々の論文の誤りが何であるかを理解するのに助けてくれる人がいますか?それぞれがどれだけ大きな取引をしているのか、必要に応じて修正する方法を教えてください。

は、具体的に:

  1. なぜ私はsocket errorsを取得していますか?
  2. なぜそうですMaster init: Unavailable問題/それらは何を意味していますか?
  3. 要求されたデバイスが利用可能であることを確認するにはどうすればよいですか?
  4. これはtensorflowのgithub accountの問題ページに投稿する必要がありますか?セットアップの

注:

  • すべてのコンピュータがTensorflowバージョンレポート:それが重要ならば、いくつかはソースの代わりに、PIPパッケージからインストールされているかもしれないが 、0.9.0rc0python -c "import tensorflow as tf; print(tf.__version__);"を)。
  • すべてのコンピュータは同じ1Gbイーサネットスイッチ上にあります。
  • ハードウェアはほとんど同じで、一部のワーカーはデュアルGPUを実行しています。

それらのすべては、(腹腔addresesが変更)このエラーを与える:

E0719 12:06:17.711635677 2543 tcp_client_posix.c:173] 
failed to connect to 'ipv4:192.168.xx.xx:2222': socket error: connection refused 

しかし、非チーフ労働者のすべてが、また与える:

E tensorflow/core/distributed_runtime/master.cc:202] Master init: Unavailable: 

さらに、ノンチーフ労働者がクラッシュし、このエラーが発生します。

Traceback (most recent call last): 
    File "main.py", line 219, in <module> 
     r.main() 
    File "main.py", line 119, in main 
     with sv.prepare_or_wait_for_session(server.target, config=tf.ConfigProto(gpu_options=gpu_options)) as sess: 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/training/supervisor.py", line 691, in prepare_or_wait_for_sessionn max_wait_secs=max_wait_secs) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/training/session_manager.py", line 282, in wait_for_session 
     sess.run([self._local_init_op]) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 372, in run 
     run_metadata_ptr) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 636, in _run 
     feed_dict_string, options, run_metadata) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 708, in _do_run 
     target_list, options, run_metadata) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 728, in _do_call 
     raise type(e)(node_def, op, message) 
    tensorflow.python.framework.errors.InvalidArgumentError: Cannot assign a device to node 'save/restore_slice_23': 
     Could not satisfy explicit device specification '/job:ps/task:3/device:CPU:0' 
     because no devices matching that specification are registered in this process; available devices: 
      /job:ps/replica:0/task:0/cpu:0, 
      /job:ps/replica:0/task:1/cpu:0, 
      /job:ps/replica:0/task:2/cpu:0, 
      /job:ps/replica:0/task:4/cpu:0, 
      /job:worker/replica:0/task:0/cpu:0, 
      /job:worker/replica:0/task:0/gpu:0, 
      /job:worker/replica:0/task:1/cpu:0, 
      /job:worker/replica:0/task:1/gpu:0, 
      /job:worker/replica:0/task:2/cpu:0, 
      /job:worker/replica:0/task:2/gpu:0 
[[Node: save/restore_slice_23 = RestoreSlice[dt=DT_FLOAT, preferred_shard=-1, _device="/job:ps/task:3/device:CPU:0"](save/Const, save/restore_slice_23/tensor_name, save/restore_slice_23/shape_and_slice)]] 
Caused by op u'save/restore_slice_23', defined at: 
    File "main.py", line 219, in <module> 
     r.main() 
    File "main.py", line 101, in main 
     saver = tf.train.Saver() 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/training/saver.py", line 845, in __init__ 
     restore_sequentially=restore_sequentially) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/training/saver.py", line 515, in build 
     filename_tensor, vars_to_save, restore_sequentially, reshape) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/training/saver.py", line 271, in _AddRestoreOps 
     values = self.restore_op(filename_tensor, vs, preferred_shard) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/training/saver.py", line 186, in restore_op 
     preferred_shard=preferred_shard) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/io_ops.py", line 202, in _restore_slice 
     preferred_shard, name=name) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/gen_io_ops.py", line 358, in _restore_slice 
     preferred_shard=preferred_shard, name=name) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/op_def_library.py", line 704, in apply_op 
     op_def=op_def) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 2260, in create_op 
     original_op=self._default_original_op, op_def=op_def) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 1230, in __init__ 
     self._traceback = _extract_stack() 

答えて

1

私は自分の問題が何かを考え出しました。

TL; DR:チーフは彼らにすべてを初期化するために、約すべての変数を知っている必要があります。非チーフワーカーは独自の変数を作成することはできません。

私はすべての従業員が独立した変数をいくつか持っていたが、いくつかの変数を共有する必要があった(私はこれらをZMQを使って分散した)TensorFlowセットアップに変換し、すべての変数をすべて初期化するのを忘れた労働者の

に...エラーについては

# Create all worker specific variables 
all_w1 = {} 
for worker in worker_cnt: 
    with tf.variable_scope("world_{}".format(**worker_id**)): 
     all_w1[worker] = tf.get_variable("weight", shape=(input_dim, hidden_dim), dtype=tf.float32, initializer=tf.truncated_normal_initializer()) 

# grab worker specific variable 
w1 = all_w1[**worker_id**] 

私は、これは一部の労働者が死ぬことを引き起こしたと思われる:私は

# Create worker specific variable 
with tf.variable_scope("world_{}".format(**worker_id**)): 
    w1 = tf.get_variable("weight", shape=(input_dim, hidden_dim), dtype=tf.float32, initializer=tf.truncated_normal_initializer()) 

の代わりに、このような何かをやってようなものを持っていました上記のMaster init: Unavailable:というエラーメッセージが表示されます。これは、チーフが労働者が作成したい変数を知りませんでしたからです。

デバイスが利用できない(3番目)エラーがそのデバイスを見つけられなかった理由についての確かな説明はありませんが、マスターだけがそのデバイスを作成でき、新しい変数。

最初のエラーは、修正後にそのエラーが表示されないため、コンピュータが失敗した後に対話できないためです。私は労働者を殺してもう一度始めようとしてもそれはまだ見えますが、彼らがすべて一緒に立ち上がっても問題はないようです。


とにかく、後で同じエラーが発生した場合に役立ちます。