> 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/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://fr.nvidia-localization.ferndocs.com/fr/_mcp/server.

# SFT sur OpenMathInstruct-2

Ce guide explique comment utiliser NeMo RL pour exécuter SFT sur le jeu de données d'instruction mathématique [nvidia/OpenMathInstruct-2](https://huggingface.co/datasets/nvidia/OpenMathInstruct-2). Nous montrerons ensuite comment utiliser les scripts d'évaluation de NeMo RL pour évaluer le modèle entraîné sur le [benchmark MATH-500](https://huggingface.co/datasets/HuggingFaceH4/MATH-500).

## Entraîner le Modèle

Pour entraîner le modèle à l'aide de NeMo RL, utilisez le fichier de configuration `examples/configs/recipes/tutorials/sft/sft_openmathinstruct2.yaml`. Ce fichier correspond de près aux paramètres d'expérience dans le [document original OpenMathInstruct-2](https://arxiv.org/abs/2410.01560).

```
uv run examples/run_sft.py --config=examples/configs/sft_openmathinstruct2.yaml
```

### Splits du Jeu de Données

OpenMathInstruct-2 dispose de plusieurs versions de différentes tailles. Configurez la version du jeu de données via la configuration `data.split` :

* `train` : 14 M de paires problème-solution complètes
* `train_1M`, `train_2M`, `train_5M` : sous-ensembles sous-échantillonnés de manière équitable de 1M, 2M ou 5M d'exemples

Par défaut, la configuration utilise le sous-ensemble de 1M (`data.split=train_1M`).

### Temps d'Entraînement

La configuration par défaut utilise 8 GPU (`cluster.gpus_per_node`) sur 1 nœud (`cluster.num_nodes`), ce qui devrait terminer 1 époque d'entraînement pour le jeu de données `train_1M` (1855 étapes) en environ 20 heures. Des nœuds supplémentaires peuvent être utilisés pour accélérer l'entraînement. Nous avons constaté dans nos expériences qu'en utilisant 8 nœuds, nous pouvons terminer 1 époque d'entraînement pour le jeu de données `train_1M` en moins de 4 heures.

## Évaluer le Modèle

Tout au long de l'entraînement, les points de contrôle du modèle seront enregistrés dans le dossier `results/sft_openmathinstruct2` (spécifié par `checkpointing.checkpoint_dir`). Pour évaluer le modèle, nous devons d'abord convertir le point de contrôle distribué PyTorch au format Hugging Face :

```
uv run examples/converters/convert_dcp_to_hf.py \
    --config=results/sft_openmathinstruct2/step_1855/config.yaml \
    --dcp-ckpt-path=results/sft_openmathinstruct2/step_1855/policy/weights \
    --hf-ckpt-path=results/sft_openmathinstruct2/step_1855/hf
```

Remplacez `results/sft_openmathinstruct2/step_1855` par le chemin du point de contrôle que vous évaluez. Le point de contrôle Hugging Face résultant sera enregistré dans `--hf-ckpt-path`.

Pour évaluer sur le [benchmark MATH-500](https://huggingface.co/datasets/HuggingFaceH4/MATH-500), utilisez la commande suivante :

```
uv run examples/run_eval.py \
    --config=examples/configs/evals/eval.yaml \
    generation.model_name=results/sft_openmathinstruct2/step_1855/hf \
    tokenizer.name=meta-llama/Llama-3.1-8B-Instruct \
    data.dataset_name=HuggingFaceH4/MATH-500 \
    data.dataset_key=test
```

Utilisez `generation.model_name` pour spécifier le chemin du point de contrôle Hugging Face.

## Résultats

Dans cette section, nous présentons les résultats de plusieurs expériences de référence pour les versions `train_1M` et `train` du jeu de données.

### train\_1M

En utilisant les instructions ci-dessus pour entraîner un modèle Llama-3.1-8B pendant 1 époque sur la version `train_1M` du jeu de données OpenMathInstruct-2, nous obtenons la courbe de perte suivante :

![image](/fr/_fern-img/d9df772588a100129c5406572fc915a22f952ee40f477a2b4972243f25fcda81.webp)

En évaluant le point de contrôle final sur MATH-500, nous obtenons le résultat suivant :

```
============================================================
model_name='hf' dataset_name='MATH-500'
max_new_tokens=2048 temperature=0.0 top_p=1.0 top_k=-1

metric='pass@1' num_tests_per_prompt=1

score=0.5020 (251.0/500)
============================================================
```

À titre de référence, en utilisant NeMo-Aligner et NeMo-Skills (comme dans le [document original OpenMathInstruct-2](https://arxiv.org/abs/2410.01560)) pour entraîner et évaluer le même modèle sur le même jeu de données, on obtient le même score de 0.5020 sur MATH-500.

### train

Nous avons également entraîné un modèle Llama-3.1-8B pendant 1 époque sur la version complète `train` du jeu de données OpenMathInstruct-2. Nous obtenons la courbe de perte suivante :

![image](/fr/_fern-img/2daa89bd8c58ff258e1329b6971678e50dc61af160f607e77fc8f49120f4adae.webp)

En évaluant le point de contrôle final sur MATH-500, nous obtenons le résultat suivant :

```
============================================================
model_name='hf' dataset_name='MATH-500'
max_new_tokens=2048 temperature=0.0 top_p=1.0 top_k=-1

metric='pass@1' num_tests_per_prompt=1

score=0.6220 (311.0/500)
============================================================
```

En utilisant NeMo-Aligner et NeMo-Skills pour entraîner le modèle dans les mêmes paramètres, on obtient un score de 0.6140 (307/500).

À titre de référence supplémentaire, en utilisant un point de contrôle après 10 000 étapes d'entraînement avec NeMo-RL, on obtient un score de 0.5800 (290.0/500).