系统信息
- 是否编写了自定义代码(与使用TensorFlow提供的库存示例脚本相反):是
- OS平台和发行版(例如,Linux Ubuntu 16.04):Linux Ubuntu 20.04
- 从哪里安装的TensorFlow(源代码或二进制文件):二进制文件
- TensorFlow版本(请使用以下命令):v1.12.1-69032-gfb972503145 2.8.0-dev20211220
- Python版本:3.9
- Bazel版本(如果从源代码编译):3.7.2
描述当前行为
当使用具有2个物理显卡的PluggableDevice插件时,会调用memcpy_dtod
函数。然而,即使src
和dst
内存区域来自不同的设备,该函数也只有一个SP_Device
作为参数。
描述预期行为
在进行跨适配器复制的情况下,memcpy_dtod
函数应该有两个SP_Device
参数,以便给插件一个处理跨设备复制的机会。
- 您是否想提交PR?(是/否):是
- 如果要贡献,简要描述您的候选解决方案:添加一个用于跨设备内存复制的
memcpy_dtod_cross_adapter
函数,或者向memcpy_dtod
添加第二个SP_Device
参数(尽管后者不会向后兼容)。
重现问题的独立代码
import tensorflow as tf
tf.compat.v1.disable_eager_execution()
a = tf.compat.v1.placeholder(dtype=tf.float32, shape=[3,1])
a_values = [[1],[2],[3]]
b = tf.compat.v1.placeholder(dtype=tf.float32, shape=[3,1])
b_values = [[4],[6],[11]]
c = tf.compat.v1.placeholder(dtype=tf.float32, shape=[1,3])
c_values = [[2,4,5]]
with tf.device("/device:CUSTOM:0"):
y1 = tf.raw_ops.AddN(inputs=[a,b], name="MyAdd")
with tf.device("/device:CUSTOM:1"):
y2 = tf.raw_ops.MatMul(a=y1, b=c, name="MyMultiply")
with tf.compat.v1.Session(config=tf.compat.v1.ConfigProto(log_device_placement=True)) as s:
print(s.run(y2, feed_dict={a:a_values, b:b_values, c:c_values}))
4条答案
按热度按时间o3imoua41#
为了加快这里的故障排除过程,你能请填写问题 template 吗?
谢谢!
nbewdwxp2#
谢谢,我已经使用模板更新了问题。
pod7payv3#
感谢您的更新!
我们看到您正在使用
TF v1.12
,但它不再受到积极支持。请问您是否可以升级到TF v2.4. or later
(仅供参考,最新稳定的 TensorFlow 版本为 2.7.0)?这个
tf.compat.v1.Session
API 是专为 TensorFlow v1 设计的。请查看此 details 以了解如何将此 API 迁移到与原生 TensorFlow v2 等效的内容。有关如何迁移其余代码的说明,请参阅 TensorFlow v1 到 TensorFlow v2 migration guide。请查看此 thread。由于
TensorFlow version 1.x
已超出支持窗口,因此对于任何进一步的问题,请在此 TF Forum 中发布此问题,以便有更大的社区来提供帮助。谢谢!ecfdbz9o4#
我使用的不是1.12版本,而是2.8.0-dev20211220(之前也使用过2.7.0,遇到了同样的问题)。这是一个特定于PluggableDevice的问题,属于TensorFlow 2的一个特性。