Réglage précis du renforcement (RFT) pour les modèles Amazon Nova - Amazon Bedrock

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 messages tableau de tournants, d'utilisations system et user de rôles conversationnels

  • Un reference_answer champ 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 suivi

  • difficulty_level— Indicateur de complexité du problème

  • domain— Domaine ou catégorie

  • expected_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

Chemistry problem
{ "id": "chem-001", "messages": [ { "role": "system", "content": "You are a helpful chemistry assistant" }, { "role": "user", "content": "Predict hydrogen bond donors and acceptors for this SMILES: CCN(CC)CCC(=O)c1sc(N)nc1C" } ], "reference_answer": { "donor_bond_counts": 2, "acceptor_bond_counts": 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é.

Math problem with metadata
{ "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"] }, "task_id": "algebra_001", "difficulty_level": "easy", "domain": "algebra", "expected_reasoning_steps": 3 }

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 le reasoning_effort champ)

  • low— Frais de raisonnement minimaux

  • high— Capacité de raisonnement maximale (par défaut lorsqu'elle reasoning_effort est 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écompensescritic/rewards/meancritic/rewards/max,, critic/rewards/min (distribution des récompenses) et val-score/rewards/mean@1 (récompenses de validation)

  • Comportement du modèleactor/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) et actor/grad_norm (amplitude du gradient)

  • Caractéristiques de réponseprompt_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) et response/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) et timing_per_token_ms/* (temps de traitement par jeton)

  • Utilisation des ressourcesperf/max_memory_allocated_gb, perf/max_memory_reserved_gb (mémoire GPU) et perf/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