Я пытаюсь запустить сценарий retrain.py (доступно здесь: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/image_retraining/retrain.py). Я заметил, что часть, начинающаяся с строки 747, выполняется на CPU, когда по умолчанию должен быть GPU. Таким образом, я добавил следующую строку, чтобы заставить его работать на GPU:Проблемы с переносом проблемы с тензорным потоком для работы на GPU
`with tf.device("/gpu:0"):
(train_step, cross_entropy, bottleneck_input, ground_truth_input, final_tensor) = add_final_training_ops(len(image_lists.keys()),
FLAGS.final_tensor_name,
bottleneck_tensor)`
Это вызывает следующую ошибку:
'tensorflow.python.framework.errors.InvalidArgumentError: Cannot assign a device to node 'gradients/Mean_grad/Prod': Could not satisfy explicit device specification '/device:GPU:0' because no supported kernel for GPU devices is available
[[Node: gradients/Mean_grad/Prod = Prod[T=DT_INT32, keep_dims=false, _device="/device:GPU:0"](gradients/Mean_grad/Shape_2, gradients/Mean_grad/range_1)]]
Caused by op u'gradients/Mean_grad/Prod', defined at:
File "retrain_tensorboard_pickle_mean.py", line 921, in <module>
tf.app.run()
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/platform/app.py", line 30, in run
sys.exit(main(sys.argv))
File "retrain_tensorboard_pickle_mean.py", line 839, in main
(train_step, cross_entropy, bottleneck_input, ground_truth_input, label_ground_truth_input, final_tensor) = add_final_training_ops(len(image_lists.keys()), FLAGS.final_tensor_name, bottleneck_tensor)
File "retrain_tensorboard_pickle_mean.py", line 686, in add_final_training_ops
cross_entropy_mean)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/training/optimizer.py", line 190, in minimize
colocate_gradients_with_ops=colocate_gradients_with_ops)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/training/optimizer.py", line 241, in compute_gradients
colocate_gradients_with_ops=colocate_gradients_with_ops)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/gradients.py", line 481, in gradients
in_grads = _AsList(grad_fn(op, *out_grads))
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/math_grad.py", line 91, in _MeanGrad
factor = (math_ops.reduce_prod(input_shape) //
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/math_ops.py", line 810, in reduce_prod
keep_dims, name=name)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/gen_math_ops.py", line 1115, in _prod
keep_dims=keep_dims, name=name)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/op_def_library.py", line 655, in apply_op
op_def=op_def)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 2146, 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 1154, in __init__
self._traceback = _extract_stack()
...which was originally created as op u'Mean', defined at:
File "retrain_tensorboard_pickle_mean.py", line 921, in <module>
tf.app.run()
[elided 1 identical lines from previous traceback]
File "retrain_tensorboard_pickle_mean.py", line 839, in main
(train_step, cross_entropy, bottleneck_input, ground_truth_input, label_ground_truth_input, final_tensor) = add_final_training_ops(len(image_lists.keys()), FLAGS.final_tensor_name, bottleneck_tensor)
File "retrain_tensorboard_pickle_mean.py", line 681, in add_final_training_ops
cross_entropy_mean = tf.reduce_mean(cross_entropy)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/math_ops.py", line 783, in reduce_mean
keep_dims, name=name)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/gen_math_ops.py", line 973, in _mean
keep_dims=keep_dims, name=name)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/op_def_library.py", line 655, in apply_op
op_def=op_def)
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 2146, 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 1154, in __init__
self._traceback = _extract_stack()
я нашел here, что это может быть проблемой, значит, не реализованный на GPU, но с другой стороны есть commit на github, который фиксирует среднее значение для графического процессора.
Предыдущая часть, например. (строка 744) отлично работает на графическом процессоре, даже не заставляя его работать.
Я был бы признателен за любую помощь!
Юстина
Mean реализации GPU был добавлен в последнее время, может быть, вы используете старую версию? –
Хм, у нас есть главная версия со вчерашнего дня со всеми коммитами относительно reduce_ops_mean. Итак, это действительно странно ... Значит, вы говорите, что он не должен содержать никаких ошибок в новейшей версии тензорного потока? Я также попытался заменить использование метода reduce_mean средним подсчетом, так что счетчик reduce_sum и деление его на количество элементов тензора. Таким образом, нет ошибки при принудительной работе с графическим процессором, но я все еще вижу 0% использования графического процессора. – gromajus
Извините, я пробовал это и кажется, что MeanGrad/Prod не попадает на GPU для меня тоже, глядя –