我在尝试获取 TensorFlow 时遇到了一个奇怪的问题map_fn
在我的 GPU 上运行。这是一个最小的损坏示例:
import numpy as np
import tensorflow as tf
with tf.Session() as sess:
with tf.device("/gpu:0"):
def test_func(i):
return i
test_range = tf.constant(np.arange(5))
test = sess.run(tf.map_fn(test_func, test_range, dtype=tf.float32))
print(test)
这会导致错误:
InvalidArgumentError:无法分配设备进行操作
“map/TensorArray_1”:无法满足显式设备规范
'' 因为该节点与一组需要的节点位于同一位置
不兼容的设备 '/device:GPU:0' Colocation 调试信息:Colocation
组具有以下类型和设备: TensorArrayScatterV3:CPU
TensorArrayGatherV3:GPU CPU 范围:GPU CPU TensorArrayWriteV3:CPU
TensorArraySizeV3:GPU CPU TensorArrayReadV3:CPU 输入:GPU CPU
TensorArrayV3:CPU 常量:GPU CPU
托管成员和用户请求的设备:
地图/TensorArrayStack/范围/增量(常量)
地图/TensorArrayStack/范围/开始(常量)地图/TensorArray_1
(TensorArrayV3)映射/while/TensorArrayWrite/TensorArrayWriteV3/Enter
(输入)/设备:GPU:0地图/TensorArrayStack/TensorArraySizeV3
(TensorArraySizeV3)地图/TensorArrayStack/范围(范围)
地图/TensorArrayStack/TensorArrayGatherV3 (TensorArrayGatherV3)
地图/TensorArray (TensorArrayV3) 地图/while/TensorArrayReadV3/Enter
(输入)/设备:GPU:0常量(常量)/设备:GPU:0
地图/TensorArrayUnstack/TensorArrayScatter/TensorArrayScatterV3
(TensorArrayScatterV3) /设备:GPU:0 地图/while/TensorArrayReadV3
(TensorArrayReadV3) /设备:GPU:0
映射/while/TensorArrayWrite/TensorArrayWriteV3 (TensorArrayWriteV3)
/设备:GPU:0
[[节点:map/TensorArray_1 = TensorArrayV3clear_after_read=true,
dtype = DT_FLOAT,dynamic_size = false,element_shape =,
相同的元素形状=真,
张量数组名称=“”]]
在我的 CPU 上运行时,代码的行为符合预期,并且执行简单操作,例如:
import numpy as np
import tensorflow as tf
with tf.Session() as sess:
with tf.device("/gpu:0"):
def test_func(i):
return i
test_range = tf.constant(np.arange(5))
test = sess.run(tf.add(test_range, test_range))
print(test)
在我的 GPU 上运行良好。这个帖子 https://stackoverflow.com/questions/47045026/is-there-a-way-to-use-tensorflow-map-fn-on-gpu似乎描述了类似的问题。有人有什么建议吗?该帖子的答案意味着map_fn
在 GPU 上应该可以正常工作。我在 Arch Linux 上的 Python 3.6.4 上运行 TensorFlow 1.8.0 版本,在 GeForce GTX 1050 上运行 CUDA 版本 9.0 和 cuDNN 版本 7.0。
Thanks!