gpt4 book ai didi

TensorFlow 跨设备通信

转载 作者:行者123 更新时间:2023-12-04 00:36:00 26 4
gpt4 key购买 nike

正如 TensorFlow 论文所述,Tensorflow 的跨设备通信是通过在设备中添加“接收节点”和“发送节点”来实现的。

据我了解,设备(请考虑仅涉及 CPU 设备)负责执行操作的计算。但是,数据(例如:操作产生的张量,变量缓冲区)驻留在内存中。不知道如何实现从一台设备到另一台设备的数据传输 body .我猜数据传输是通过共享内存实现的。是对的吗?

我将不胜感激有关如何实现数据传输的任何解释/相应代码。
PS:TensorFlow paper link ,图4显示了跨设备通信机制。

最佳答案

在 TensorFlow 中,使用 Rendezvous 实现跨设备通信。接口(interface),它有多种不同的实现,具体取决于部署。该界面的注释描述了总体思路:

// A Rendezvous is an abstraction for passing a Tensor
// from a producer to a consumer, where the consumer may safely
// request the Tensor before or after it has been produced. A
// producer never blocks when using a Rendezvous. A consumer has the
// choice of making a blocking call or providing a callback: in either
// case, the consumer receives the Tensor as soon as it is available.

正如您在问题中提到的,TensorFlow 使用 Send 表示数据流图中的通信。和 Recv当图形跨设备分区时自动添加到图形中的操作。对于在不同设备上具有源和目标的每条边,图分区器插入一对 SendRecv共享相同“集合键”(自动生成的字符串名称,用作待通信的待通信张量集合点索引中的键)的操作。 implementation of the Send op很简单:它调用 Rendezvous::Send() ,传入它的集合键和单个输入张量,然后立即返回而不阻塞。 implementation of the Recv op稍微复杂一点:它注册一个回调,当具有给定键的张量可用时调用。那 callback负责“产生” Recv 的输出op,并解锁后续计算。
Rendezvous实现执行传输数据的实际工作:
  • IntraProcessRendezvous 在同一进程中处理设备之间的数据传输。如果(不太可能)在同一进程中的两个 CPU 设备之间进行传输,则可以通过 simple Tensor assignment 来实现传输。 .否则,TensorFlow kicks off特定于设备的 DMA 例程,用于在 CPU 和 GPU 设备之间传输数据。
  • BaseRemoteRendezvous 类及其子类在发送者和接收者可以在不同进程中的情况下处理跨设备通信。这个类的主要实现是 RpcRemoteRendezvous , 其中 uses gRPC处理远程传输。
  • 关于TensorFlow 跨设备通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40710224/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com