Hub 文档
Distilabel
并获得增强的文档体验
开始使用
Distilabel
Distilabel 是一个合成数据和 AI 反馈框架,专为需要基于已验证研究论文的快速、可靠且可扩展的管道的工程师而设计。
Distilabel 可用于为各种项目生成合成数据和 AI 反馈,包括传统的预测性 NLP(分类、提取等)或生成式和大型语言模型场景(指令跟随、对话生成、判断等)。 Distilabel 的编程方法允许您构建可扩展的管道数据生成和 AI 反馈。 distilabel 的目标是通过基于已验证的研究方法快速生成高质量、多样化的数据集,从而加速您的 AI 开发,这些方法用于使用 AI 反馈进行生成和判断。
人们使用 distilabel 构建什么?
Argilla 社区使用 distilabel 创建了令人惊叹的 数据集 和 模型。
- 1M OpenHermesPreference 是一个包含约 100 万个 AI 偏好的数据集,这些偏好是使用 teknium/OpenHermes-2.5 LLM 生成的。 这是一个关于如何使用 distilabel 扩展和加速数据集开发的绝佳示例。
- 用于微调 改进的 OpenHermes 模型 的 distilabeled Intel Orca DPO 数据集。 该数据集通过将 Argilla 中的人工策划与 distilabel 的 AI 反馈相结合而构建,从而产生了改进版本的 Intel Orca 数据集,并优于在原始数据集上微调的模型。
- haiku DPO 数据是一个示例,说明任何人都可以为特定任务创建合成数据集,该数据集在经过策划和评估后可用于微调自定义 LLM。
前提条件
huggingface-cli login
确保您已安装 distilabel
pip install -U distilabel[vllm]
Distilabel 管道
Distilabel 管道可以使用任意数量的互连步骤或任务构建。 一个步骤或任务的输出将作为另一个步骤或任务的输入。 可以将一系列步骤链接在一起,以使用 LLM 构建复杂的数据处理和生成管道。 每个步骤的输入是一批数据,其中包含字典列表,其中每个字典代表数据集的一行,键是列名。 为了从 Hugging Face Hub 馈送数据,我们定义了一个 Distiset 类,作为 datasets.DatasetDict 的抽象。
Distiset 作为数据集对象
distilabel 中的 Pipeline 返回一种特殊类型的 Hugging Face datasets.DatasetDict,称为 Distiset。
Pipeline 可以在 Distiset 中输出多个子集,Distiset 是一个类似字典的对象,每个子集有一个条目。 然后,可以将 Distiset 无缝推送到 Hugging Face Hub,所有子集都在同一个存储库中。
从 Hub 加载数据到 Distiset
为了展示从 Hub 加载数据的示例,我们将重现 Prometheus 2 论文,并使用 distilabel 中实现的 PrometheusEval 任务。 Prometheus 2 和 Prometheuseval 任务直接评估和成对排名任务,即评估针对给定指令(有或没有参考答案)的单个独立响应的质量,以及评估针对给定指令(有或没有参考答案)的一个响应相对于另一个响应的质量。 我们将在从 Hub 加载的数据集上使用这些任务,该数据集由 Hugging Face H4 团队创建,名为 HuggingFaceH4/instruction-dataset。
from distilabel.llms import vLLM
from distilabel.pipeline import Pipeline
from distilabel.steps import KeepColumns, LoadDataFromHub
from distilabel.steps.tasks import PrometheusEval
if __name__ == "__main__":
with Pipeline(name="prometheus") as pipeline:
load_dataset = LoadDataFromHub(
name="load_dataset",
repo_id="HuggingFaceH4/instruction-dataset",
split="test",
output_mappings={"prompt": "instruction", "completion": "generation"},
)
task = PrometheusEval(
name="task",
llm=vLLM(
model="prometheus-eval/prometheus-7b-v2.0",
chat_template="[INST] {{ messages[0]['content'] }}\n{{ messages[1]['content'] }}[/INST]",
),
mode="absolute",
rubric="factual-validity",
reference=False,
num_generations=1,
group_generations=False,
)
keep_columns = KeepColumns(
name="keep_columns",
columns=["instruction", "generation", "feedback", "result", "model_name"],
)
load_dataset >> task >> keep_columns
然后我们需要使用运行时参数调用 pipeline.run,以便可以启动管道并将数据存储在 Distiset 对象中。
distiset = pipeline.run(
parameters={
task.name: {
"llm": {
"generation_kwargs": {
"max_new_tokens": 1024,
"temperature": 0.7,
},
},
},
},
)
将 distilabel Distiset 推送到 Hub
将 Distiset 推送到 Hugging Face 存储库,其中每个子集将对应于不同的配置
distiset.push_to_hub(
"my-org/my-dataset",
commit_message="Initial commit",
private=False,
token=os.getenv("HF_TOKEN"),
)