Tensorflow交叉设备通信

kz2*_*z28 5 tensorflow tensorflow-serving

正如张量流论文所述,Tensorflow的跨设备通信是通过将"接收节点"和"发送节点"添加到设备中来实现的.

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

我将理解有关如何实现数据传输的任何解释/相应代码.PS:TensorFlow纸张链接,图4显示了跨设备通信机制.

mrr*_*rry 11

在TensorFlow中,使用Rendezvous接口实现跨设备通信,该接口具有多种不同的实现,具体取决于部署.该界面的评论描述了一般的想法:

// 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.
Run Code Online (Sandbox Code Playgroud)

正如您在问题中所述,TensorFlow表示数据流图中的通信,使用SendRecvops在图表跨设备分区时自动添加到图表中.对于在不同设备上具有源和目标的每个边,图分区器插入一对SendRecvops共享相同的"会合密钥"(一个自动生成的字符串名称,用作待处理张量的集合点的索引)被传达).op实现Send很简单:它调用Rendezvous::Send(),传入它的集合键和单输入张量,然后立即返回而不会阻塞.op实现Recv稍微复杂一些:它在具有给定键的张量变得可用时注册要调用的回调.该回调负责"生成" Recvop 的输出,并解除后续计算的阻塞.

Rendezvous实现执行传送数据的实际工作:

  • IntraProcessRendezvous处理同一进程中设备之间的数据传输.在(不太可能)事件中,传输在同一进程中的两个CPU设备之间,可以通过简单的Tensor分配来实现传输.否则,TensorFlow将启动特定于设备的DMA例程,以在CPU和GPU设备之间传输数据.

  • BaseRemoteRendezvous类及其子类处理,所述发送器和接收器可以在不同的处理的情况下的跨设备的通信.该类的主要实现是RpcRemoteRendezvous,它使用gRPC来处理远程传输.