联邦学习#

客户端基类#

class monai.fl.client.BaseClient[source]#

提供一个抽象基类,允许客户端返回数据的汇总统计信息。

要定义新的统计脚本,请从此类继承并实现以下抽象方法

- self.get_data_stats()

initialize()、abort() 和 finalize() – 继承自 ClientAlgoStats;可以可选地实现以帮助管理类对象的生命周期。

abort(extra=None)[source]#

调用此方法以中止 ClientAlgo 训练或评估。

参数:

extra – 包含 FL 系统可提供的附加信息的字典。

finalize(extra=None)[source]#

调用此方法以结束 ClientAlgo 类。

参数:

extra – 包含 FL 系统可提供的附加信息的字典。

initialize(extra=None)[source]#

调用此方法以初始化 ClientAlgo 类。

参数:

extra – 可选的额外信息,例如 ExtraItems.CLIENT_NAME 和/或 ExtraItems.APP_ROOT 的字典。

class monai.fl.client.ClientAlgo[source]#

提供一个抽象基类,用于定义可在任何平台上运行的 algo。要定义新的 algo 脚本,请从此类继承并实现以下抽象方法

  • self.train()

  • self.get_weights()

  • self.evaluate()

  • self.get_data_stats() (可选,继承自 ClientAlgoStats

initialize()、abort() 和 finalize() - 继承自 ClientAlgoStats - 可以选择实现以帮助管理类对象的生命周期。

evaluate(data, extra=None)[source]#

获取测试数据的评估指标。

参数:
  • data – 包含用于评估的网络权重的 ExchangeObject。

  • extra – 包含 FL 系统可提供的附加信息的字典。

返回:

包含评估指标的 ExchangeObject。

返回类型:

metrics

get_weights(extra=None)[source]#

获取当前本地权重或权重差异。

参数:

extra – 包含 FL 系统可提供的附加信息的字典。

返回:

当前本地权重或权重差异。

返回类型:

ExchangeObject

ExchangeObject 示例

ExchangeObject(
    weights = self.trainer.network.state_dict(),
    optim = None,  # could be self.optimizer.state_dict()
    weight_type = WeightType.WEIGHTS
)
train(data, extra=None)[source]#

训练网络并从训练数据生成新网络。

参数:
  • data – 包含用于训练的当前网络权重的 ExchangeObject。

  • extra – 包含 FL 系统可提供的附加信息的字典。

返回:

None

class monai.fl.client.ClientAlgoStats[source]#
get_data_stats(extra=None)[source]#

获取本地数据的汇总统计信息。

参数:

extra – 包含 FL 系统可提供的附加信息的字典。例如,请求的统计信息。

返回:

汇总统计信息。

返回类型:

ExchangeObject

Extra dict 示例

requested_stats = {
    FlStatistics.STATISTICS: metrics,
    FlStatistics.NUM_OF_BINS: num_of_bins,
    FlStatistics.BIN_RANGES: bin_ranges
}

返回的 ExchangeObject 示例

ExchangeObject(
    statistics = {...}
)

MONAI Bundle 参考实现#

class monai.fl.client.MonaiAlgo(bundle_root, local_epochs=1, send_weight_diff=True, config_train_filename='configs/train.json', train_kwargs=None, config_evaluate_filename='default', eval_kwargs=None, config_filters_filename=None, disable_ckpt_loading=True, best_model_filepath='models/model.pt', final_model_filepath='models/model_final.pt', save_dict_key='model', data_stats_transform_list=None, eval_workflow_name=None, train_workflow=None, eval_workflow=None)[source]#

这是 ClientAlgo 的实现,允许使用 MONAI bundle 配置进行联邦学习。

参数:
  • bundle_root – bundle 的目录路径。

  • local_epochs – 在每轮本地训练中执行的本地 epoch 数量;默认为 1。

  • send_weight_diff – 是否发送权重差异而不是完整权重;默认为 True

  • config_train_filename – 相对于 bundle_root 的 bundle 训练配置文件路径。可以是一个文件列表。默认为 “configs/train.json”。仅当 train_workflow 为 None 时有用。

  • train_kwargs – 训练的 ConfigWorkflow 的其他参数,除了 config_filemeta_filelogging_fileworkflow_type。仅当 train_workflow 为 None 时有用。

  • config_evaluate_filename – 相对于 bundle_root 的 bundle 评估配置文件路径。可以是一个文件列表。如果为 “default”,将使用 [“configs/train.json”, “configs/evaluate.json”]。此参数仅当 eval_workflow 为 None 时有用。

  • eval_kwargs – 评估的 ConfigWorkflow 的其他参数,除了 config_filemeta_filelogging_fileworkflow_type。仅当 eval_workflow 为 None 时有用。

  • config_filters_filename – 过滤器配置文件。可以是一个文件列表;默认为 None

  • disable_ckpt_loading – 如果在训练/评估配置中定义了 CheckpointLoader,则不使用任何 CheckpointLoader;默认为 True

  • best_model_filepath – 最佳模型检查点的位置;默认为相对于 bundle_root 的 “models/model.pt”。

  • final_model_filepath – 最终模型检查点的位置;默认为相对于 bundle_root 的 “models/model_final.pt”。

  • save_dict_key – 如果模型检查点包含多个状态字典,则 save_dict_key 定义的那个将由 get_weights 返回;默认为 “model”。如果应返回所有状态字典,请将 save_dict_key 设置为 None。

  • data_stats_transform_list – 用于数据统计结果的变换列表。

  • eval_workflow_name – 对应于 “config_evaluate_filename” 的工作流名称,默认为 “train”,因为默认的 “config_evaluate_filename” 会覆盖训练工作流配置。此参数仅当 eval_workflow 为 None 时有用。

  • train_workflow – 用于执行训练的 bundle 工作流,如果为 None,将基于 config_train_filenametrain_kwargs 内部创建一个 ConfigWorkflow

  • eval_workflow – 用于执行评估的 bundle 工作流,如果为 None,将基于 config_evaluate_filenameeval_kwargseval_workflow_name 内部创建一个 ConfigWorkflow

abort(extra=None)[source]#

中止训练或评估。 :param extra: 包含 FL 系统可提供的附加信息的字典。

evaluate(data, extra=None)[source]#

在客户端的本地数据上进行评估。

参数:
  • data – 包含当前全局模型权重的 ExchangeObject

  • extra – 包含 FL 系统可提供的附加信息的字典。

返回:

包含评估指标的 ExchangeObject

返回类型:

return_metrics

finalize(extra=None)[source]#

结束训练或评估。 :param extra: 包含 FL 系统可提供的附加信息的字典。

get_weights(extra=None)[source]#

返回模型的当前权重。

参数:

extra – 包含 FL 系统可提供的附加信息的字典。

返回:

包含当前权重的 ExchangeObject(默认)

或从磁盘加载请求的模型类型(ModelType.BEST_MODELModelType.FINAL_MODEL)。

返回类型:

return_weights

initialize(extra=None)[source]#

初始化例程,用于解析配置文件并提取主要组件,如训练器、评估器和过滤器。

参数:

extra – 包含 FL 系统应提供的附加信息的字典,即 ExtraItems.CLIENT_NAMEExtraItems.APP_ROOTExtraItems.LOGGING_FILE。通过将 {ExtraItems.LOGGING_FILE} 设置为 False,可以禁用 monai bundle 中的日志记录逻辑。

train(data, extra=None)[source]#

在客户端的本地数据上进行训练。

参数:
  • data – 包含当前全局模型权重的 ExchangeObject

  • extra – 包含 FL 系统可提供的附加信息的字典。

class monai.fl.client.MonaiAlgoStats(bundle_root, config_train_filename='configs/train.json', config_filters_filename=None, data_stats_transform_list=None, histogram_only=False, workflow=None)[source]#

这是 ClientAlgoStats 的实现,允许使用 MONAI bundle 配置进行联邦学习。

参数:
  • bundle_root – bundle 的目录路径。

  • config_train_filename – 相对于 bundle_root 的 bundle 训练配置文件路径。可以是一个文件列表;默认为 “configs/train.json”。仅当 workflow 为 None 时有用。

  • config_filters_filename – 过滤器配置文件。可以是一个文件列表;默认为 None

  • data_stats_transform_list – 用于数据统计结果的变换列表。

  • histogram_only – 是否仅计算直方图。默认为 False。

  • workflow – 要执行的 bundle 工作流,通常是训练、评估或推理。如果为 None,将基于 config_train_filename 内部创建一个 ConfigWorkflow

get_data_stats(extra=None)[source]#

返回有关本地数据的汇总统计信息。

参数:

extra – 包含 FL 系统可提供的附加信息的字典。必须同时提供 FlStatistics.HIST_BINS 和 FlStatistics.HIST_RANGE。

返回:

包含汇总统计信息的 ExchangeObject。

返回类型:

stats

initialize(extra=None)[source]#

初始化例程,用于解析配置文件并提取主要组件,如训练器、评估器和过滤器。

参数:

extra – 包含 FL 系统应提供的附加信息的字典,即 ExtraItems.CLIENT_NAMEExtraItems.APP_ROOTExtraItems.LOGGING_FILE。通过将 {ExtraItems.LOGGING_FILE} 设置为 False,可以禁用 monai bundle 中的日志记录逻辑。