TPUEstimator не работает с use_tpu=False
Я пытаюсь запустить модель с использованием TPUEstimator локально на ЦП, чтобы проверить, работает ли он, установив use_tpu=False
по оценке инициализации. При запуске поезда я получаю эту ошибку.
InternalError: failed to synchronously memcpy host-to-device: host 0x7fcc7e4d4000 to device 0x1deffc002 size 4096: Failed precondition: Unable to enqueue when not opened, queue: [0000:00:04.0 PE0 C0 MC0 TN0 Queue HBM_WRITE]. State is: CLOSED
[[Node: optimizer/gradients/neural_network/fully_connected_2/BiasAdd_grad/BiasAddGrad_G14 = _Recv[client_terminated=false, recv_device="/job:worker/replica:0/task:0/device:TPU:0", send_device="/job:worker/replica:0/task:0/device:CPU:0", send_device_incarnation=-7832507818616568453, tensor_name="edge_42_op...iasAddGrad", tensor_type=DT_FLOAT, _device="/job:worker/replica:0/task:0/device:TPU:0"]()]]
Похоже, он все еще пытается использовать TPU, как говорится recv_device="/job:worker/replica:0/task:0/device:TPU:0"
, Почему он пытается использовать ТПУ, когда use_tpu
установлено в False?
1 ответ
Какой оптимизатор вы используете? Этот тип ошибки может произойти, если вы используете tf.contrib.tpu.CrossShardOptimizer
а также use_tpu
установлен в False
, Оптимизатор пытается распределить работу между ядрами TPU, но не может, потому что вы работаете на своем процессоре.
Обычной практикой является наличие флага командной строки, который устанавливает, используется ли TPU. Этот флаг используется для переключения таких вещей, как CrossShardOptimizer
а также use_tpu
, Например, в эталонной модели MNIST:
if FLAGS.use_tpu:
optimizer = tf.contrib.tpu.CrossShardOptimizer(optimizer)