Tensorflow联合:如何在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

解决方法

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

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

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

相关问答

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