Hub documentation
Distilabel
Distilabel
Distilabel es un framework para datos sintéticos y retroalimentación de IA dirigido a ingenieros que necesitan pipelines rápidos, confiables y escalables basados en papers de investigación verificados.
Distilabel se puede utilizar para generar datos sintéticos y retroalimentación de IA para una amplia variedad de proyectos, incluidos los de NLP predictivo tradicional (clasificación, extracción, etc.) o los escenarios de modelos de lenguaje generativos y de gran escala (seguimiento de instrucciones, generación de diálogos, evaluación, etc.). El enfoque programático de Distilabel te permite construir pipelines escalables para la generación de datos y la retroalimentación de IA. El objetivo de distilabel es acelerar tu desarrollo de IA generando rápidamente conjuntos de datos de alta calidad y diversos, basados en metodologías de investigación verificadas para la generación y evaluación con retroalimentación de IA.
¿Qué construyen las personas con distilabel?
La comunidad de Argilla utiliza distilabel para crear increíbles conjuntos de datos y modelos.
- El 1M OpenHermesPreference es un conjunto de datos de aproximadamente 1 millón de preferencias de IA generadas utilizando el LLM teknium/OpenHermes-2.5. Es un gran ejemplo de cómo puedes usar distilabel para escalar y aumentar el desarrollo de conjuntos de datos.
- El conjunto de datos Intel Orca DPO de distilabel utilizado para ajustar el modelo OpenHermes mejorado. Este conjunto de datos se creó combinando la curaduría humana en Argilla con la retroalimentación de la IA de distilabel, lo que dio lugar a una versión mejorada del conjunto de datos Intel Orca y superó a los modelos ajustados con el conjunto de datos original.
- El haiku DPO data es un ejemplo de cómo cualquier persona puede crear un conjunto de datos sintéticos para una tarea específica, que, tras su curación y evaluación, puede utilizarse para el ajuste fino de LLMs personalizados.
Prerrequisitos
Primero inicia sesión con tu cuenta de Hugging Face:
hf auth login
Asegúrate de tener distilabel instalado:
pip install -U distilabel[vllm]
Pipelines de Distilabel
Los pipelines de Distilabel pueden construirse con cualquier número de pasos o tareas interconectados. La salida de un paso o tarea se alimenta como entrada a otro. Una serie de pasos puede encadenarse para construir pipelines complejos de procesamiento y generación de datos con LLMs. La entrada de cada paso es un lote de datos, que contiene una lista de diccionarios, donde cada diccionario representa una fila del conjunto de datos y las claves son los nombres de las columnas. Para alimentar datos desde y hacia el Hugging Face hub, hemos definido una clase Distiset como una abstracción de datasets.DatasetDict.
Distiset como objeto de dataset
Un Pipeline en distilabel devuelve un tipo especial de datasets.DatasetDict de Hugging Face llamado Distiset.
El Pipeline puede generar varios subconjuntos en el Distiset, que es un objeto similar a un diccionario con una entrada por subconjunto. Un Distiset se puede subir sin problemas al Hugging Face Hub, con todos los subconjuntos en el mismo repositorio.
Cargar datos del Hub en un Distiset
Para mostrar un ejemplo de carga de datos desde el Hub, reproduciremos el artículo de Prometheus 2 y utilizaremos la tarea PrometheusEval implementada en distilabel. Las tareas de Prometheus 2 y Prometheuseval son de evaluación directa y de clasificación por pares, es decir, evaluar la calidad de una respuesta aislada para una instrucción dada, con o sin respuesta de referencia, y evaluar la calidad de una respuesta frente a otra para una instrucción dada, con o sin respuesta de referencia, respectivamente. Utilizaremos estas tareas en un conjunto de datos cargado desde el Hub, creado por el equipo H4 de Hugging Face y llamado 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_columnsLuego, necesitamos llamar a pipeline.run con los parámetros de tiempo de ejecución para que la pipeline pueda iniciarse y los datos puedan almacenarse en el objeto Distiset.
distiset = pipeline.run(
parameters={
task.name: {
"llm": {
"generation_kwargs": {
"max_new_tokens": 1024,
"temperature": 0.7,
},
},
},
},
)Subir un Distiset de distilabel al Hub
Sube el Distiset a un repositorio de Hugging Face, donde cada uno de los subconjuntos corresponderá a una configuración diferente:
distiset.push_to_hub(
"my-org/my-dataset",
commit_message="Initial commit",
private=False,
token=os.getenv("HF_TOKEN"),
)📚 Recursos
- 🚀 Documentación de Distilabel
- 🚀 Documentación de Distilabel - distiset
- 🚀 Documentación de Distilabel - prometheus
- 🆕 Presentamos distilabel