Hub documentation
Distilabel
Distilabel
Distilabel est un framework pour les données synthétiques et les retours d’IA destiné aux ingénieurs qui ont besoin de pipelines rapides, fiables et évolutifs, fondés sur des articles de recherche vérifiés.
Distilabel peut être utilisé pour générer des données synthétiques et des retours d’IA pour une grande variété de projets, y compris le NLP prédictif traditionnel (classification, extraction, etc.) ou les scénarios de modèles de langage génératifs et de grande taille (suivi d’instructions, génération de dialogues, évaluation, etc.). L’approche programmatique de Distilabel vous permet de construire des pipelines évolutifs de génération de données et de retours d’IA. L’objectif de distilabel est d’accélérer votre développement IA en générant rapidement des jeux de données de haute qualité et variés, basés sur des méthodologies de recherche vérifiées pour la génération et l’évaluation par retours d’IA.
Que construisent les gens avec distilabel ?
La communauté Argilla utilise distilabel pour créer d'excellents jeux de données et modèles.
- Le 1M OpenHermesPreference est un jeu de données d'environ 1 million de préférences IA générées à l'aide du LLM teknium/OpenHermes-2.5. C'est un excellent exemple de la manière dont vous pouvez utiliser distilabel pour mettre à l'échelle et accélérer le développement de jeux de données.
- jeu de données Intel Orca DPO de distilabel utilisé pour l’ajustement fin du modèle OpenHermes amélioré. Ce jeu de données a été construit en combinant la curation humaine dans Argilla avec les retours d’IA de distilabel, aboutissant à une version améliorée du jeu de données Intel Orca et surpassant les modèles ajustés sur le jeu de données original.
- Le jeu de données DPO haiku est un exemple de la façon dont n’importe qui peut créer un jeu de données synthétiques pour une tâche spécifique, qui, après curation et évaluation, peut être utilisé pour l’ajustement fin de LLM personnalisés.
Prérequis
Connectez-vous d'abord avec votre compte Hugging Face :
hf auth login
Assurez-vous d'avoir installé distilabel :
pip install -U distilabel[vllm]
Pipelines Distilabel
Les pipelines Distilabel peuvent être construits avec n’importe quel nombre d’étapes ou de tâches interconnectées. La sortie d’une étape ou d’une tâche est transmise en entrée à une autre. Une série d’étapes peut être enchaînée pour construire des pipelines complexes de traitement et de génération de données avec des LLM. L’entrée de chaque étape est un lot de données, contenant une liste de dictionnaires, où chaque dictionnaire représente une ligne du jeu de données et où les clés sont les noms des colonnes. Pour alimenter les données depuis et vers le hub Hugging Face, nous avons défini une classe Distiset comme abstraction d’un datasets.DatasetDict.
Distiset en tant qu'objet de jeu de données
Un Pipeline dans distilabel renvoie un type spécial de datasets.DatasetDict de Hugging Face appelé Distiset.
Le Pipeline peut générer plusieurs sous-ensembles dans le Distiset, qui est un objet de type dictionnaire avec une entrée par sous-ensemble. Un Distiset peut ensuite être poussé sans accroc vers le Hugging Face Hub, avec tous les sous-ensembles dans le même dépôt.
Charger des données depuis le Hub dans un Distiset
Pour illustrer un exemple de chargement de données depuis le Hub, nous reproduirons l'article Prometheus 2 et utiliserons la tâche PrometheusEval implémentée dans distilabel. Les tâches Prometheus 2 et Prometheuseval sont des tâches d'évaluation directe et de classement par paires, c'est-à-dire l'évaluation de la qualité d'une réponse isolée pour une instruction donnée, avec ou sans réponse de référence, et l'évaluation de la qualité d'une réponse par rapport à une autre pour une instruction donnée, avec ou sans réponse de référence, respectivement. Nous utiliserons ces tâches sur un jeu de données chargé depuis le Hub, créé par l'équipe H4 de Hugging Face et nommé 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_columnsEnsuite, nous devons appeler pipeline.run avec les paramètres d'exécution afin que le pipeline puisse être lancé et que les données soient stockées dans l'objet Distiset.
distiset = pipeline.run(
parameters={
task.name: {
"llm": {
"generation_kwargs": {
"max_new_tokens": 1024,
"temperature": 0.7,
},
},
},
},
)Pousser un Distiset distilabel vers le Hub
Poussez le Distiset vers un dépôt Hugging Face, où chacun des sous-ensembles correspondra à une configuration différente :
distiset.push_to_hub(
"my-org/my-dataset",
commit_message="Initial commit",
private=False,
token=os.getenv("HF_TOKEN"),
)📚 Ressources
- 🚀 Documentation Distilabel
- 🚀 Documentation Distilabel - distiset
- 🚀 Documentation Distilabel - prometheus
- 🆕 Présentation de distilabel