Distilabel合成数据生成框架简明教程

news2024/9/30 15:05:16

Distilabel 是一个用于合成数据和 AI 反馈的框架,适用于需要基于经过验证的研究论文的快速、可靠和可扩展的管道的工程师。

NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - AI模型在线查看 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割 

1、为什么要使用 distilabel?

Distilabel 可用于为各种项目生成合成数据和 AI 反馈,包括传统的预测性 NLP(分类、提取等)或生成和大型语言模型场景(指令跟踪、对话生成、判断等)。Distilabel 的编程方法允许你构建可扩展的数据生成和 AI 反馈管道。distilabel 的目标是通过基于经过验证的研究方法快速生成高质量、多样化的数据集,以生成和判断 AI 反馈,从而加速你的 AI 开发。

  • 通过数据质量提高你的 AI 输出质量

计算成本高昂,输出质量很重要。我们帮助你专注于数据质量,从而同时解决这两个问题的根本原因。Distilabel 可帮助你合成和判断数据,让你将宝贵的时间用于实现和保持合成数据的高质量标准。

  • 控制你的数据和模型

拥有用于微调你自己的 LLM 的数据并不容易,但 distilabel 可以帮助你入门。我们使用一个统一的 API 集成来自任何 LLM 提供商的 AI 反馈。

通过快速迭代正确的数据和模型来提高效率

使用最新研究论文综合和判断数据,同时确保灵活性、可扩展性和容错性。这样你就可以专注于改进数据和训练模型。

2、Distilabel快速入门

Distilabel 为你提供可扩展且可靠的管道所需的所有工具,用于生成合成数据和 AI 反馈。管道用于生成数据、评估模型、操作数据或任何其他常规任务。它们由不同的组件组成:步骤、任务和 LLM,它们在有向无环图 (DAG) 中链接在一起。

  • steps:步骤,这些是管道的构建块。常规步骤用于基本执行,例如加载数据、应用某些转换或任何其他常规任务。
  • tasks:任务,这些步骤依赖于 LLM 和提示来执行生成任务。例如,它们可用于生成数据、评估模型或操作数据。
  • LLMs:大模型,这些是将执行任务的模型。它们可以是本地或远程模型,也可以是开源或商业模型。

管道设计为可扩展且可靠的。它们可以以分布式方式执行,并且可以缓存和恢复。这在处理大型数据集或想要确保管道可重现时非常有用。

除此之外,管道设计为模块化和灵活的。你可以轻松地向管道添加新步骤、任务或 LLM,也可以轻松修改或删除它们。

2.1 快速安装

可以使用以下命令从 PyPI 安装带有 hf-inference-endpoints extra 包的最新版本:

pip install distilabel[hf-inference-endpoints] --upgrade

2.2 定义管道

在本指南中,我们将引导你完成创建使用 InferenceEndpointsLLM 类生成文本的简单管道的过程。管道将通过步骤 LoadDataFromHub 从 Hugging Face Hub 加载包含名为 prompt 的列的数据集,然后使用 InferenceEndpointsLLM 类使用 TextGeneration 任务根据数据集生成文本。

你可以在 Hugging Face Model Hub 中检查可用的模型并按推理状态进行筛选。

from distilabel.llms import InferenceEndpointsLLM
from distilabel.pipeline import Pipeline
from distilabel.steps import LoadDataFromHub
from distilabel.steps.tasks import TextGeneration

with Pipeline(  # 
    name="simple-text-generation-pipeline",
    description="A simple text generation pipeline",
) as pipeline:  # 
    load_dataset = LoadDataFromHub(  # 
        output_mappings={"prompt": "instruction"},
    )

    text_generation = TextGeneration(  # 
        llm=InferenceEndpointsLLM(
            model_id="meta-llama/Meta-Llama-3.1-8B-Instruct",
            tokenizer_id="meta-llama/Meta-Llama-3.1-8B-Instruct",
        ),  # 
    )

    load_dataset >> text_generation  # 

if __name__ == "__main__":
    distiset = pipeline.run(  # 
        parameters={
            load_dataset.name: {
                "repo_id": "distilabel-internal-testing/instruction-dataset-mini",
                "split": "test",
            },
            text_generation.name: {
                "llm": {
                    "generation_kwargs": {
                        "temperature": 0.7,
                        "max_new_tokens": 512,
                    }
                }
            },
        },
    )
    distiset.push_to_hub(repo_id="distilabel-example")  #

3、Distilabel安装说明

你至少需要 Python 3.9 或更高版本,最高可达 Python 3.12,因为对后者的支持仍在进行中。

要从 PyPI 安装最新版本的软件包,可以使用以下命令:

pip install distilabel --upgrade

或者,你可能还想从源代码(即最新未发布的版本)安装它,可以使用以下命令:

pip install "distilabel @ git+https://github.com/argilla-io/distilabel.git@develop" --upgrade
注意:我们从开发安装,因为这是我们用来收集所有功能、错误修复和改进的分支,这些将是下一个版本的一部分。如果你想从特定分支安装,可以将开发替换为分支名称。

3.1 附加功能

此外,作为 distilabel 的一部分,还提供了一些额外的依赖项,主要是为了增加对我们支持的一些 LLM 集成的支持。以下是可用附加功能的列表:

3.2 支持的大模型

  • anthropic:用于通过 AnthropicLLM 集成使用 Anthropic API 中可用的模型。
  • argilla:用于将生成的数据集导出到 Argilla。
  • cohere:用于通过 CohereLLM 集成使用 Cohere 中可用的模型。
  • groq:用于通过 GroqLLM 集成使用 groq Python 客户端在 Groq 中可用的模型。
  • hf-inference-endpoints:用于通过 InferenceEndpointsLLM 集成使用 Hugging Face 推理端点。
  • hf-transformers:用于通过 TransformersLLM 集成使用 transformers 包中可用的模型。
  • litellm:用于通过 LiteLLM 集成使用 LiteLLM 调用使用 OpenAI 格式的任何 LLM。
  • llama-cpp:用于通过 LlamaCppLLM 集成使用 llama-cpp-python Python 绑定 llama.cpp。
  • mistralai:用于通过 MistralAILLM 集成使用 Mistral AI API 中可用的模型。
  • ollama:用于通过 OllamaLLM 集成使用 Ollama 及其可用模型。
  • openai:用于通过 OpenAILLM 集成使用 OpenAI API 模型,或基于 OpenAI 并依赖于其客户端的其他集成,如 AnyscaleLLM、AzureOpenAILLM 和 TogetherLLM。
  • vertexai:用于通过 VertexAILLM 集成使用 Google Vertex AI 专有模型。
  • vllm:用于通过 vLLM 集成使用 vllm 服务引擎。
  • sentence-transformers:用于使用 sentence-transformers 生成句子嵌入。

3.3 数据处理

  • ray:用于使用 Ray 扩展和分发管道。
  • faiss-cpu 和 faiss-gpu:用于使用 faiss 生成句子嵌入。
  • minhash:用于使用 minhash 通过 datasketch 和 nltk 进行重复检测。
  • text-clustering:用于使用 UMAP 和 Scikit-learn 进行文本聚类。

3.4 结构化生成

  • outlines:用于使用带有大纲的结构化 LLM 生成。
  • tutor:用于使用带有 Instructor 的结构化 LLM 生成。

3.5 建议/注意事项

mistralai 依赖项需要 Python 3.9 或更高版本,因此如果要使用 distilabel.llms.MistralLLM 实现,则需要使用 Python 3.9 或更高版本。

在某些情况下,例如 transformers 和 vllm,如果你使用 GPU 加速器,建议安装 flash-attn,因为它会加快推理过程,但安装需要单独进行,因为它不包含在 distilabel 依赖项中。

pip install flash-attn --no-build-isolation

此外,如果你愿意使用 llama-cpp-python 集成来运行本地 LLM,请注意,安装过程可能会根据你使用的操作系统而变得有点棘手,因此我们建议你阅读其文档中的安装部分。


原文链接:Distilabel简明教程 - BimAnt

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2166582.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringCloud~

帮你轻松入门SpringCloud~ 1 微服务概述 1.1什么是微服务 如idea中使用maven建立的一个个moudle,它具体是使用SpringBoot开发的一个小模块,专业的事交给专业的模块来做,每个模块完成一个具体的任务或功能。 1.2 什么是微服务架构 它将单一应用…

MyBatis 动态 SQL 使用指南

MyBatis 是一个流行的持久层框架,它通过 XML 或注解将接口方法与 SQL 映射在一起。动态 SQL 是 MyBatis 的一大特性,它使得构建灵活的查询变得简单。本文将通过一个 User 表的示例,介绍 MyBatis 中常用的动态 SQL 方法。 1. 什么是动态 SQL&…

飞驰云联亮相电子半导体数智化年会 获”数据交换领域最佳厂商”

2024年9月20日,“2024第二届电子半导体/智能制造数智化年会暨品牌出海论坛”于上海隆重开幕,Ftrans飞驰云联作为国内领先的数据安全交换厂商,应邀携半导体全场景产品和解决方案亮相此次峰会。会上进行了“智象奖”评选,Ftrans飞驰…

sql中的regexp与like区别

sql中的regexp与like区别 1、REGEXP2、LIKE3、区别与选择 💖The Begin💖点点关注,收藏不迷路💖 1、REGEXP 用途:高级字符串匹配,使用正则表达式。特点:灵活性强,能进行复杂模式匹配…

Java项目实战II基于Java+Spring Boot+MySQL的汽车销售网站(文档+源码+数据库)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 在数字化时…

【iOS】引用计数(一)

【iOS】引用计数 文章目录 【iOS】引用计数前言ARC与MRC什么是引用计数的机制内存管理的思考方式自己生成的对象非自己生成的对象不再需要自己持有就释放无法释放非自己持有的对象 autorelease小结 前言 笔者最近开始学习了一下有关于引用计数的内容,写这篇博客来简…

自动驾驶规划算法(一):A*算法原理和代码(c++与python)

1. A*算法简介 A*算法(A-star algorithm)诞生于1968年,由彼得哈特(Peter Hart)、尼尔森尼尔森(Nils Nilsson)和伯特拉波特(Bertram Raphael)三位计算机科学家提出。它的…

[机器学习]04-逻辑回归(python)-03-API与癌症分类案例讲解

逻辑回归(Logistic Regression) 的一API 介绍 关于如何配置模型中的优化器、正则化和惩罚项。 1. 逻辑回归 API 在 Scikit-learn 中,逻辑回归可以通过如下方式定义: from sklearn.linear_model import LogisticRegression ​ …

C嘎嘎入门篇:类和对象(1)

前言: 小编在之前讲述了C的部分入门基础,读者朋友一定要掌握好那些,因为C的学习和C有点不同,C的知识都是比较连贯的,所以我们学好了前面才可以学习后面的内容,本篇文章小编将会讲述C真正的入门篇&#xff1…

爬虫逆向学习(九):记录一个集cookie、请求参数、请求体、响应文本加密的站点反爬

此分享只用于学习用途,不作商业用途,若有冒犯,请联系处理 反爬前置信息 站点:aHR0cHM6Ly96d2Z3LmNxLmdvdi5jbi9pY2l0eS9pY2l0eS9lbmdpbmVlcmluZy9uYXZpZ2F0aW9u 接口:/icity/api-v2/cq.app.icity.engineering.Engine…

vue3组件通信(组合式API)

vue3组件通信(组合式API) vue3组件通信,采用组合式API。选项式API,参看官网 Vue3组件通信和Vue2的区别: 移出事件总线,使用mitt代替。 vuex换成了pinia。把.sync优化到了v-model里面了。把$listeners所…

fo-dicom开源库,深入理解项目的模块化设计

前言 DICOM(Digital Imaging and Communications in Medicine)是医学图像和相关信息的国际标准,广泛应用于医学影像领域。FO-DICOM是一个开源的DICOM库,提供了丰富的功能和模块,用于处理DICOM数据、实现DICOM网络通信…

16.面试算法-树的层次遍历与相关面试题

1. 树的层次遍历与相关面试题 1.1 层次遍历简介 广度优先在面试里出现的频率非常高,但是相对简单,题目也比较少,常见的题目也就七八道。 广度优先又叫层次遍历,基本过程如下: 层次遍历就是从根节点开始&#xff0c…

【STM32】 TCP/IP通信协议(1)

一、前言 TCP/IP是干啥的?它跟SPI、IIC、CAN有什么区别?它如何实现stm32的通讯?如何去配置?为了搞懂这些问题,查询资料可解决如下疑问: 1.为什么要用以太网通信? 以太网(Ethernet) 是指遵守 IEEE 802.3 …

【mbti课堂】计算机系统的六个层次与指令系统

课件:可以从 6 个层次分析和看待计算机系统的基本组成。 指令系统层处在硬件系统和软 件系统之间, 是硬、 软件之间的接口部分, 对两部分都有重要影响。 硬件系统用于实现每条指令的功能, 解决指令之间的衔接关系; 软件…

Golang | Leetcode Golang题解之第437题路径总和III

题目: 题解: func pathSum(root *TreeNode, targetSum int) (ans int) {preSum : map[int64]int{0: 1}var dfs func(*TreeNode, int64)dfs func(node *TreeNode, curr int64) {if node nil {return}curr int64(node.Val)ans preSum[curr-int64(targ…

复杂网络分析_NetworkX

一:NetworkX简介 NetworkX库是一个用于创建、操作复杂网络的结构、动态和功能的Python库。在经济网络中,它可以帮助分析各种经济实体(如公司、个人、国家)之间的相互关系和互动模式。以下是一些NetworkX在经济网络分析中的实际应…

ArrayList源码实现(一)

ArrayList源码实现(一) 1. ArrayList的大小是如何自动增加的? 初始化 在构造函数中,可以设定列表的初始值大小,如果没有的话默认使用,提供的静态数据 public ArrayList(int initialCapacity) {if (initi…

Milvus - 架构设计详解

Milvus 是一个专为在大规模密集向量数据集上进行相似性搜索而设计的开源向量数据库系统。其架构建立在流行的向量搜索库之上,如 Faiss、HNSW、DiskANN 和 SCANN,能够处理数百万、数十亿甚至数万亿的向量数据。为了全面了解 Milvus 架构,我们首…

计网作业3

1.交换机是依据 MAC地址 来转发数据包的 2.数据链路层 负责将数据封装成帧,在相邻节点间进行传输 数据链路层负责以下任务: 封装数据 物理地址寻址:使用MAC地址进行寻址,确保数据能够在局域网中正确传输到目标节点 介质访问控…