当前位置: 首页 > news >正文

AI 数据集生成和模型微调框架 Distilabel 高级指南:深度功能与最佳实践

系列文章:

AI 数据集生成和模型微调框架 Distilabel 入门指南:基本概念、安装与快速开始

AI 数据集生成和模型微调框架 Distilabel 基础指南:概念与入门(一)

AI 数据集生成和模型微调框架 Distilabel 基础指南:概念与入门(二)

AI 数据集生成和模型微调框架 Distilabel 实践: Pipeline实现原理解读

AI 数据集生成和模型微调框架 Distilabel 高级指南:深度功能与最佳实践

正文:


前面的文章介绍了 Distilabel 的基本概念以及核心的 Pipeline 实现原理。本文会介绍 Distilabel 中的一些深度使用概念和功能,并介绍一些最佳实践的教程。

使用 Distiset 数据集对象

在 Distilabel 中,Pipeline 会返回一个特殊类型的 Hugging Face datasets.DatasetDict,它被称为 Distiset

Distiset 是一个类似字典的对象,包含了由 Pipeline 生成的不同配置,每个配置对应 Pipeline 中 DAG(有向无环图)中每个叶节点的步骤。每个配置对应数据集的一个子集。这一概念借鉴了 datasets 的理念,允许你在同一个仓库内上传相同数据集的不同配置,每个配置可以包含不同的列(即不同的配置),并可以无缝推送到 Hugging Face Hub。

下面是如何创建一个类似 datasets.DatasetDict 的 Distiset 对象的示例:

from datasets import Dataset
from distilabel.distiset import Distisetdistiset = Distiset({"leaf_step_1": Dataset.from_dict({"instruction": [1, 2, 3]}),"leaf_step_2": Dataset.from_dict({"instruction": [1, 2, 3, 4], "generation": [5, 6, 7, 8]}),}
)
注意事项:如果只有一个叶节点,即 Pipeline 的最后一步,配置名称不会是最后一步的名称,而是设置为 "default",因为这与 Hugging Face Hub 上的标准数据集更一致。

Distiset 方法

我们可以与 Pipeline 生成的不同部分进行交互,并将它们视为不同的配置。Distiset 只有两个方法:

1. 训练/测试集拆分

为不同的配置或子集创建训练/测试拆分。

>>> distiset.train_test_split(train_size=0.9)
Distiset({leaf_step_1: DatasetDict({train: Dataset({features: ['instruction'],num_rows: 2})test: Dataset({features: ['instruction'],num_rows: 1})})leaf_step_2: DatasetDict({train: Dataset({features: ['instruction', 'generation'],num_rows: 3})test: Dataset({features: ['instruction', 'generation'],num_rows: 1})})
})

2. 推送到 Hugging Face Hub

将 Distiset 推送到 Hugging Face 仓库,每个子集对应不同的配置:

distiset.push_to_hub("my-org/my-dataset",commit_message="Initial commit",private=False,token=os.getenv("HF_TOKEN"),generate_card=True,include_script=False
)
注意:从版本 1.3.0 起,你可以自动将创建 Pipeline 的脚本推送到同一个仓库。例如,假设你有一个文件如下:
# sample_pipe.pywith Pipeline() as pipe:...
distiset = pipe.run()
distiset.push_to_hub("my-org/my-dataset",include_script=True
)
执行该命令后,你可以访问该仓库, sample_pipe.py 文件将被存储,方便与社区分享你的 Pipeline。

1)自定义 Docstring

Distilabel 包含一个自定义插件,可自动为不同组件生成一个展示集。信息通过解析步骤的 docstring 提取。你可以查看 UltraFeedback 源代码中的 docstring,并在组件展示集中查看相应的条目,了解 docstring 的渲染方式。

如果你创建了自己的组件,并希望引用在 README 卡片中自动呈现(如果你打算将最终的 Distiset 分享到 Hugging Face Hub),你可能需要添加Citations部分。例如:

class MagpieGenerator(GeneratorTask, MagpieBase):r"""Generator task the generates instructions or conversations using Magpie....Citations:```@misc{xu2024magpiealignmentdatasynthesis,title={Magpie: Alignment Data Synthesis from Scratch by Prompting Aligned LLMs with Nothing},author={Zhangchen Xu and Fengqing Jiang and Luyao Niu and Yuntian Deng and Radha Poovendran and Yejin Choi and Bill Yuchen Lin},year={2024},eprint={2406.08464},archivePrefix={arXiv},primaryClass={cs.CL},url={https://arxiv.org/abs/2406.08464},}```"""

Citations可以包含任意数量的 bibtex 引用。你可以根据需要添加多个元素,每个Citation都会是 @misc{...} 的形式。这些信息将自动在 README 中使用,特别是当你调用 distiset.push_to_hub 时。如果找不到Citations,但在参考文献中找到指向 https://arxiv.org/ 的 URL,系统会自动尝试获取 Bibtex 等价项。

2)图像数据集

如果你对图像数据集感兴趣,Distiset 对象有一个新方法 transform_columns_to_image,专门用于在将数据集推送到 Hugging Face Hub 之前,将图像转换为 PIL.Image.Image 对象。

从版本 1.5.0 起,新增了 ImageGeneration 任务,能够从文本生成图像。默认情况下,所有的过程将使用图像的字符串表示形式,但为了充分利用 Hugging Face Hub 的功能,如果数据集将存储在 Hub 上,建议使用适当的图像对象。例如,以下是一个提取自 "examples/image_generation.py" 的Pipeline:

with Pipeline(name="image_generation_pipeline") as pipeline:img_generation = ImageGeneration(name="flux_schnell",llm=igm,InferenceEndpointsImageGeneration(model_id="black-forest-labs/FLUX.1-schnell"))...if __name__ == "__main__":distiset = pipeline.run(use_cache=False, dataset=ds)distiset = distiset.transform_columns_to_image("image")distiset.push_to_hub(...)

3. 从磁盘保存和加载

这些方法与 datasets.load_from_disk 和 datasets.Dataset.save_to_disk 相同,因此参数直接传递给这些方法。你可以使用 storage_options 参数将 Distiset 保存在云提供商中,包括 distilabel 工件(如 pipeline.yamlpipeline.log 和 README.md)。

1)保存到磁盘

distiset.save_to_disk("my-dataset",save_card=True,save_pipeline_config=True,save_pipeline_log=True
)

2)从本地磁盘加载

以相同的方式加载使用Distiset.save_to_disk保存的Distiset:


http://www.mrgr.cn/news/92716.html

相关文章:

  • Apache Spark中的依赖关系与任务调度机制解析
  • 数据库MySQL,在终端输入后,提示不是内部命令等
  • 《机器学习数学基础》补充资料:矩阵的LU分解
  • 硬编码(三)经典变长指令一
  • 千峰React:函数组件使用(3)
  • STL 算法库中的 min_element 和 max_element
  • React 中 useState 的 基础使用
  • LeetCode 热题 100_有效的括号(69_20_简单_C++)(栈;栈+哈希表(建立左右括号的对应关系))
  • Token相关设计
  • Hive配置
  • MQ 笔记
  • 初阶数据结构习题【3】(1时间和空间复杂度)——203移除链表元素
  • Android APK组成编译打包流程详解
  • CMU15445(2023fall) Project #2 - Extendible Hash Index 匠心分析
  • 学术小助手智能体
  • Python面试(八股)
  • 爬虫和逆向教程-专栏介绍和目录
  • 常见深度学习算法图解笔记
  • 【戒抖音系列】短视频戒除-4-为什么刷短视频停不下来?从多巴胺陷阱到沉浸式交互拆解上瘾机制的底层逻辑
  • start DL from stratch (2)!!!