【问题标题】:TFF: Remote ExecutorTFF:远程执行器
【发布时间】:2020-10-15 15:32:32
【问题描述】:

我们正在不同物理机器上设置服务器和客户端的联合场景。

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

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

参考 1:

参考 2:

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

基于上述我们的理解是,Remote Executor 运行在连接 gRPC 服务器的客户端上。

假设以上是正确的,我们如何发送一个

tff.tf_computation

从服务器到客户端并在客户端打印输出以确保整个设置正常运行。

【问题讨论】:

    标签: tensorflow-federated


    【解决方案1】:

    你的理解绝对正确。

    如果您直接构造一个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:您可能会注意到上面的联合总和是不必要的;那当然是。只需将标识函数与序列化打印映射即可获得相同的效果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-05
      • 2014-11-05
      • 2018-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-24
      相关资源
      最近更新 更多