ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Flower Datasets 数据集贡献指南:三步把数据集发布到 Hugging Face Hub 并接入联邦学习生态

2026/9/17 11:55:18 拓冰建站 浏览量
Flower Datasets 数据集贡献指南:三步把数据集发布到 Hugging Face Hub 并接入联邦学习生态 Flower Datasets 数据集贡献指南三步把数据集发布到 Hugging Face Hub 并接入联邦学习生态【免费下载链接】flowerFlower: A Friendly Federated AI Framework项目地址: https://gitcode.com/GitHub_Trending/flo/flower导读本文是 Flower Datasetsflwr-datasets的贡献者指南完整讲解如何将你自己的数据集接入 Flower 联邦学习生态先在本地把数据转换为 Hugging Face 的datasets.Dataset格式再上传到 Hugging Face Hub 并撰写面向 FL 场景的 README最后通过 PR 或社区渠道进入官方推荐 FL 数据集列表。读完本文你将掌握从本地数据到可被FederatedDataset一键下载、切分的完整发布链路并理解Partitioner对数据集格式的底层约束。数据集贡献的总体流程要让一个数据集在 Flower Datasets 中可用核心前提是把数据集发布到 Hugging Face Hub。Flower Datasets 在底层依赖 Hugging Face 的datasets库因此一旦数据集在 HF Hub 上可用就可以立即被flwr-datasets使用无需等待 Flower 团队审批也无需编写任何自定义加载代码见 datasets/docs/source/index.rst 中的说明。整个贡献过程分为三步本地构建在开发机上把数据转换为datasets.Dataset对象——这是 HF Hub 推荐的数据集格式上传 Hub把数据集上传到 Hugging Face Hub并在其 README 中说明如何配合 Flower Datasets 使用共享推广把你的数据集分享给 Flower 团队由团队将其收录进官方推荐 FL 数据集列表供社区发现和使用。下面逐一展开每一步的具体做法。第一步在本地创建datasets.Datasetdatasets.Dataset是后续一切操作的入口Flower Datasets 的所有Partitioner数据切分器都要求输入这一类型FederatedDataset的下载与切分也围绕它展开。你可以直接用datasets库创建本地数据集也可以先以任意自定义方式加载数据再转换得到datasets.Dataset。从本地文件构建datasets库提供了load_dataset帮助函数可以读取 CSV、JSON、图片目录、音频目录等本地文件详细示例见 datasets/docs/source/how-to-use-with-local-data.rstfrom datasets import load_dataset from flwr_datasets.partitioner import ChosenPartitioner # 换成你需要的 Partitioner # CSV单文件或多文件 data_files path-to-my-file.csv # data_files [path-to-my-file-1.csv, path-to-my-file-2.csv, ...] dataset load_dataset(csv, data_filesdata_files) partitioner ChosenPartitioner(...) partitioner.dataset dataset partition partitioner.load_partition(partition_id0)JSON 的写法与 CSV 完全对称只需把加载器从csv换成json。图片与音频数据则有两条路径直接给目录图片要求目录结构为dataset-name/split/class/name例如mnist/train/1/unique_name.png、mnist/test/2/unique_name.png之后用load_dataset(imagefolder, data_dir/path/to/folder)加载音频对应load_dataset(audiofolder, data_dir/path/to/folder)。注意这里返回的是DatasetDict需要先取出某个 split如dataset_dict[train]再赋给partitioner.dataset。先加载表数据再转型先通过 CSV/JSON 加载路径列再用dataset.cast_column(path, Image())或dataset.cast_column(path, Audio())把路径列转型为真正的图像/音频特征。从内存对象构建如果你手头的是 Python 内存对象可以按以下方式快速转成Datasetfrom datasets import Dataset from flwr_datasets.partitioner import ChosenPartitioner # 从字典 data {features: [1, 2, 3], labels: [0, 0, 1]} dataset Dataset.from_dict(data) # 从 list每项为一个样本 dict my_list [{features: 1, labels: 0}, {features: 2, labels: 0}, ...] dataset Dataset.from_list(my_list) # 从 pd.DataFrame import pandas as pd df pd.DataFrame(data) dataset Dataset.from_pandas(df) # 从 np.ndarray会先转成 pd.DataFrame可用 columns 指定列名 import numpy as np data np.array([[1, 2, 3], [0, 0, 1]]).T df pd.DataFrame(data, columns[features, labels]) dataset Dataset.from_pandas(df)一条重要最佳实践官方文档特别提示原文 Tip不要在 Hugging Face Hub 上上传自定义加载脚本custom scripts。正确做法是在本地完成数据集构建然后只上传数据本身。这样每次下游下载数据集时都能直接读取数据避免反复执行脚本带来的处理开销显著缩短下载后的使用时间。第二步上传到 Hugging Face HubHugging Face Hub 上的每个数据集本质上是一个Git 仓库包含特定的目录结构和一份 README 文件。HF 既提供了 API 用于推送数据集也提供了网页端界面用于在 README 中填写信息。上传到 Hub 的操作归结为三件事为数据集创建 HF 仓库上传数据集在 README 中填写信息。用push_to_hub推送数据数据集推送本身非常直接一个典型的推送代码是这样的来自原文档from datasets import Dataset # 示例数据 data { column1: [1, 2, 3], column2: [a, b, c] } # 创建 Dataset 对象 dataset Dataset.from_dict(data) # 推送到 Hugging Face Hub dataset.push_to_hub(you-hf-username/your-ds-name)推送前请确保已在本机配置好 HF 认证凭据huggingface-cli login或环境变量目标仓库命名遵循用户名/数据集名的规范。在 README 中添加 Use in FL 章节为了让数据集在联邦学习场景中更容易被发现和使用官方推荐在数据集 README 中加入Use in FL章节给出配合 Flower Datasets 加载与切分的示例代码。Flower 团队为 cinic10 数据集编写的 README 就是参考范例。一个典型的使用示例可放入 README长这样from flwr_datasets import FederatedDataset fds FederatedDataset( datasetflwrlabs/cinic10, partitioners{train: 10}, ) partition fds.load_partition(partition_id0)关于FederatedDataset的参数细节可从 datasets/flwr_datasets/federated_dataset.py 的类文档中看到dataset传 HF Hub 数据集名subset传子集/版本partitioners把 split 名映射到Partitioner实例或整数整数等价于使用默认的IidPartitioner切分成该数量的分区另外还支持shuffle、seed、preprocessor以及透传给datasets.load_dataset的load_dataset_kwargs。第三步提升数据集的可见性上传完成并不代表贡献结束。如果你希望数据集出现在 Flower 官方维护的推荐 FL 数据集列表中需要主动触达社区向 Flower 仓库提交 Pull Request或在 Flower 的 Slack 工作区 #contributions 频道中联系维护团队。一旦被收录你的数据集就会与 MNIST、CIFAR-10、FEMNIST 等经典 FL 数据集并列展示。从 datasets/docs/source/recommended-fl-datasets-tables.rst 可以看到该列表按模态组织图像如flwrlabs/femnist、flwrlabs/cinic10、flwrlabs/fed-isic2019、音频如google/speech_commands、flwrlabs/ambient-acoustic-context、表格如scikit-learn/adult-census-income、文本如sentiment140、bigbio/pubmed_qa以及多模态如panitsasi/fedjam每项都附有规模信息方便研究者按需选用。底层契约Partitioner 对Dataset的严格要求理解Partitioner的输入约束能帮你避免在数据集发布后踩坑。flwr-datasets的基类定义在 datasets/flwr_datasets/partitioner/partitioner.py它体现了三条关键规则类型必须是datasets.Dataset给partitioner.dataset赋值时源码会做isinstance检查非Dataset类型会抛出TypeError数据集只能赋值一次datasetsetter 会检查是否已赋值重复赋值会抛出ValueError因为重新赋值可能使已保存的分区引用失效切分在首次load_partition时自动触发不需要手动调用任何 do_partitioning 方法load_partition(partition_id)根据分区索引返回单个Dataset分区num_partitions则给出总分区数。此外未赋值就读取dataset属性会抛出AttributeError可通过is_dataset_assigned()先做检查。如果你的数据集要在不同场景下切分请为每种切分需求创建独立的Partitioner实例例如来自 how-to-use-with-local-data.rst 的 Partitioner Details 一节from flwr_datasets.partitioner import IidPartitioner iid_partitioner_for_mnist IidPartitioner(num_partitions10) iid_partitioner_for_mnist.dataset mnist_dataset iid_partitioner_for_cifar IidPartitioner(num_partitions10) iid_partitioner_for_cifar.dataset cifar_datasetflwr-datasets内置了丰富的切分器全部可从flwr_datasets.partitioner导入见 datasets/flwr_datasets/partitioner/init.py包括IidPartitioner、DirichletPartitioner模拟 Non-IID 标签分布、PathologicalPartitioner、ShardPartitioner、NaturalIdPartitioner、SizePartitioner、VerticalEvenPartitioner等足以覆盖大多数联邦学习数据异构性实验需求。贡献后的验证与安装完成上述三步后任何人都可以通过标准方式安装并使用你的数据集# 基础安装 python -m pip install flwr-datasets # 图像数据集推荐带上 vision extra python -m pip install flwr-datasets[vision] # 音频数据集推荐带上 audio extra python -m pip install flwr-datasets[audio]注意Flower Datasets 要求 Python 3.11 及以上版本vision与audioextra 分别用于支持图像与音频特征类型的解码依赖详见 datasets/docs/source/how-to-install-flwr-datasets.rst。安装完成后可用下面代码验证数据集确实可被flwr-datasets消费from flwr_datasets import FederatedDataset fds FederatedDataset( datasetyou-hf-username/your-ds-name, partitioners{train: 100}, # 切成 100 个客户端分区 ) partition fds.load_partition(partition_id10) # 取出客户端 10 的数据 centralized fds.load_split(test) # 保留测试集做集中式评估FederatedDataset是 下载 预处理 切分 的一站式入口它根据partitioners字典在按 split 的基础上用对应的Partitioner生成分区同时通过shuffle/seed控制样本顺序是验证你所发布数据集与 Flower 生态兼容性的最快路径。结语把数据集贡献给 Flower 社区本质上是三件事的串联本地转成datasets.Dataset→ 推送到 Hugging Face Hub 并写好 Use in FL README → 通过 PR 或 Slack 让社区看到它。整个过程不要求编写任何 Flower 专用代码因为flwr-datasets与 HF Hub 的无缝对接已经为你处理好了下载与切分的复杂性。贡献完成后你的数据集将进入联邦学习社区的可检索资源池并被FederatedDataset一键使用——这正是 Flower 生态 数据集即插即用 设计理念的体现。【免费下载链接】flowerFlower: A Friendly Federated AI Framework项目地址: https://gitcode.com/GitHub_Trending/flo/flower创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考