数据科学

NVIDIA FLARE 助力联邦 XGBoost 实现实用高效

XGBoost 是一种高效且可扩展的机器学习算法,广泛应用于回归、分类和排名任务。它基于梯度提升原则,将多个弱学习者(通常是决策树)的预测结合起来,以生成稳健的整体模型。

XGBoost 在处理大型数据集和复杂数据结构方面表现优异,这要归功于其高效的实施和高级功能,如正则化、并行处理和处理缺失值。其通用性和高性能使其成为各行各业数据科学竞赛和实际应用的热门选择。

XGBoost 1.7.0 版本引入了 Federated XGBoost,使多个机构能够无需移动数据即可联合训练 XGBoost 模型。在 XGBoost 2.0.0 版本中,此功能得到进一步增强,以支持垂直联合学习。OSS Federated XGBoost 提供 Python APIs 用于模拟基于 XGBoost 的联合训练。

自 2023 年以来,NVIDIA 联邦学习应用程序运行时环境 (FLARE) 引入了与联邦 XGBoost 功能的内置集成:horizontal histogram-based 和 tree-based XGBoost,以及 垂直 XGBoost。作为垂直训练的预备步骤,我们还添加了对用于样本比对的 私隐集合交集 (PSI) 的支持。

借助这些集成,您可以在生产或模拟中准备和运行联邦 XGBoost 作业,而无需编写代码,只需为作业和数据加载功能提供数据集位置、训练参数和 NVIDIA FLARE 配置。

在本文中,我们将重点介绍 NVIDIA FLARE 2.4.1 在现实世界中用于联合 XGBoost 学习的主要功能,要高效地进行现实世界中的联合训练,您必须能够执行以下操作:

  • 使用不同的实验、特征组合或数据集运行多个并发 XGBoost 训练实验。
  • 处理由于不可靠的网络条件或中断而导致的潜在实验失败。
  • 通过 MLflow 或 Weights&Biases 等跟踪系统监控实验进展。

同时并发运行多个实验

数据科学家通常必须评估各种超参数或特征对模型的影响。他们使用同一模型试验不同的特征或特征组合。

NVIDIA FLARE 并行作业执行功能使您能够并行执行这些实验,从而显著减少训练所需的时间。NVIDIA FLARE 代表用户管理通信多路复用,不需要为每个作业打开新端口(通常由 IT 支持部门完成)。

图 1 显示了 NVIDIA FLARE 中两个联邦 XGBoost 作业的执行情况。

Chart shows that each job has two clients shown as two visible curves.
图 1、两个具有一组独特功能的并发 XGBoost 作业.每个作业都有两个客户端,显示为两条可见曲线

XGBoost 容错训练

在处理跨地区或跨国界训练时,网络的可靠性可能低于企业网络,从而导致定期中断,这些中断会导致通信失败,导致作业中断,并需要从头开始或从保存的快照重启。

用于 XGBoost 的 NVIDIA FLARE 通信器的可靠性功能可在网络中断期间自动处理消息重试,从而确保弹性并保持学习连续性和数据完整性 (图 2)。

NVIDIA FLARE 无缝集成,可促进不同 XGBoost 联邦服务器和客户端之间的通信,为联邦学习提供强大而高效的解决方案。

Diagram shows that XGBoost communication is replaced with NVIDIA FLARE communication.
图 2.XGBoost 通信通过 NVIDIA FLARE Communicator 层进行路由

如需了解更多信息和端到端示例,请参阅/NVIDIA/NVFlare GitHub 资源库。

视频 1.采用 NVIDIA FLARE 的联合 XGBoost

联邦实验跟踪

在进行机器学习训练时,尤其是在联邦学习等分布式环境中,密切监控训练和评估指标至关重要。

NVIDIA FLARE 提供与实验追踪系统 (MLflow、Weights&Biases 和 TensorBoard) 的内置集成,以促进对这些指标的全面监控。

Diagram shows centralized metrics streaming with FL clients streaming to the FL server and out to the tracking systems, compared to decentralized metrics streaming, where the clients stream directly to the tracking systems.
图 3.指标流式传输到 FL 服务器或客户端,并交付到不同的实验跟踪系统

借助 NVIDIA FLARE,您可以在分布式和集中式追踪配置之间进行选择:

  • 去中心化追踪:每个客户端在本地管理自己的指标和实验追踪服务器,维护训练指标隐私,这种设置限制了在不同站点之间比较数据的能力。
  • 集中式追踪:所有指标都会流式传输到中央 FL 服务器,然后由后者将数据推送到选定的追踪系统,这样设置支持有效的跨站点指标比较

借助 NVIDIA FLARE 作业配置,您可以选择最适合您需求的追踪场景或系统。当用户需要从一个实验追踪系统迁移到另一个实验追踪系统时,使用 NVIDIA FLARE,您可以修改作业配置,而无需重新编写实验追踪代码。

要添加 MLflow、Weights&Bias 或 TensorBoard 日志记录以高效地将指标流式传输到相应的服务器,只需要三行代码:

from nvflare.client.tracking import MLflowWriter

mlflow = MLflowWriter()

mlflow.log_metric("loss", running_loss / 2000, global_step)

借助 Nvflare.client.tracking API,您可以灵活地将日志记录指标重定向到任何目标,因为您可以将收集的指标流式传输到任何受支持的实验跟踪系统,不管使用 MLflowWeights&BiasesTensorBoard 语法。选择使用 MLflowWriterWandBWriterTBWriter 是基于您现有的代码和要求。

  • MLflowWriter使用 MLflow API 操作log_metric.
  • TBWriter使用 TensorBoard SummaryWriter 操作add_scalar.
  • WandBWriter使用 API 操作,log.

根据您现有的代码或对这些系统的熟悉程度,您可以选择任何 Writer。修改训练代码后,您可以使用 NVIDIA FLARE 作业配置配置系统以适当流式传输日志。

有关更多信息,请参阅FedAvg with SAG 工作流程和 MLflow 跟踪教程。

总结

在本文中,我们详细介绍了 NVIDIA FLARE 2.4.x 的可靠 XGBoost 和实验跟踪支持功能。有关更多信息,请参阅GitHub 上的/NVIDIA/NVFlare 2.4 分支NVIDIA FLARE 2.4 文档

有任何问题或评论?请通过federatedlearning@nvidia.com与我们联系。

 

 

Tags