🧩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 regroupement, les paramètres de génération et d'entraînement :
Paramètres d'entraînement
bêta(float, défaut 0.0): coefficient KL.0.0⇒ aucun modèle de référence chargé (mémoire réduite, plus rapide).Plus élevé
bêtacontraint la politique à rester plus proche de la politique de référence.
num_iterations(int, 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 exemple,2= deux passes avant par étape d'accumulation.epsilon(float, défaut 0.2): Valeur de clipping pour les rapports de log-prob au niveau du token (plage typique ≈ [-1.2, 1.2] avec ε par défaut).delta(float, optionnel): Active borne de clipping pour GRPO bilatéral lorsqu'il est défini. SiAucun, le clipping GRPO standard est utilisé. Recommandé> 1 + εlorsqu'activé (selon le rapport INTELLECT-2).epsilon_high(float, optionnel): Epsilon borne supérieure ; prend la valeur par défautepsilonsi non défini. DAPO recommande 0.28.importance_sampling_level(“token” | “sequence”, défaut "token"):"token": rapports bruts par token (un poids par token)."sequence": moyenne des rapports par token en un seul rapport 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 des récompenses au niveau de la séquence.
reward_weights(liste[float], optionnel): Un poids par récompense. SiAucun, tous les poids = 1.0.scale_rewards(str|bool, défaut "group"):Trueou"group": mise à l'échelle par écart-type au sein de chaque groupe (variance unitaire dans le groupe)."batch": mise à l'échelle par écart-type sur l'ensemble du lot (par PPO-Lite).Falseou"none": aucune mise à l'échelle. Le Dr. GRPO recommande de ne pas mettre à l'échelle pour éviter un biais de difficulté provenant de la mise à l'échelle par l'écart-type.
loss_type(str, défaut "dapo"):"grpo": normalise selon 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 quandper_device_train_batch_size == 1).
mask_truncated_completions(bool, 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, nous recommandons donc de le désactiver.# Si mask_truncated_completions est activé, mettez à 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()Cela peut mettre à zéro tous les
completion_maskentrées lorsque de nombreuses complétions sont tronquées, faisantn_mask_per_reward = 0et provoquant que le KL devienne NaN. Voirvllm_importance_sampling_correction(bool, défaut True): Applique Truncated Importance Sampling (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 réglé automatiquement sur True si vous utilisez vLLM/fast_inference ; sinon False.vllm_importance_sampling_cap(float, défaut 2.0): Paramètre de troncature C pour le TIS ; fixe une borne supérieure sur le ratio d'importance pour améliorer la stabilité.dtypelors du choix de float16 ou bfloat16, voir FP16 vs BF16 pour le RL
Paramètres de génération
temperature (float, défauts à 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 avoir de la diversité dans les générations, ce qui aide l'apprentissage.top_p (float, optionnel, défaut 1.0) :Float qui contrôle la probabilité cumulative des tokens les plus probables à considérer. Doit être dans (0, 1]. Réglez à 1.0 pour considérer tous les tokens.top_k (int, optionnel) :Nombre des tokens du vocabulaire ayant la plus grande 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 de 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 se situent dans la plage 0.01-0.2.repetition_penalty (float, optionnel, défauts à 1.0) :Float qui pénalise les nouveaux tokens en fonction de leur apparition dans l'invite 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 vaut par défautgradient_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 inférieur ànum_generations, il passera 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 uniquement). 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., GPU / workers).gradient_accumulation_steps(également appelégradient_accumulation): Nombre de micro-lots à accumuler avant avant d'appliquer la rétropropagation et la mise à jour de l'optimiseur.Taille de lot effective:
Nombre total d'échantillons contribuant aux gradients avant une mise à jour (à travers tous les processus et étapes).
Pas d'optimiseur par génération:
Exemple :
4 / 2 = 2.num_generations: Nombre de générations produites par invite (appliqué après au calcul deeffective_batch_size). Le nombre de invites uniques dans un cycle de génération est :Doit être > 2 pour que GRPO fonctionne.
Exemples de lots 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 ?

