首页 > 解决方案 > Tensorflow federated:如何将远程工作人员与 iterative_process.next 中的远程数据集映射?

问题描述

我想将 federated_train_data 指向远程客户端数据,如下面的代码所示。这可能吗?如何 ?

如果不是我需要进一步实施来尝试这个。请指出我的相关代码。

factory = tff.framework.create_executor_factory(make_remote_executor)
context = tff.framework.ExecutionContext(factory)
tff.framework.set_default_context(context)

state = iterative_process.initialize()

state, metrics = iterative_process.next(state, federated_train_data)
def make_remote_executor(inferred_cardinalities):
  """Make remote executor."""

  def create_worker_stack(ex):
    ex = tff.framework.ThreadDelegatingExecutor(ex)
    return tff.framework.ReferenceResolvingExecutor(ex)

  client_ex = []
  num_clients = inferred_cardinalities.get(tff.CLIENTS, None)
  if num_clients:
    print('Inferred that there are {} clients'.format(num_clients))
  else:
    print('No CLIENTS placement provided')

  for _ in range(num_clients or 0):
    channel = grpc.insecure_channel('{}:{}'.format(FLAGS.host, FLAGS.port))
    remote_ex = tff.framework.RemoteExecutor(channel, rpc_mode='STREAMING')
    worker_stack = create_worker_stack(remote_ex)
    client_ex.append(worker_stack)

  federating_strategy_factory = tff.framework.FederatedResolvingStrategy.factory(
      {
          tff.SERVER: create_worker_stack(tff.framework.EagerTFExecutor()),
          tff.CLIENTS: client_ex,
      })
  unplaced_ex = create_worker_stack(tff.framework.EagerTFExecutor())
  federating_ex = tff.framework.FederatingExecutor(federating_strategy_factory,
                                                   unplaced_ex)
  return tff.framework.ReferenceResolvingExecutor(federating_ex)

这是来自https://github.com/tensorflow/federated/blob/master/tensorflow_federated/python/examples/remote_execution/remote_executor_example.py

标签: tensorflow-federated

解决方案


在链接的示例中,您可以看到客户端数据来自函数tf.data.Dataset生成的每个客户端。make_federated data

客户端数据可以以可序列化的形式提供,tf.data.Dataset或者根据您定义迭代过程的方式,您可以tff.federated_map使用 TensorFlow 将一些输入数据(例如客户端 ID)输入数据集。

请注意,RemoteExecutors 并非旨在针对“客户端”上的数据运行,即远程执行器本身。或许可以使用 TensorFlow 代码以这种方式将数据从远程执行程序的文件系统读取到数据集中,但通常这不是受支持的用例。tf.data.Dataset处理客户端数据的推荐方法是使用 TensorFlow 计算,该计算可以基于客户端 ID 或客户端 TensorFlow 计算的其他输入生成表示客户端数据的表示。


推荐阅读