> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://fr.nvidia-localization.ferndocs.com/fr/nemo/rl/latest/supervised-fine-tuning-in-ne-mo-rl/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://fr.nvidia-localization.ferndocs.com/_mcp/server. # 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](../../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](/fr/nemo/rl/0-2-1/set-up-clusters). Veillez à lancer le job en utilisant `uv`. La commande pour lancer un job SFT est la suivante : ```bash uv run examples/run_sft.py --config ``` Si non spécifié, `config` aura par défaut [examples/configs/sft.yaml](../../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](../../examples/configs/sft.yaml). 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 : ```bash uv run examples/run_sft.py \ cluster.gpus_per_node=1 \ logger.wandb.name="sft-dev-1-gpu" ``` **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 : 1. `formatted_ds` : Le dictionnaire des jeux de données formatés. Ce dictionnaire doit contenir les splits `train` et `validation`, et chaque split doit être conforme au format décrit ci-dessous. 2. `task_spec` : Le `TaskDataSpec` pour 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](/fr/nemo/rl/0-2-1/data-format) 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](../../nemo_rl/data/hf_datasets/squad.py) en a un exemple : ```python def format_squad(data): return { "messages": [ { "role": "system", "content": data["context"], }, { "role": "user", "content": data["question"], }, { "role": "assistant", "content": data["answers"]["text"][0], }, ] } ``` 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](../../examples/configs/sft.yaml) pour un exemple) : 1. Appliquer le modèle de chat par défaut du tokenizer. Pour utiliser le défaut du tokenizer, omettez soit `tokenizer.chat_template` de la configuration, soit définissez `tokenizer.chat_template="default"`. 2. 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_template` sur None comme suit : ```yaml tokenizer: chat_template: NULL ``` 3. Utiliser un modèle personnalisé : Si vous souhaitez utiliser un modèle personnalisé, créez un modèle de chaîne au [format jinja](https://huggingface.co/docs/transformers/v4.34.0/en/chat_templating#how-do-i-create-a-chat-template), et ajoutez cette chaîne à la configuration. Par exemple, ```yaml tokenizer: custom_template: "{% for message in messages %}{%- if message['role'] == 'system' %}{{'Context : ' + message['content'].strip()}}{%- elif message['role'] == 'user' %}{{' Question : ' + message['content'].strip() + ' Réponse : '}}{%- elif message['role'] == 'assistant' %}{{message['content'].strip()}}{%- endif %}{% endfor %}" ``` 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](/fr/nemo/rl/0-2-1/evaluation) pour évaluer les capacités du modèle.