🧩Documentation avancée sur l'apprentissage par renforcement
Paramètres de documentation avancés lors de l'utilisation d'Unsloth avec GRPO.
Guides détaillés sur la réalisation de GRPO avec Unsloth pour le batching, la génération et les paramètres d'entraînement :
Paramètres d'entraînement
beta(float, par défaut 0.0): coefficient KL.0.0⇒ aucun modèle de référence chargé (mémoire moindre, plus rapide).Plus élevé
betacontraint la politique à rester plus proche de la politique de référence.
num_iterations(int, par défaut 1): Époques PPO par lot (μ dans l'algorithme). Rejoue les données à l'intérieur de chaque étape d'accumulation de gradient ; par ex.,2= deux passes avant par étape d'accumulation.epsilon(float, par défaut 0.2): Valeur de clipping pour les rapports de log-prob au niveau du token (plage typique de ratio ≈ [-1.2, 1.2] avec ε par défaut).delta(float, optionnel): Active borne de clipping pour GRPO à deux côtés lorsqu'elle est définie. SiNone, le clipping GRPO standard est utilisé. Recommandé> 1 + εlorsqu'activé (selon le rapport INTELLECT-2).epsilon_high(float, optionnel): Epsilon borne supérieure ; par défautepsilonsi non défini. DAPO recommande 0.28.importance_sampling_level("token" | "sequence", par défaut "token"):"token": rapports bruts par token (un poids par token)."sequence": moyenne des rapports par token en un seul ratio au niveau de la séquence. GSPO montre que l'échantillonnage au niveau de la séquence donne souvent un entraînement plus stable pour les récompenses au niveau de la séquence.
reward_weights(list[float], optionnel): Un poids par récompense. SiNone, tous les poids = 1.0.scale_rewards(str|bool, par défaut "group"):Trueou"group": mettre à l'échelle par écart-type au sein de chaque groupe (variance unité dans le groupe)."batch": mettre à l'échelle par écart-type sur l'ensemble du lot (par PPO-Lite).Falseou"none": pas de mise à l'échelle. Le Dr. GRPO recommande de ne pas mettre à l'échelle afin d'éviter le biais de difficulté introduit par la mise à l'échelle par écart-type.
loss_type(str, par défaut "dapo"):"grpo": normalise par la longueur de la séquence (biais de longueur ; non recommandé)."dr_grpo": normalise par une constante globale (introduite dans Dr. GRPO ; supprime le biais de longueur). Constante ≈max_completion_length."dapo"(par défaut): normalise par tokens actifs dans le lot accumulé global (introduit dans DAPO ; supprime le biais de longueur)."bnpo": normalise par tokens actifs dans le lot local seulement (les résultats peuvent varier selon la taille du lot local ; équivaut à GRPO lorsqueper_device_train_batch_size == 1).
mask_truncated_completions(bool, par défaut False): LorsqueTrue, les complétions tronquées sont exclues de la perte (recommandé par DAPO pour la stabilité). Remarque: Il existe quelques problèmes de KL avec ce drapeau, donc nous recommandons de le désactiver.# Si mask_truncated_completions est activé, mettre à zéro les complétions tronquées dans completion_mask if self.mask_truncated_completions: truncated_completions = ~is_eos.any(dim=1) completion_mask = completion_mask * (~truncated_completions).unsqueeze(1).int()Ceci peut mettre à zéro tous les
completion_maskentrées lorsque de nombreuses complétions sont tronquées, rendantn_mask_per_reward = 0et faisant que le KL devienne NaN. Voirvllm_importance_sampling_correction(bool, par défaut True): Applique l'échantillonnage d'importance tronqué (TIS) pour corriger les effets hors-politique lorsque la génération (par ex., vLLM / fast_inference) diffère du backend d'entraînement. Dans Unsloth, ceci est automatiquement défini sur True si vous utilisez vLLM/fast_inference ; sinon False.vllm_importance_sampling_cap(float, par défaut 2.0): Paramètre de troncature C pour le TIS ; fixe une borne supérieure sur le ratio d'échantillonnage d'importance pour améliorer la stabilité.dtypelors du choix float16 ou bfloat16, voir FP16 vs BF16 pour le RL
RL sur des modèles non pris en charge :
Vous pouvez également exécuter le RL avec Unsloth sur des modèles qui ne sont pas pris en charge par vLLM, tels que Qwen3.5. Il suffit de définir fast_inference=False lors du chargement du modèle.
Paramètres de génération
temperature (float, par défaut 1.0) :Température pour l'échantillonnage. Plus la température est élevée, plus les complétions sont aléatoires. Assurez-vous d'utiliser une température relativement élevée (1.0) pour obtenir de la diversité dans les générations, ce qui aide l'apprentissage.top_p (float, optionnel, par défaut 1.0) :Float qui contrôle la probabilité cumulative des meilleurs tokens à considérer. Doit être dans (0, 1]. Mettre à 1.0 pour considérer tous les tokens.top_k (int, optionnel) :Nombre des tokens du vocabulaire avec la plus haute probabilité à conserver pour le filtrage top-k. Si None, le filtrage top-k est désactivé et tous les tokens sont considérés.min_p (float, optionnel) :Probabilité minimale du token, qui sera mise à l'échelle par la probabilité du token le plus probable. Elle doit être une valeur entre 0.0 et 1.0. Les valeurs typiques sont dans la plage 0.01-0.2.repetition_penalty (float, optionnel, par défaut 1.0) :Float qui pénalise les nouveaux tokens en fonction de leur apparition dans le prompt et le texte généré jusqu'à présent. Les valeurs > 1.0 encouragent le modèle à utiliser de nouveaux tokens, tandis que les valeurs < 1.0 encouragent le modèle à répéter des tokens.steps_per_generation : (int, optionnel) :Nombre d'étapes par génération. Si None, il est par défaut àgradient_accumulation_steps. Mutuellement exclusif avecgeneration_batch_size.
C'est un peu déroutant de jouer avec ce paramètre, il est recommandé de modifier per_device_train_batch_size et l'accumulation de gradient pour les tailles de lot
Paramètres de lot et de débit
Paramètres qui contrôlent les lots
train_batch_size: Nombre d'échantillons par processus par étape. Si cet entier est moins quenum_generations, il sera par défaut ànum_generations.steps_per_generation: Nombre de micro-lots qui contribuent à le calcul de la perte d'une génération (passes avant seulement). Un nouveau lot de données est généré tous lessteps_per_generationsteps ; le timing de la rétropropagation dépend degradient_accumulation_steps.num_processes: Nombre de processus d'entraînement distribués (par ex., GPUs / workers).gradient_accumulation_steps(aussi appelégradient_accumulation): Nombre de micro-lots à accumuler avant d'appliquer la rétropropagation et la mise à jour de l'optimiseur.Taille de lot effective:
Échantillons totaux contribuant aux gradients avant une mise à jour (à travers tous les processus et étapes).
Pas de l'optimiseur par génération:
Exemple :
4 / 2 = 2.num_generations: Nombre de générations produites par prompt (appliqué après le calcul deeffective_batch_size). Le nombre de prompts uniques dans un cycle de génération est :Doit être > 2 pour que GRPO fonctionne.
Exemples de batchs GRPO
Les tableaux ci-dessous illustrent comment les lots circulent à travers les étapes, quand les mises à jour de l'optimiseur ont lieu, et comment de nouveaux lots sont générés.
Exemple 1
Cycle de génération A
0
[0,0,0]
1
[1,1,1]
→ mise à jour de l'optimiseur (accum = 2 atteint)
2
[2,2,2]
3
[3,3,3]
mise à jour de l'optimiseur
Cycle de génération B
0
[4,4,4]
1
[5,5,5]
→ mise à jour de l'optimiseur (accum = 2 atteint)
2
[6,6,6]
3
[7,7,7]
mise à jour de l'optimiseur
Exemple 2
Cycle de génération A
0
[0,0,0]
1
[1,1,1]
2
[2,2,2]
3
[3,3,3]
mise à jour de l'optimiseur (accum = 4 atteint)
Cycle de génération B
0
[4,4,4]
1
[5,5,5]
2
[6,6,6]
3
[7,7,7]
mise à jour de l'optimiseur (accum = 4 atteint)
Exemple 3
Cycle de génération A
0
[0,0,0]
1
[0,1,1]
2
[1,1,3]
3
[3,3,3]
mise à jour de l'optimiseur (accum = 4 atteint)
Cycle de génération B
0
[4,4,4]
1
[4,5,5]
2
[5,5,6]
3
[6,6,6]
mise à jour de l'optimiseur (accum = 4 atteint)
Exemple 4
Cycle de génération A
0
[0,0,0, 1,1,1]
1
[2,2,2, 3,3,3]
mise à jour de l'optimiseur (accum = 2 atteint)
Cycle de génération B
0
[4,4,4, 5,5,5]
1
[6,6,6, 7,7,7]
mise à jour de l'optimiseur (accum = 2 atteint)
Référence rapide des formules
Mis à jour
Ce contenu vous a-t-il été utile ?

