Tensorflow federated:如何在iteration_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函数生成的每个客户端的tf.data.Dataset

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

注意,远程执行器不是设计成针对数据";在客户端上";,即远程执行器本身。它们可能可以通过使用TensorFlow代码将数据从远程执行器的文件系统读取到数据集中来使用,但通常情况下,这不是一个受支持的用例。处理客户端数据的推荐方式是具有TensorFlow计算,该计算可以基于客户端ID或客户端的TensorFlow运算的其他输入来生成表示客户端数据的tf.data.Dataset

最新更新