#tensorflow #deep-learning #multi-gpu
#tensorflow #глубокое обучение #мульти-gpu
Вопрос:
Я пытаюсь адаптировать модель MNIST DL для одновременного запуска на многих графических процессорах. Однако я не могу найти способ заставить его работать. Я новичок в DL, поэтому я не до конца понимаю всю логику этого кода. Я пробовал много вещей, но, похоже, ничего не работало. Это код:
strategy = tf.distribute.MirroredStrategy()
with strategy.scope():
y_ = tf.placeholder(tf.float32, [None, 10])
# LINES TO MAKE MODEL...
y_conv = tf.matmul(h_fc1_drop, W_fc2) b_fc2
#Crossentropy
cross_entropy = tf.reduce_mean(
tf.nn.softmax_cross_entropy_with_logits_v2(labels=y_, logits=y_conv))
train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
correct_prediction = tf.equal(tf.argmax(y_conv, 1), tf.argmax(y_, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
Я получаю эту проблему:
RuntimeError: Use `_distributed_apply()` instead of `apply_gradients()` in a cross-replica context.
Адаптация функции минимизации для использования этой _distributed_apply()
функции не решает эту проблему. Если я изменю
#train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
Для
opt = tf.train.AdamOptimizer(1e-4)
grads_and_vars = opt.compute_gradients(cross_entropy)
train_step = opt._distributed_apply(strategy, grads_and_vars)
Я получаю следующую ошибку:
Traceback (most recent call last):
File "/home/baq/.local/lib/python3.7/site-packages/tensorflow/python/distribute/cross_device_ops.py", line 108, in _make_tensor_into_per_replica
device = input_tensor.device
AttributeError: 'NoneType' object has no attribute 'device'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "multigpu.py", line 97, in <module>
train_step = opt._distributed_apply(strategy, grads_and_vars)
File "/home/baq/.local/lib/python3.7/site-packages/tensorflow/python/training/optimizer.py", line 665, in _distributed_apply
ds_reduce_util.ReduceOp.SUM, grads_and_vars)
File "/home/baq/.local/lib/python3.7/site-packages/tensorflow/python/distribute/distribute_lib.py", line 1254, in batch_reduce_to
return self._batch_reduce_to(reduce_op, value_destination_pairs)
File "/home/baq/.local/lib/python3.7/site-packages/tensorflow/python/distribute/mirrored_strategy.py", line 739, in _batch_reduce_to
reduce_op, value_destination_pairs)
File "/home/baq/.local/lib/python3.7/site-packages/tensorflow/python/distribute/cross_device_ops.py", line 285, in batch_reduce
value_destination_pairs)
File "/home/baq/.local/lib/python3.7/site-packages/tensorflow/python/distribute/cross_device_ops.py", line 133, in _normalize_value_destination_pairs
per_replica = _make_tensor_into_per_replica(pair[0])
File "/home/baq/.local/lib/python3.7/site-packages/tensorflow/python/distribute/cross_device_ops.py", line 110, in _make_tensor_into_per_replica
raise ValueError("Cannot convert `input_tensor` to a `PerReplica` object "
ValueError: Cannot convert `input_tensor` to a `PerReplica` object because it doesn't have device set.
Есть идеи о том, как это решить? Спасибо.
Комментарии:
1. Какую версию TensorFlow вы используете? Похоже на 1.x. Это намеренно?
2. Я предполагаю, что вы уже просматривали документы. — TF — distributed_training и blogs — Масштабирование обучения на нескольких графических процессорах
3. > «tf.placeholder(tf.float32, [None, 10])» > «tf.train. AdamOptimizer» Это код TF1. Пожалуйста, не создавайте ничего нового в TF1.
4. Вы ищете этот документ: tensorflow.org/tutorials/distribute/custom_training