升级至 Flower 1.0#
Flower 1.0 正式发布。除了新功能,Flower 1.0 还为未来的发展奠定了稳定的基础。与 Flower 0.19(以及其他 0.x 系列版本)相比,有一些破坏性改动需要修改现有 0.x 系列项目的代码。
安装更新#
下面介绍如何使用 pip 或 Poetry 将现有安装更新到 Flower 1.0:
所需变更#
以下更改需要手动更新。
一般情况#
将所有参数作为关键字参数传递(而不是位置参数)。下面是一个例子:
Flower 0.19 (位置参数):
start_client("127.0.0.1:8080", FlowerClient())
Flower 1.0(关键字参数):
start_client(server_address="127.0.0.1:8080", client=FlowerClient())
客户端#
NumPyClient的子类:将``def get_parameters(self):
`改为``def get_parameters(self,config):
客户端 "的子类:将 "get_parameters(self): "改为 "get_parameters(self, ins: GetParametersIns):"
策略 / start_server
/ start_simulation
#
向
start_server
和 ``start_simulation` 传递 ``ServerConfig``(而不是 dictionary)。下面是一个例子:Flower 0.19:
start_server(..., config={"num_rounds": 3, "round_timeout": 600.0}, ...)
Flower 1.0:
start_server(..., config=flwr.server.ServerConfig(num_rounds=3, round_timeout=600.0), ...)
将`start_simulation``中的`num_rounds=1``替换为新的`config=ServerConfig(...)`(参见前一项)
删除调用
start_server
时的 ``force_final_distributed_eval` 参数。可以通过配置策略,在最后一轮训练后对所有客户端进行抽样评估,从而启用对所有客户端的分布式评估。重命名参数/数组转换函数:
parameters_to_weights
-->parameters_to_ndarrays
weights_to_parameters
-->ndarrays_to_parameters
策略初始化:如果策略依赖于
fraction_fit
和fraction_evaluate
的默认值,请手动将fraction_fit
和fraction_evaluate
设置为0.1
。未手动创建策略的项目(调用start_server` 或 ``start_simulation` 时未传递策略实例)现在应手动初始化 FedAvg,并将 `fraction_fit` 和 `fraction_evaluate` 设为 `0.1
。重命名内置策略参数(例如,FedAvg`):
fraction_eval
-->fraction_evaluate
min_eval_clients
-->min_evaluate_clients
eval_fn
-->evaluate_fn
将 rnd 更名为 server_round。这会影响多个方法和函数,例如
configure_fit
、aggregate_fit
、configure_evaluate
、aggregate_evaluate` 和evaluate_fn
。在 ``evaluate_fn` 中添加 ``server_round` 和 ``config`:
Flower 0.19:
def evaluate(parameters: NDArrays) -> Optional[Tuple[float, Dict[str, Scalar]]]:
Flower 1.0:
def evaluate(server_round: int, parameters: NDArrays, config: Dict[str, Scalar]) -> Optional[Tuple[float, Dict[str, Scalar]]]:
定制策略#
参数``failures``的类型已从``List[BaseException]``变为``List[Union[Tuple[ClientProxy, FitRes], BaseException]]``(在``agregate_fit``中)和``List[Union[Tuple[ClientProxy, EvaluateRes], BaseException]]``(在``agregate_evaluate``中)
``Strategy``方法 的``evaluate``现在会接收当前一轮联邦学习/评估作为第一个参数:
Flower 0.19:
def evaluate(self, parameters: Parameters) -> Optional[Tuple[float, Dict[str, Scalar]]]:`
Flower 1.0:
def evaluate(self, server_round: int, parameters: Parameters) -> Optional[Tuple[float, Dict[str, Scalar]]]:
可选的改进措施#
除了上述必要的改动之外,还有一些潜在的改进措施:
删除
Client
或NumPyClient
子类中的 "占位符 "方法。例如,如果你使用服务器端评估,那么就不再需要``evaluate``的 "空占位符 "实现。通过
start_simulation
配置循环超时:start_simulation(..., config=flwr.server.ServerConfig(num_rounds=3, round_timeout=600.0), ...)
更多帮助#
大多数官方的 Flower 代码示例 已经更新到 Flower 1.0,它们可以作为使用 Flower 1.0 API 的参考。如果还有其他问题,请加入 Flower Slack <https://flower.ai/join-slack/>`_ 并使用 "#questions``"。