查看原文
其他

【源头活水】联邦学习:FedML 开源库介绍

偶然看到一篇《FedML: A Research Library and Benchmark for Federated Machine Learning》推荐给大家了解联邦学习。

作者:lokinko

地址:https://www.zhihu.com/people/qu-xiang-mou


文章来源:https://arxiv.org/pdf/2007.13518.pdf


01

摘要

现有的库无法满足研究所需的各种算法开发(例如各种信息交换),并且由于实验使用的数据集不一致,导致难以进行公平的对比。本文介绍了 FedML —— 能够支持分布式训练、移动设备训练和单机仿真训练的开放库。


02

介绍

联邦学习是一种分布式学习,提出该概念的初衷是为了解决数据孤岛问题,从分散、孤立的数据中训练机器学习模型。

联邦学习与传统基于数据中心的分布式学习主要有三方面的不同:

统计异构 Statistical heterogeneous(例如数据的非独立同分布、部分数据无标签)。
系统约束 System constraints(例如通信和计算能力的差异)。
可信度 Trustworthiness(例如数据安全、隐私问题、公平性问题)。

过去几年对这些问题已经进行了多方面的研究:

对于统计异构:提出了分布式优化方法(例如FedMA、FedProx、Adaptive Federated Optimization和FedNAS)。
对于系统约束:利用压缩、分散或量化技术来减少训练过程中的通信开销和计算成本。
对于可信性问题:通过对抗性攻击和防御技术来增强联邦学习的鲁棒性、通过差分隐私和安全多方计算等方法来保护隐私。

目前对联邦学习研究存在以下的局限性:

1. 联邦学习种类的多样性导致现有 FL 库不能完全支持。

在网络结构中,目前已经提出了基于数据中心的FL、去中心化FL、分层FL、纵向FL、split-FL 以及 meta-FL;在信息交换中,除了交换梯度和模型以外,最新的FL算法还建议交换信息,例如半监督FL中的伪标签和基于神经体系结构搜索FL中的体系结构参数;在训练过程中, FL-GAN 和 联邦迁移学习等训练过程与 FedAvg 算法明显不同。

2. 缺乏对多种 FL 计算范例的支持。

PyTorch、TensorFlow、MXNet 中 TensorFlow-Federated(TFF)2,PySyft 和 LEAF 仅支持具有中心结构的算法,如 FedAvg 或 FedProx 算法,不适用于需要交换复杂辅助信息和自定义训练程序的算法。
行业发布了面向生产的库,例如FATE 和PaddleFL,但业界主导的产品通常具有繁琐的系统设计,不灵活的API和复杂的环境设置,这对于在分布式系统开发中没有足够专业知识的算法研究人员来说是一个沉重的学习负担。

3. 缺乏标准的 FL 算法实现。

由于没有统一的标准框架,且联邦学习中具有数据非独立同分布的特性,导致实验结果很难复现。因此难以公平地评价不同算法的性能。

4. 缺乏标准的 FL-Benchmark。

本文总结了过去两年的顶会中使用的数据集合模型,这些已发表文章的实验设置非常不一致,包括数据集的非I.I.D.设置、用于训练的模型以及每一轮训练涉及的 device 数量。这些设置的任何差异都可能影响实验结果。

为了解决上述问题并促进 FL 研究的创新,本文介绍了 FedML.

(i) FedML 引入了 worker-oriented 的编程接口,用于灵活的拓扑配置和工作程序之间的任意信息交换。用户可以在 FL 设置中为工作人员附加任何行为(例如,训练,聚合,攻击和防御等),自定义其他交换信息,并控制 worker 之间的信息流,从而使 FedML 更加灵活和通用,可用于更高级的算法开发。

(ii) FedML支持三种计算范例:分布式计算,单机模拟和移动设备训练。

(iii)标准化的 FL 算法实现。FedML 提供了许多现有的 FL 算法的标准化实现。这些实现不仅可以帮助用户熟悉 API,还可以用作与新开发的 FL 算法进行比较的基准。

(iv) FedML 为非独立同分布数据集提供了标准化基准设置。为了促进公平和可靠的比较,FedML在合理的设置下提供了有意义的指标和基线结果,确保所有算法都在具有合理调整的超参数的非独立同分布的数据集上进行评估。

架构设计

FedML-Core 将通信和模型训练分为两个核心组件。

首先是通信协议组件 Distributed。它负责网络中不同作品之间的底层通信。通信后端基于MPI(消息传递接口)。我们考虑根据需要添加更多的后端,例如RPC(远程过程调用)。在通信协议组件内部,TopologyManager支持不同的分布式学习算法所需的灵活拓扑配置。
第二个是设备上的深度学习组件(On-Device Machine Learning),它是基于流行的深度学习框架 PyTorch 或 TensorFlow 构建的。为了灵活性,这部分的框架没有限制。用户可以根据自己的需要创建 Worker 和 Coordinator, 此外,低级API支持安全性和与隐私相关的算法。

FedML-API 是基于 FedML-Core 构建的。

借助FedML-core,可以通过采用 Worker-oriented 的编程接口轻松实现分布式版本的新算法。对于由于GPU内存和训练时间限制而无法通过独立仿真处理大型DNN训练的情况,这种分布式计算范例至关重要。这种分布式计算设计不仅用于FL,而且还可以用于常规的集群内大规模分布式训练(例如,训练CNN或转换器之类的现代神经体系结构)。
FedML-API 还建议将模型,数据集和算法的实现分开。这种做法可以实现代码重用,并且还可以进行公平的比较,从而避免了由实现差异导致的算法之间的性能差异。FL 应用程序可以开发更多的模型并提交更现实的数据集,而无需了解不同的分布式优化算法的细节。

其他组件是基于FedML-API构建的。

FedML-Mobile 可以在 Android / iOS 智能手机上训练神经网络。在无线网络环境中的测试平台,研究人员可以评估实际的系统性能,例如培训时间,通信和计算成本。在FedML-mobile的服务器端,使用基于Python的框架构建云服务,因此它可以重用FedML-API的核心实现。


03

实验展示

为了演示FedML的功能,我们在真实的分布式计算环境中进行了实验。我们使用标准的FedAvg算法训练了大型CNN架构(ResNet和MobileNet)。下图显示了训练期间的相应曲线。一个普遍的现象是对非I.I.D.数据性能低于I.I.D.数据。

FedML 提供 benchmark 的实验结果作为新开发的算法和系统的参考。为了确保实时更新,使用 Weight 和 Bias[1] 维护基准实验结果,该在线平台可帮助管理和可视化实验结果。查看实验结果的 Web 链接可在GitHub[2]上找到。


04

总结

FedML 是面向研究的联邦学习库和基准。它为研究人员和工程师提供了端到端工具包,以开发和评估自己的 FL 算法,并与现有算法进行合理比较。在这项工作中,描述了系统设计,新的编程接口,应用示例,基准,数据集和一些实验结果。它的参考实现,基准和数据集旨在促进 baseline 的再现以及对新开发算法的公平比较。我们接受用户的反馈,并将不断更新我们的库以支持更高级的要求。


05

参考

1. https://www.wandb.com/

2. https://github.com/FedML-AI/FedML/tree/master/benchmark


本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。


直播预告

左划查看更多




历史文章推荐



分享、点赞、在看,给个三连击呗!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存