TFF:远程执行器

问题描述

我们正在将Server和Client设置在不同的物理计算机上的联合方案。

Setup Diagram

在服务器上,我们使用了docker容器来启动:

enter image description here

以上内容是从Kubernetes tutorial借来的。 我们相信这会创建一个“本地执行器” [Ref 1],有助于创建gRPC服务器[Ref 2]。

参考文献1:

enter image description here

参考2:

enter image description here

接下来,在客户端1上,我们调用了连接到gRPC服务器的tff.framework.RemoteExecutor。

enter image description here

基于上述内容,我们的理解是远程执行器在连接到gRPC服务器的客户端上运行。

假设以上内容正确,我们该如何发送

tff.tf_computation

从服务器到客户端,然后在客户端打印输出,以确保整个设置工作正常。

解决方法

您的理解绝对正确。

如果直接构造一个ExecutorFactory(如上面的代码中的情况),则将其传递给tff.framework.set_default_context将安装您的远程堆栈,作为在TFF运行时中执行计算的默认机制。另外,如果需要,您还应该能够将适当的通道传递给tff.backends.native.set_remote_execution_context来处理远程执行程序的构造和上下文安装,但是您的操作方式当然可以正常工作,并且可以进行更大的自定义。

设置好之后,端到端运行示例应该非常简单。我们将建立一个计算,该计算采用一组联合整数,在客户端上打印,并将这些整数加起来。让:

@tff.tf_computation(tf.int32)
def print_and_return(x):
  # We must use tf.print here,as this logic will be
  # serialized and run on the clients as TensorFlow.
  tf.print('hello world')
  return x

@tff.federated_computation(tff.FederatedType(tf.int32,tff.CLIENTS))
def print_and_sum(federated_arg):
  same_ints = tff.federated_map(print_and_return,federated_arg)
  return tff.federated_sum(same_ints)

假设我们有N个客户;我们只需实例化联合整数集,然后调用我们的计算即可。

federated_ints = [1] * N
total = print_and_sum(federated_ints)
assert total == N

这应该使上面定义的tf.prints在远程计算机上运行;只要tf.print被定向到您可以监视的输出流,您就应该能够看到它。

PS:您可能会注意到上面的联邦总和是不必要的;必然是。只需将身份函数与序列化打印件映射即可达到相同的效果。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...