2016-07-19 2 views
1

При запуске распределенного тензорного потока (TF v0.9.0rc0), я запускаю 3 сервера параметров, а затем 6 рабочих. Серверы параметров кажутся точными, давая сообщение Started server with target: grpc://localhost:2222. Но рабочие дают другие ошибки (ниже), о которых у меня есть вопросы.Ошибки распределенного Tensorflow/

Мне кажется, что иногда компьютеры не могут общаться друг с другом, тем самым давая ошибки socket error, connection refused. Также кажется, что рабочие не могут найти серверы параметров при инициализации своих переменных и дать ошибку Cannot assign a device.

Может ли кто-нибудь помочь мне понять, что тезисы ошибок в отдельности означают, насколько велика сделка, каждая из которых, и, возможно, дает мне указания в том, как исправить их, если необходимо?

В частности:

  1. Почему я получаю socket errors?
  2. Почему есть Master init: Unavailable вопросы/что они означают?
  3. Как я могу гарантировать, что запрашиваемые устройства доступны?
  4. Это похоже на что-то, что я должен опубликовать на странице проблем tenorflow's github account?

Замечания по установке:

  • Все компьютеры сообщают Tensorflow версии: 0.9.0rc0 (python -c "import tensorflow as tf; print(tf.__version__);"), хотя некоторые, возможно, был установлен из источника, а не из семечковые пакетов, если это имеет значение.
  • Все компьютеры находятся на одном сетевом коммутаторе 1Gb.
  • Аппаратное обеспечение в основном такое же, с некоторыми рабочими, работающими на двух графических процессорах.

Все они дают эту ошибку (IP-адресами изменить):

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 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()) 

вместо того, чтобы делать что-то вроде этого:

# 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**] 

Что касается ошибок ...

Я подозреваю, что это вызвало некоторые рабочие умереть с сообщением об ошибке Master init: Unavailable:, потому что начальник никогда не знал о переменных, которые хотели создать работники.

У меня нет убедительных объяснений, почему устройства, недоступные (3-ей) ошибке, не нашли это устройство, но я думаю, что это снова, потому что только мастер мог это создать, и он не знал о новые переменные.

Первая ошибка, по-видимому, связана с тем, что компьютеры не были готовы говорить после сбоев, поскольку я не видел эту ошибку после исправления. Я все еще вижу это, если я убью работника и снова заставлю его, но, похоже, это не проблема, если они все начинают вместе.


В любом случае, я надеюсь, что это будет полезно, если кто-либо когда-нибудь будет иметь такую ​​же ошибку позже.

Смежные вопросы