Supervision Fine-Tuning dans NeMo RL
Ce document explique comment effectuer une SFT (Supervision Fine-Tuning) dans NeMo RL. Il décrit les opérations clés, notamment le lancement de runs SFT, la gestion des configurations d’expériences à l’aide de YAML, et l’intégration de jeux de données personnalisés qui répondent à la structure et aux attributs requis.
Lancer un Run SFT
Le script, examples/run_sft.py, peut être utilisé pour lancer une expérience. Ce script peut être lancé localement ou via Slurm. Pour plus de détails sur la configuration de Ray et le lancement d’un job Slurm, consultez la documentation du cluster.
Veillez à lancer le job en utilisant uv. La commande pour lancer un job SFT est la suivante :
Si non spécifié, config aura par défaut examples/configs/sft.yaml.
Exemple de Fichier de Configuration
NeMo RL permet aux utilisateurs de configurer des expériences à l’aide de fichiers de configuration yaml. Un exemple de fichier de configuration SFT se trouve ici.
Pour remplacer une valeur dans la configuration, modifiez soit directement la valeur dans le fichier yaml, soit passez le remplacement via la ligne de commande. Par exemple :
Rappel : N’oubliez pas de définir votre HF_HOME, WANDB_API_KEY, et HF_DATASETS_CACHE (si nécessaire). Vous devrez également effectuer un huggingface-cli login pour les modèles Llama.
Jeux de Données
Les jeux de données SFT dans NeMo RL sont encapsulés à l’aide de classes. Chaque classe de données SFT est censée avoir les attributs suivants :
formatted_ds: Le dictionnaire des jeux de données formatés. Ce dictionnaire doit contenir les splitstrainetvalidation, et chaque split doit être conforme au format décrit ci-dessous.task_spec: LeTaskDataSpecpour ce jeu de données. Cela doit spécifier le nom que vous choisissez pour ce jeu de données.
Les jeux de données SFT sont censés suivre le format de chat Hugging Face. Consultez le document sur les jeux de données de chat pour plus de détails. Si vos données ne sont pas dans le bon format, écrivez simplement un script de prétraitement pour convertir les données dans ce format. data/hf_datasets/squad.py en a un exemple :
NeMo RL SFT utilise des modèles de chat Hugging Face pour formater les exemples individuels. Trois types de modèles de chat sont supportés, qui peuvent être configurés via tokenizer.chat_template dans votre configuration yaml (voir sft.yaml pour un exemple) :
-
Appliquer le modèle de chat par défaut du tokenizer. Pour utiliser le défaut du tokenizer, omettez soit
tokenizer.chat_templatede la configuration, soit définisseztokenizer.chat_template="default". -
Utiliser un modèle “passthrough” qui concatène simplement tous les messages. Ceci est souhaitable si le modèle de chat a été appliqué à votre jeu de données lors d’un prétraitement hors ligne. Dans ce cas, vous devez définir
tokenizer.chat_templatesur None comme suit : -
Utiliser un modèle personnalisé : Si vous souhaitez utiliser un modèle personnalisé, créez un modèle de chaîne au format jinja, et ajoutez cette chaîne à la configuration. Par exemple,
Par défaut, NeMo RL prend en charge les jeux de données Squad et OpenAssistant. Ces deux jeux de données sont téléchargés depuis Hugging Face et prétraités à la volée, donc il n’est pas nécessaire de fournir un chemin vers des jeux de données sur le disque.
Ajouter un nouveau jeu de données est un processus simple.
Tant que votre jeu de données personnalisé possède les attributs formatted_ds et task_spec décrits ci-dessus, il peut servir de remplacement direct pour Squad et OpenAssistant.
Évaluer le Modèle Entraîné
Une fois le processus d’entraînement terminé, vous pouvez vous référer à notre guide d’évaluation pour évaluer les capacités du modèle.