tensorflow [PluggableDevice] 支持跨设备复制

sqxo8psd  于 5个月前  发布在  其他
关注(0)|答案(4)|浏览(43)

系统信息

  • 是否编写了自定义代码(与使用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函数。然而,即使srcdst内存区域来自不同的设备,该函数也只有一个SP_Device作为参数。

描述预期行为

在进行跨适配器复制的情况下,memcpy_dtod函数应该有两个SP_Device参数,以便给插件一个处理跨设备复制的机会。

Contributing

  • 您是否想提交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}))
o3imoua4

o3imoua41#

为了加快这里的故障排除过程,你能请填写问题 template 吗?
谢谢!

nbewdwxp

nbewdwxp2#

谢谢,我已经使用模板更新了问题。

pod7payv

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 中发布此问题,以便有更大的社区来提供帮助。谢谢!

ecfdbz9o

ecfdbz9o4#

我使用的不是1.12版本,而是2.8.0-dev20211220(之前也使用过2.7.0,遇到了同样的问题)。这是一个特定于PluggableDevice的问题,属于TensorFlow 2的一个特性。

相关问题