Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Réglage précis du renforcement (RFT) pour les modèles Amazon Nova
Présentation de
Qu'est-ce que le RFT ?
Le réglage fin par renforcement (RFT) améliore les performances du modèle en s'entraînant sur les signaux de feedback (scores mesurables ou récompenses indiquant les performances du modèle) plutôt que sur les bonnes réponses exactes. Contrairement au réglage fin supervisé qui apprend à partir de paires d'entrées-sorties, le RFT utilise des fonctions de récompense pour évaluer les réponses du modèle et optimise le modèle de manière itérative afin de maximiser ces récompenses. Cette approche excelle lorsqu'il est difficile de définir la sortie exacte correcte, mais vous pouvez mesurer de manière fiable la qualité de réponse.
Quand utiliser le RFT
Utilisez la RFT lorsque vous pouvez définir des critères de réussite clairs et mesurables, mais que vous avez du mal à fournir des résultats exacts pour la formation. C'est idéal pour :
Tâches où la qualité est subjective ou multidimensionnelle (écriture créative, optimisation du code, raisonnement complexe)
Scénarios comportant plusieurs solutions valides où certaines sont clairement meilleures que d'autres
Applications nécessitant une amélioration itérative, une personnalisation ou le respect de règles métier complexes
Cas où la collecte d'exemples étiquetés de haute qualité est coûteuse ou peu pratique
Meilleurs cas d'utilisation
La RFT excelle dans les domaines où la qualité de sortie peut être mesurée objectivement, mais où les réponses optimales sont difficiles à définir dès le départ :
Résolution de problèmes mathématiques et génération de code
Raisonnement scientifique et analyse de données structurées
Tâches nécessitant un step-by-step raisonnement ou une résolution de problèmes en plusieurs étapes
Applications équilibrant plusieurs objectifs (précision, efficacité, style)
Scénarios dans lesquels le succès peut être vérifié par programmation par le biais de résultats d'exécution ou de mesures de performance
Modèles pris en charge
Amazon NovaLite 2.0
Format de données
Les données d'entraînement RFT doivent suivre le format OpenAI Reinforcement Fine-Tuning. Chaque exemple d'entraînement est un objet JSON contenant :
Un
messagestableau de tournants, d'utilisationssystemetuserde rôles conversationnelsUn
reference_answerchamp contenant le résultat attendu ou les critères d'évaluation pour le calcul de la récompense
Note
Limite actuelle : texte uniquement. Les entrées multimodales ne sont pas prises en charge pour le RFT.
Exemple : problème mathématique
{ "id": "sample-001", "messages": [ { "role": "system", "content": "You are a math tutor" }, { "role": "user", "content": "Solve: 2x + 5 = 13" } ], "reference_answer": { "solution": "x = 4", "steps": ["2x = 13 - 5", "2x = 8", "x = 4"] } }
Le reference_answer champ contient le résultat attendu ou les critères d'évaluation que votre fonction de récompense utilise pour évaluer la réponse du modèle. Il ne se limite pas aux sorties structurées : il peut contenir n'importe quel format permettant à votre fonction de récompense d'évaluer la qualité.
Recommandations relatives à la taille des jeux
Point de départ
Minimum de 100 exemples de formation
Minimum de 100 exemples d'évaluation
Approche axée sur l'évaluation
Avant d'investir dans une formation RFT à grande échelle, évaluez les performances de base de votre modèle :
Haute performance (récompense supérieure à 95 %) — Le RFT n'est peut-être pas nécessaire car votre modèle fonctionne déjà bien
Très mauvaise performance (récompense de 0 %) — Passez d'abord à SFT pour établir les fonctionnalités de base
Performances modérées — le RFT est probablement approprié
Commencer par un petit ensemble de données vous permet de valider que votre fonction de récompense est exempte de bogues, de confirmer que RFT est la bonne approche pour votre cas d'utilisation, d'identifier et de résoudre les problèmes rapidement, et de tester le flux de travail avant de le développer.
Caractéristiques des données d'entraînement efficaces
Clarté et cohérence
Les bons exemples de RFT nécessitent des données d'entrée claires et sans ambiguïté qui permettent un calcul précis des récompenses sur les différents modèles de sortie. Évitez le bruit dans vos données, notamment une mise en forme incohérente, des étiquettes ou des instructions contradictoires, des instructions ambiguës et des réponses de référence contradictoires. Toute ambiguïté induira le processus de formation en erreur et incitera le modèle à apprendre des comportements involontaires.
Diversité
Votre ensemble de données doit capturer toute la diversité des cas d'utilisation en production afin de garantir des performances robustes dans le monde réel. Incluez différents formats de saisie et scénarios extrêmes, cartographiez les modèles d'utilisation réels de la production à partir des journaux et des analyses des utilisateurs, échantillonnez les types d'utilisateurs, les régions géographiques et les variations saisonnières, et incluez des niveaux de difficulté allant des problèmes les plus simples aux plus complexes.
Considérations relatives aux fonctions de récompense
Concevez votre fonction de récompense pour un entraînement efficace. Il doit s'exécuter en quelques secondes (et non en quelques minutes), se paralléliser efficacementAWS Lambda, renvoyer des scores cohérents et fiables et gérer les différents types de sorties de modèles avec élégance. Des fonctions de récompense rapides et évolutives permettent une itération rapide et une expérimentation rentable.
Propriétés supplémentaires
Le format de données RFT prend en charge les champs personnalisés au-delà des exigences de base du schéma (messagesetreference_answer). Cette flexibilité vous permet d'ajouter toutes les données supplémentaires dont votre fonction de récompense a besoin pour une évaluation correcte.
Note
Vous n'avez pas besoin de le configurer dans votre recette. Le format de données prend en charge de manière inhérente des champs supplémentaires. Il suffit de les inclure dans le JSON de vos données d'entraînement, et elles seront transmises à votre fonction de récompense metadata sur le terrain.
Propriétés supplémentaires communes
task_id— Identifiant unique pour le suividifficulty_level— Indicateur de complexité du problèmedomain— Domaine ou catégorieexpected_reasoning_steps— Nombre d'étapes de la solution
Ces champs supplémentaires sont transmis à votre fonction de récompense lors de l'évaluation, ce qui permet une logique de notation sophistiquée adaptée à votre cas d'utilisation spécifique.
Exemples avec des propriétés supplémentaires
Mettre en œuvre des fonctions de récompense
Les fonctions de récompense sont implémentées sous forme de fonctions Lambda qui évaluent les réponses du modèle et renvoient des scores numériques. La fonction Lambda reçoit des messages et des informations de base au format OpenAI et doit renvoyer les scores sous forme de dictionnaire.
Autorisations IAM
Assurez-vous que votre rôle d'exécution SageMaker AI dispose InvokeFunction d'autorisations pour la fonction Lambda.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:my-reward-function-lambda" } ] }
Directives de conception
Lorsque vous rédigez des fonctions de récompense, procédez comme suit :
Classez les réponses — Donnez à la meilleure réponse un score nettement supérieur
Utilisez des contrôles cohérents : évaluez l'achèvement des tâches, le respect du format, la sécurité et une durée raisonnable
Maintenez une mise à l'échelle stable : maintenez les scores normalisés et non exploitables
Format d'interface
Votre fonction de récompense doit accepter et renvoyer les données dans le format suivant.
Structure d'entrée
[{ "id": "123", "messages": [ { "role": "user", "content": "Do you have a dedicated security team?" }, { "role": "assistant", "content": "As an AI developed by Amazon, I don not have a dedicated security team..." } ], "metadata": { "reference_answer": { "compliant": "No", "explanation": "As an AI developed by Company, I do not have a traditional security team..." }, "my_key": "sample-001" } }]
Structure de sortie
[{ "id": "123", "aggregate_reward_score": 0.85, "metrics_list": [ { "name": "accuracy", "value": 0.9, "type": "Reward" }, { "name": "policy_compliance", "value": 0.8, "type": "Metric" } ] }]
Exemple de fonction Lambda
from typing import List import json from dataclasses import asdict, dataclass @dataclass class RewardOutput: """Reward service output.""" id: str aggregate_reward_score: float def lambda_handler(event, context): """Main lambda handler""" return lambda_grader(event) def lambda_grader(samples: list[dict]) -> list[dict]: """Core grader function""" scores: List[RewardOutput] = [] for sample in samples: idx = sample["id"] ground_truth = sample.get("metadata", {}).get("reference_answer") if "messages" not in sample: print(f"Messages is None/empty for id: {idx}") ro = RewardOutput(id=idx, aggregate_reward_score=0.0) scores.append(ro) continue if ground_truth is None: print(f"No answer found in ground truth for id: {idx}") ro = RewardOutput(id=idx, aggregate_reward_score=0.0) scores.append(ro) continue # Get model's response (last turn is assistant turn) last_message = sample["messages"][-1] assert last_message["role"] == "assistant", "Last message must be from assistant" model_text = last_message["content"] ground_truth_text = _extract_ground_truth_text(ground_truth) if model_text.lower() == ground_truth_text.lower(): score = 1.0 else: score = 0.0 ro = RewardOutput(id=idx, aggregate_reward_score=score) scores.append(ro) return [asdict(score) for score in scores] def _extract_ground_truth_text(ground_truth) -> str: """Turn the ground_truth field into a plain string.""" if isinstance(ground_truth, str): return ground_truth if isinstance(ground_truth, dict): if "explanation" in ground_truth and isinstance(ground_truth["explanation"], str): return ground_truth["explanation"] if "answer" in ground_truth and isinstance(ground_truth["answer"], str): return ground_truth["answer"] return json.dumps(ground_truth, ensure_ascii=False) return str(ground_truth)
Configuration d’entraînement
Utilisez le modèle de carnet de notes SageMaker AI Training Job pour démarrer une tâche de formation. Pour plus d'informations, voir Création d'un poste de formation.
Conteneur de formation
708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-fine-tune-repo:SM-TJ-RFT-latest
Exigences relatives à l'instance
Le conteneur prend en charge à la fois les formations Full Rank et LoRa :
Entraînement LoRa — instances 2/4/6/8 × p5.48xlarge ou p5en.48xlarge
Entraînement complet — 2/4/6/8 × instances vv48xlarge (obligatoire)
Sélection du mode de raisonnement
Modes disponibles
none— Aucun raisonnement (omettre lereasoning_effortchamp)low— Frais de raisonnement minimauxhigh— Capacité de raisonnement maximale (par défaut lorsqu'ellereasoning_effortest spécifiée)
Note
Il n'existe pas d'option moyenne pour le RFT. Si le reasoning_effort champ est absent de votre configuration, le raisonnement est désactivé. Lorsque le raisonnement est activé, vous devez le définir sur 32768 max_new_tokens pour prendre en compte les résultats de raisonnement étendus.
Quand utiliser chaque mode
Utilisez high le raisonnement pour les tâches analytiques complexes, la résolution de problèmes mathématiques, la déduction logique en plusieurs étapes et les tâches dans lesquelles la step-by-step réflexion apporte une valeur ajoutée.
Utilisez none (omettezreasoning_effort) ou low raisonnez pour des requêtes factuelles simples, des classifications directes, une optimisation de la vitesse et des coûts et des réponses directes aux questions.
Compromis en termes de coûts et de performances
Les modes de raisonnement avancés augmentent le temps et les coûts de formation, la latence et le coût des inférences, ainsi que les capacités de modélisation pour les tâches de raisonnement complexes.
Formation en matière de surveillance
Les journaux d'entraînement incluent des mesures complètes à chaque étape. Les principales catégories de mesures sont les suivantes :
Indicateurs de récompenses —
critic/rewards/meancritic/rewards/max,,critic/rewards/min(distribution des récompenses) etval-score/rewards/mean@1(récompenses de validation)Comportement du modèle —
actor/entropy(variation des politiques ; une valeur plus élevée correspond à une approche plus exploratoire)État de la formation :
actor/pg_loss(perte du gradient des politiques),actor/pg_clipfrac(fréquence des mises à jour découpées) etactor/grad_norm(amplitude du gradient)Caractéristiques de réponse —
prompt_length/mean,prompt_length/max,prompt_length/min(statistiques des jetons d'entrée),response_length/mean,response_length/max,response_length/min(statistiques des jetons de sortie) etresponse/aborted_ratio(taux de génération incomplet ; 0 est égal à tout terminé)Performances :
perf/throughput(débit d'entraînement),perf/time_per_step(temps par étape d'entraînement) ettiming_per_token_ms/*(temps de traitement par jeton)Utilisation des ressources —
perf/max_memory_allocated_gb,perf/max_memory_reserved_gb(mémoire GPU) etperf/cpu_memory_used_gb(mémoire CPU)
Utilisation de modèles affinés
Une fois l'entraînement terminé, le point de contrôle final du modèle est enregistré à l'emplacement de sortie que vous avez spécifié. Le chemin du point de contrôle est disponible dans les journaux d'entraînement et le manifest.json fichier dans l'emplacement de sortie Amazon S3 (défini output_s3_uri dans votre bloc-notes).
Limites et meilleures pratiques
Limites
Délai Lambda : les fonctions de récompense doivent être achevées dans les 15 minutes (pour éviter l'emballement des processus et gérer les coûts)
Un tour uniquement — Les conversations à plusieurs tours ne sont pas prises en charge
Besoins en matière de données — Nécessite une diversité suffisante ; peine à obtenir de maigres récompenses (moins de 5 % d'exemples positifs)
Coût de calcul : plus coûteux que le réglage fin supervisé
Bonnes pratiques
Commencez modestement : commencez par 100 à 200 exemples, validez l'exactitude de la fonction de récompense et échelonnez progressivement en fonction des résultats
Évaluation préalable à l'entraînement — Testez les performances du modèle de référence avant le RFT. Si les récompenses sont toujours de 0 %, utilisez d'abord SFT pour établir les capacités de base. Si les récompenses sont supérieures à 95 %, le RFT peut être inutile.
Surveillez la formation : suivez les scores moyens des récompenses et leur distribution. Attention au surajustement (les récompenses d'entraînement augmentent tandis que les récompenses de validation diminuent). Recherchez des tendances inquiétantes telles que le plafonnement des récompenses en dessous de 0,15, l'augmentation de la variance des récompenses au fil du temps et la baisse des performances de validation.
Optimisez les fonctions de récompense : exécutez-les en quelques secondes (et non en quelques minutes), minimisez les appels d'API externes, utilisez des algorithmes efficaces, implémentez une gestion appropriée des erreurs et profitez de la mise à l'échelle parallèle de Lambda
Stratégie d'itération — Si les récompenses ne s'améliorent pas, ajustez la conception de la fonction de récompense, augmentez la diversité des ensembles de données, ajoutez des exemples plus représentatifs et vérifiez que les signaux de récompense sont clairs et cohérents