用Hugging Face和Flower进行联邦学习,让你的模型更快更准
00 分钟
2023-8-26
2023-8-26
type
status
slug
summary
date
tags
category
password
Text
AI summary
AI custom autofill
Multi-select
Status
URL
hashtag
勘误
标签
标题
类型
贴文
🪄
icon
notion image
本教程将展示如何利用 Hugging Face 使用Flower联合多个客户端的语言模型训练更具体地说,我们将微调预训练的 Transformer 模型 (distilBERT),以便在 IMDB 评级数据集上进行序列分类。最终目标是检测电影评级是正面还是负面。
这里也提供了一个笔记本,但它不是在多个单独的客户端上运行,而是利用 Flower 的模拟功能(使用flwr['simulation'])来模拟 Google Colab 内的联合设置(这也意味着start_server我们将调用 ,而不是调用start_simulation,并且一些需要进行其他修改)。

依赖关系

要按照本教程进行操作,您需要安装以下软件包:datasetsevaluateflwrtorchtransformers这可以使用以下方法完成pip
pip install datasets evaluate flwr torch transformers

标准拥抱脸部工作流程

处理数据

为了获取 IMDB 数据集,我们将使用 Hugging Face 的datasets库。然后我们需要标记数据并创建PyTorch数据加载器,这一切都在函数中完成load_data

训练和测试模型

一旦我们找到了创建训练加载器和测试加载器的方法,我们就可以进行训练和测试。PyTorch这与任何训练或测试循环非常相似:

创建模型本身

要创建模型本身,我们只需使用 Hugging Face 加载预先训练的 distillBERT 模型

示例

联邦学习背后的想法是在多个客户端和服务器之间训练模型,而无需共享任何数据。这是通过让每个客户端在其数据上本地训练模型并将其参数发送回服务器,然后服务器使用预定义的策略将所有客户端的参数聚合在一起来完成的。通过使用Flower框架,这个过程变得非常简单。
如果您想要更完整的概述,请务必查看本指南:

创建 IMDBClient

为了将我们的示例联合到多个客户端,我们首先需要编写 Flower 客户端类(继承自flwr.client.NumPyClient)。这非常简单,因为我们的模型是标准PyTorch模型:
get_parameters函数让服务器获取客户端的参数。相反,该set_parameters函数允许服务器将其参数发送到客户端。最后,该fit函数为客户端在本地训练模型,该evaluate函数在本地测试模型并返回相关指标。
我们现在可以使用以下方式启动客户端实例:

启动服务器

现在我们有了实例化客户端的方法,我们需要创建服务器来聚合结果。使用 Flower,可以通过首先选择一个策略(在这里,我们使用FedAvg,它将全局权重定义为每轮所有客户端权重的平均值)然后使用以下函数来轻松完成此flwr.server.start_server操作:
weighted_average函数提供了一种聚合分布在客户端之间的指标的方法(基本上,这使我们能够显示每轮的平均准确度和损失)。

总结

如果您想查看所有内容,您应该查看我们为 Flower 存储库编写的代码示例: https: //github.com/adap/flower/tree/main/examples/quickstart_huggingface
当然,这是一个非常基本的示例,可以添加或修改很多内容,这只是为了展示我们如何简单地使用 Flower 来联合 Hugging Face 工作流程。
请注意,在这个示例中我们使用了PyTorch,但我们可以很好地使用TensorFlow
 

作者:charlesbvll

评论