Hub documentation
Distilabel
Distilabel
Distilabel é um framework para dados sintéticos e feedback de IA para engenheiros que precisam de pipelines rápidos, confiáveis e escaláveis baseados em papers de pesquisa verificados.
O Distilabel pode ser usado para gerar dados sintéticos e feedback de IA para uma ampla variedade de projetos, incluindo NLP preditivo tradicional (classificação, extração, etc.) ou cenários de modelos de linguagem generativos e de grande escala (seguimento de instruções, geração de diálogos, julgamento, etc.). A abordagem programática do Distilabel permite construir pipelines escaláveis de geração de dados e feedback de IA. O objetivo do Distilabel é acelerar seu desenvolvimento de IA gerando rapidamente conjuntos de dados de alta qualidade e diversos, com base em metodologias de pesquisa verificadas para geração e julgamento com feedback de IA.
O que as pessoas constroem com o distilabel?
A comunidade Argilla usa o distilabel para criar incríveis datasets e modelos.
- O 1M OpenHermesPreference é um conjunto de dados com cerca de 1 milhão de preferências de IA geradas usando o LLM teknium/OpenHermes-2.5. É um ótimo exemplo de como você pode usar o distilabel para escalar e aumentar o desenvolvimento de conjuntos de dados.
- conjunto de dados Intel Orca DPO do distilabel usado para ajustar o modelo OpenHermes aprimorado. Este conjunto de dados foi construído combinando a curadoria humana na Argilla com o feedback de IA do distilabel, resultando em uma versão aprimorada do conjunto de dados Intel Orca e superando os modelos ajustados no conjunto de dados original.
- O haiku DPO data é um exemplo de como qualquer pessoa pode criar um conjunto de dados sintético para uma tarefa específica, que, após curadoria e avaliação, pode ser usado para o ajuste fino de LLMs personalizados.
Pré-requisitos
Primeiro faça login com sua conta do Hugging Face:
hf auth login
Certifique-se de que você tenha o distilabel instalado:
pip install -U distilabel[vllm]
Pipelines do Distilabel
Os pipelines do Distilabel podem ser construídos com qualquer número de etapas ou tarefas interconectadas. A saída de uma etapa ou tarefa é fornecida como entrada para outra. Uma série de etapas pode ser encadeada para construir pipelines complexos de processamento e geração de dados com LLMs. A entrada de cada etapa é um lote de dados, contendo uma lista de dicionários, em que cada dicionário representa uma linha do conjunto de dados e as chaves são os nomes das colunas. Para fornecer dados do e para o Hugging Face hub, definimos a classe Distiset como uma abstração de um datasets.DatasetDict.
Distiset como objeto de dataset
Uma Pipeline no distilabel retorna um tipo especial de datasets.DatasetDict do Hugging Face chamado Distiset.
O Pipeline pode gerar vários subconjuntos no Distiset, que é um objeto semelhante a um dicionário com uma entrada por subconjunto. Um Distiset pode, em seguida, ser enviado sem problemas para o Hugging Face Hub, com todos os subconjuntos no mesmo repositório.
Carregar dados do Hub para um Distiset
Para apresentar um exemplo de carregamento de dados do Hub, reproduziremos o artigo Prometheus 2 e usaremos a tarefa PrometheusEval implementada no distilabel. As tarefas Prometheus 2 e Prometheuseval são de avaliação direta e de ranqueamento em pares, ou seja, avaliar a qualidade de uma única resposta isolada para uma instrução dada, com ou sem uma resposta de referência, e avaliar a qualidade de uma resposta em relação a outra para uma instrução dada, com ou sem uma resposta de referência, respectivamente. Usaremos essas tarefas em um conjunto de dados carregado do Hub, criado pela equipe H4 da Hugging Face, chamado 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_columnsEm seguida, precisamos chamar pipeline.run com os parâmetros de tempo de execução para que o pipeline possa ser iniciado e os dados possam ser armazenados no objeto Distiset.
distiset = pipeline.run(
parameters={
task.name: {
"llm": {
"generation_kwargs": {
"max_new_tokens": 1024,
"temperature": 0.7,
},
},
},
},
)Envie um Distiset do distilabel para o Hub
Envie o Distiset para um repositório do Hugging Face, onde cada um dos subconjuntos corresponderá a uma configuração diferente:
distiset.push_to_hub(
"my-org/my-dataset",
commit_message="Initial commit",
private=False,
token=os.getenv("HF_TOKEN"),
)📚 Recursos
- 🚀 Documentação do Distilabel
- 🚀 Documentação do Distilabel - distiset
- 🚀 Documentação do Distilabel - prometheus
- 🆕 Apresentando o distilabel