使用策略#
Flower 允许通过 Strategy
抽象类对学习过程进行完全定制。核心框架中提供了许多内置策略。
有三种方法可以自定义 Flower 在服务器端协调学习过程的方式:
使用现有策略,例如
FedAvg
使用回调函数定制现有策略
实施新策略
使用现有策略#
Flower 内置了许多流行的联邦学习策略。内置策略的实例化方法如下:
import flwr as fl
strategy = fl.server.strategy.FedAvg()
fl.server.start_server(config=fl.server.ServerConfig(num_rounds=3), strategy=strategy)
这会创建一个所有参数都保持默认值的策略,并将其传递给 start_server
函数。通常建议在实例化过程中调整一些参数:
import flwr as fl
strategy = fl.server.strategy.FedAvg(
fraction_fit=0.1, # Sample 10% of available clients for the next round
min_fit_clients=10, # Minimum number of clients to be sampled for the next round
min_available_clients=80, # Minimum number of clients that need to be connected to the server before a training round can start
)
fl.server.start_server(config=fl.server.ServerConfig(num_rounds=3), strategy=strategy)
使用回调函数定制现有策略#
现有的策略提供了多种自定义行为的方法。回调函数允许策略在执行过程中调用用户提供的代码。
配置客户匹配和客户评估#
服务器可以通过向 on_fit_config_fn
提供一个函数,在每一轮向客户端传递新的配置值。提供的函数将被策略调用,并且必须返回一个配置键值对的字典,该字典将被发送到客户端。在每一轮联邦学习期间,它必须返回一个任意配置值 dictionary :code:`client.fit`和 :code:`client.evaluate`函数。
import flwr as fl
def get_on_fit_config_fn() -> Callable[[int], Dict[str, str]]:
"""Return a function which returns training configurations."""
def fit_config(server_round: int) -> Dict[str, str]:
"""Return a configuration with static batch size and (local) epochs."""
config = {
"learning_rate": str(0.001),
"batch_size": str(32),
}
return config
return fit_config
strategy = fl.server.strategy.FedAvg(
fraction_fit=0.1,
min_fit_clients=10,
min_available_clients=80,
on_fit_config_fn=get_on_fit_config_fn(),
)
fl.server.start_server(config=fl.server.ServerConfig(num_rounds=3), strategy=strategy)
on_fit_config_fn`可用于将任意配置值从服务器传递到客户端,并在每一轮改变这些值,例如,调整学习率。客户端将在自己的 :code:`client.fit()
函数中接收 on_fit_config_fn
返回的字典。
与 on_fit_config_fn
类似,还有 on_evaluate_config_fn
用于定制发送到 client.evaluate()
的配置
配置服务器端评估#
服务器端评估可通过向 evaluate_fn
传递评估函数来启用。
实施新策略#
编写完全自定义的策略涉及的内容较多,但灵活性最高。阅读 `实施策略 <how-to-implement-strategies.html>_ 指南,了解更多信息。