TensorFlow 多 GPU InvalidArgumentError:cifar10_multi_gpu.py

Posted

技术标签:

【中文标题】TensorFlow 多 GPU InvalidArgumentError:cifar10_multi_gpu.py【英文标题】:TensorFlow multi-GPU InvalidArgumentError : cifar10_multi_gpu.py 【发布时间】:2018-01-20 17:54:10 【问题描述】:

我尝试使用多 GPU 训练我的模型。所以我运行 cifar10_multi_gpu.py (https://github.com/tensorflow/models/blob/master/tutorials/image/cifar10/cifar10_multi_gpu_train.py) 。

1。我的位置:


操作系统平台:Linux 版本 3.10.0-327.el7.x86_64

TensorFlow 安装:pip install --upgrade ./tensorflow_gpu-1.0.0rc0-cp35-cp35m-linux_x86_64.whl

Python 版本:Python 3.5.2

CUDA/cuDNN 版本:cuda_8.0.61_375.26_linux.run / cudnn-8.0-linux-x64-v5.1.tgz

2。 GPU 设置正确

将张量流导入为 tf

with tf.device('/cpu:0'):

     a = tf.constant([1.0, 2.0, 3.0], shape=[3], name='a')

     b = tf.constant([1.0, 2.0, 3.0], shape=[3], name='b')  

使用 tf.device('/gpu:1'):

     c = a + b

sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))

sess.run(c)

添加:(添加):/job:localhost/replica:0/task:0/gpu:1 I

tensorflow/core/common_runtime/simple_placer.cc:841] 添加: (添加)/job:localhost/replica:0/task:0/gpu:1 b:(常量): /job:localhost/replica:0/task:0/cpu:0 我

tensorflow/core/common_runtime/simple_placer.cc:841] b: (常量)/job:localhost/replica:0/task:0/cpu:0 a: (常量): /job:localhost/replica:0/task:0/cpu:0 我

tensorflow/core/common_runtime/simple_placer.cc:841] 一个: (const)/job:localhost/replica:0/task:0/cpu:0

array([ 2., 4., 6.], dtype=float32)

3。 InvalidArgumentError:python cifar10_multi_gpu.py

​​>

I tensorflow/core/common_runtime/simple_placer.cc:669] 忽略设备 节点“tower_0/fifo_queue_Dequeue”的规范 /GPU:0 因为 来自“prefetch_queue/fifo_queue”的输入边是参考连接 并且已经有一个设备字段设置为 /CPU:0

Traceback(最近一次调用最后一次):文件 "/home/xx/anaconda3/lib/python3.5/site-packages/tensorflow/python/client/session.py", 第 1022 行,在 _do_call 中 返回 fn(*args)

文件 "/home/xx/anaconda3/lib/python3.5/site-packages/tensorflow/python/client/session.py", 第 1000 行,在 _run_fn self._extend_graph()

文件 "/home/xx/anaconda3/lib/python3.5/site-packages/tensorflow/python/client/session.py", 第 1049 行,在 _extend_graph self._session, graph_def.SerializeToString(), status)

文件“/home/xx/anaconda3/lib/python3.5/contextlib.py”,第 66 行,在 退出 下一个(self.gen)

文件 "/home/xx/anaconda3/lib/python3.5/site-packages/tensorflow/python/framework/errors_impl.py", 第 469 行,在 raise_exception_on_not_ok_status pywrap_tensorflow.TF_GetCode(status))

tensorflow.python.framework.errors_impl.InvalidArgumentError: 无法将设备分配给节点“tower_0/softmax_linear/weight_loss_1”: 无法满足明确的设备规范“/device:GPU:0” 因为没有支持 GPU 设备的内核可用。

[[节点:tower_0/softmax_linear/weight_loss_1 = 标量摘要[T=DT_FLOAT, _device="/device:GPU:0"](tower_0/softmax_linear/weight_loss_1/tags, tower_0/softmax_linear/weight_loss)]]

在处理上述异常的过程中,又发生了一个异常:

Traceback(最近一次调用最后一次):文件 “cifar10_multi_gpu_train.py”,第 280 行,在 tf.app.run() 文件“/home/xx/anaconda3/lib/python3.5/site-packages/tensorflow/python/platform/app.py”, 第 44 行,运行中 _sys.exit(main(_sys.argv[:1] + flags_passthrough))

文件“cifar10_multi_gpu_train.py”,第 276 行,在 main 火车()

文件“cifar10_multi_gpu_train.py”,第 237 行,在火车中 sess.run(init)

文件 "/home/xx/anaconda3/lib/python3.5/site-packages/tensorflow/python/client/session.py", 第 767 行,运行中 run_metadata_ptr)

文件 "/home/xx/anaconda3/lib/python3.5/site-packages/tensorflow/python/client/session.py", 第 965 行,在 _run feed_dict_string, options, run_metadata)

文件 "/home/xx/anaconda3/lib/python3.5/site-packages/tensorflow/python/client/session.py", 第 1015 行,在 _do_run 目标列表、选项、运行元数据)

文件 "/home/xx/anaconda3/lib/python3.5/site-packages/tensorflow/python/client/session.py", 第 1035 行,在 _do_call 中 raise type(e)(node_def, op, message)

tensorflow.python.framework.errors_impl.InvalidArgumentError: 无法将设备分配给节点“tower_0/softmax_linear/weight_loss_1”: 无法满足明确的设备规范“/device:GPU:0” 因为没有支持 GPU 设备的内核可用。

[[节点:tower_0/softmax_linear/weight_loss_1 = 标量摘要[T=DT_FLOAT, _device="/device:GPU:0"](tower_0/softmax_linear/weight_loss_1/tags, tower_0/softmax_linear/weight_loss)]]

我尝试了很多解决方案,但都失败了。感谢您提前提供任何建议。

【问题讨论】:

【参考方案1】:

抱歉,您遇到了问题!我咨询了该脚本的一位原作者,他的回复如下:

设备放置似乎效果不佳。

根据作者的测试,他检查了他可以访问“cpu:0”和“gpu:1”,但他从未检查过“gpu:0”。我会检查的。

作者还应在 SessionConfig 中设置 allow_soft_placement=True 以允许轻松放置设备。

【讨论】:

嗨,Pete Warden,非常感谢。然后关于您的回复: 首先,如果 allow_soft_placement 为 True,则脚本将使用 cpu 运行。但是我的任务不能用cpu运行,因为cpu太慢了,大约需要几个星期。 其次我不明白“他可以访问“cpu:0”和“gpu:1”但他从未检查过“gpu:0”,我的机器上有四个GPU。我设置了“ tf.device('/gpu:1')" ,还是失败了。 否则,您能否推荐一些可以为我成功运行的分布式 GPUS 示例。非常感谢。

以上是关于TensorFlow 多 GPU InvalidArgumentError:cifar10_multi_gpu.py的主要内容,如果未能解决你的问题,请参考以下文章

tensorflow使用horovod进行多gpu训练

TensorFlow 多 GPU InvalidArgumentError:cifar10_multi_gpu.py

具有推理功能的 TensorFlow + Keras 多 GPU 模型

tensorflow能不能gpu cpu 一起训练

TensorFlow 多 GPU MNIST 分类器:准确率低

Tensorflow - 多 GPU 不适用于模型(输入),也不适用于计算梯度