Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Reinforcement fine-tuning (RFT) per i modelli Amazon Nova
Panoramica di
Che cos'è RFT?
Il Reinforcement Fine-Tuning (RFT) migliora le prestazioni del modello addestrandosi sui segnali di feedback (punteggi misurabili o premi che indicano le prestazioni del modello) anziché sulle risposte esatte e corrette. A differenza della messa a punto supervisionata che apprende dalle coppie input-output, RFT utilizza le funzioni di ricompensa per valutare le risposte del modello e ottimizza iterativamente il modello per massimizzare tali ricompense. Questo approccio eccelle quando è difficile definire l'output esatto e corretto, ma è possibile misurare in modo affidabile la qualità della risposta.
Quando usare RFT
Usa RFT quando puoi definire criteri di successo chiari e misurabili ma hai difficoltà a fornire risultati esatti e corretti per la formazione. È ideale per:
Attività in cui la qualità è soggettiva o multiforme (scrittura creativa, ottimizzazione del codice, ragionamento complesso)
Scenari con più soluzioni valide in cui alcune sono chiaramente migliori di altre
Applicazioni che richiedono miglioramento iterativo, personalizzazione o rispetto di regole aziendali complesse
Casi in cui la raccolta di esempi etichettati di alta qualità è costosa o poco pratica
I migliori casi d'uso
RFT eccelle nei settori in cui la qualità dell'output può essere misurata oggettivamente, ma le risposte ottimali sono difficili da definire in anticipo:
Risoluzione di problemi matematici e generazione di codice
Ragionamento scientifico e analisi strutturata dei dati
Compiti che richiedono step-by-step ragionamento o risoluzione di problemi a più turni
Applicazioni che bilanciano più obiettivi (precisione, efficienza, stile)
Scenari in cui il successo può essere verificato a livello di codice attraverso i risultati di esecuzione o le metriche delle prestazioni
Modelli supportati
Amazon NovaLite 2.0
Formato dei dati
I dati di addestramento RFT devono seguire il formato OpenAI Reinforcement Fine-Tuning. Ogni esempio di addestramento è un oggetto JSON contenente:
Un
messagesarray con turni di conversazione, utilizzo e ruolisystemuserUn
reference_answercampo contenente l'output previsto o i criteri di valutazione per il calcolo della ricompensa
Nota
Limitazione attuale: solo testo. Gli ingressi multimodali non sono supportati per RFT.
Esempio: problema matematico
{ "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"] } }
Il reference_answer campo contiene l'output previsto o i criteri di valutazione utilizzati dalla funzione di ricompensa per assegnare un punteggio alla risposta del modello. Non si limita agli output strutturati, ma può contenere qualsiasi formato che aiuti la funzione di ricompensa a valutare la qualità.
Consigli sulle dimensioni dei set di dati
Punto di partenza
Minimo 100 esempi di formazione
Minimo 100 esempi di valutazione
Approccio basato sulla valutazione
Prima di investire nella formazione RFT su larga scala, valuta le prestazioni di base del tuo modello:
Prestazioni elevate (ricompensa superiore al 95 percento): la RFT potrebbe non essere necessaria perché il modello offre già buone prestazioni
Prestazioni molto scarse (ricompensa dello 0%): passate innanzitutto a SFT per stabilire le funzionalità di base
Prestazioni moderate: la tecnologia RFT è probabilmente appropriata
Partire da un set di dati di piccole dimensioni consente di verificare che la funzione di ricompensa sia priva di bug, confermare che RFT sia l'approccio giusto per il caso d'uso, identificare e risolvere tempestivamente i problemi e testare il flusso di lavoro prima di procedere con l'espansione.
Caratteristiche dei dati di addestramento efficaci
Chiarezza e coerenza
I buoni esempi RFT richiedono dati di input chiari e inequivocabili che consentano un calcolo accurato della ricompensa tra i diversi output del modello. Evita il rumore nei dati, ad esempio formattazione incoerente, etichette o istruzioni contraddittorie, istruzioni ambigue e risposte di riferimento contrastanti. Qualsiasi ambiguità condurrà in errore il processo di formazione e indurrà il modello ad apprendere comportamenti non intenzionali.
Diversità
Il tuo set di dati dovrebbe catturare l'intera diversità dei casi d'uso di produzione per garantire solide prestazioni nel mondo reale. Includi diversi formati di input e casi limite, mappa i modelli di utilizzo effettivo della produzione mediante log e analisi degli utenti, campiona diversi tipi di utenti, aree geografiche e variazioni stagionali e includi livelli di difficoltà, da problemi semplici a complessi.
Considerazioni sulla funzione di ricompensa
Progetta la tua funzione di ricompensa per un allenamento efficiente. Dovrebbe essere eseguita in pochi secondi (non minuti), parallelizzarsi efficacemente con il modelloAWS Lambda, restituire punteggi coerenti e affidabili e gestire con eleganza diversi tipi di output del modello. Le funzioni di ricompensa veloci e scalabili consentono un'iterazione rapida e una sperimentazione conveniente.
Proprietà aggiuntive
Il formato di dati RFT supporta campi personalizzati oltre ai requisiti di base dello schema (e). messages reference_answer Questa flessibilità consente di aggiungere tutti i dati aggiuntivi necessari alla funzione di ricompensa per una corretta valutazione.
Nota
Non è necessario configurarlo nella ricetta. Il formato dei dati supporta intrinsecamente campi aggiuntivi. Basta includerli nei dati di allenamento JSON e verranno passati alla funzione di ricompensa sul campo. metadata
Proprietà aggiuntive comuni
task_id— Identificatore univoco per il tracciamentodifficulty_level— Indicatore di complessità del problemadomain— Area o categoria tematicaexpected_reasoning_steps— Numero di passaggi della soluzione
Questi campi aggiuntivi vengono trasferiti alla funzione di ricompensa durante la valutazione, abilitando una sofisticata logica di punteggio personalizzata in base al caso d'uso specifico.
Esempi con proprietà aggiuntive
Implementazione delle funzioni di
Le funzioni di ricompensa sono implementate come funzioni Lambda che valutano le risposte del modello e restituiscono punteggi numerici. La funzione Lambda riceve messaggi e informazioni di base nel formato OpenAI e deve restituire punteggi come dizionario.
autorizzazioni IAM
Assicurati che il tuo ruolo di esecuzione dell' SageMaker IA disponga InvokeFunction delle autorizzazioni per la funzione Lambda.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:my-reward-function-lambda" } ] }
Linee guida di progettazione
Quando scrivi funzioni di ricompensa, procedi come segue:
Classizza le risposte: assegna alla risposta migliore un punteggio chiaramente più alto
Utilizza controlli coerenti: valuta il completamento delle attività, la conformità al formato, la sicurezza e la durata ragionevole
Mantieni una scalabilità stabile: mantieni i punteggi normalizzati e non sfruttabili
Formato dell'interfaccia
La tua funzione di ricompensa deve accettare e restituire dati nel seguente formato.
Struttura di input
[{ "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" } }]
Struttura di output
[{ "id": "123", "aggregate_reward_score": 0.85, "metrics_list": [ { "name": "accuracy", "value": 0.9, "type": "Reward" }, { "name": "policy_compliance", "value": 0.8, "type": "Metric" } ] }]
Esempio di funzione 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)
Configurazione di addestramento
Usa il modello di taccuino SageMaker AI Training Job per iniziare un lavoro di formazione. Per ulteriori informazioni, consulta Creare un lavoro di formazione.
Contenitore di formazione
708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-fine-tune-repo:SM-TJ-RFT-latest
Requisiti delle ist
Il contenitore supporta sia la formazione Full Rank che quella LoRa:
Formazione LoRa: istanze 2/4/6/8 × p5.48xlarge o p5en.48xlarge
Addestramento completo - istanze 2/4/6/8 × vv48xlarge (obbligatorio)
Selezione della modalità di ragionamento
Modalità disponibili
none— Nessun ragionamento (ometti ilreasoning_effortcampo)low— Sovraccarico minimo di ragionamentohigh— Massima capacità di ragionamento (impostazione predefinita quando vienereasoning_effortspecificata)
Nota
Non esiste un'opzione media per RFT. Se il reasoning_effort campo non è presente nella configurazione, il ragionamento è disabilitato. Quando il ragionamento è abilitato, è necessario max_new_tokens impostarlo su 32768 per consentire output di ragionamento estesi.
Quando usare ciascuna modalità
Usa high il ragionamento per attività analitiche complesse, risoluzione di problemi matematici, deduzione logica in più fasi e attività in cui il pensiero aggiunge valore. step-by-step
Usa none (omettireasoning_effort) o low ragiona per semplici domande fattuali, classificazioni dirette, ottimizzazione della velocità e dei costi e risposte dirette alle domande.
Compromessi in termini di costi e prestazioni
Le modalità di ragionamento più avanzate aumentano i tempi e i costi di formazione, la latenza e i costi dell'inferenza e la capacità di modellazione per attività di ragionamento complesse.
Monitoraggio della formazione
I registri di formazione includono metriche complete per ogni fase. Le categorie di metriche chiave includono quanto segue:
Metriche dei premi:
critic/rewards/meancritic/rewards/max,critic/rewards/min(distribuzione dei premi) eval-score/rewards/mean@1(premi di convalida)Comportamento modello:
actor/entropy(variazione delle politiche; più alto equivale a più esplorativo)Integrità della formazione:
actor/pg_loss(perdita del gradiente delle policy),actor/pg_clipfrac(frequenza degli aggiornamenti interrotti) e (entità del gradiente)actor/grad_normCaratteristiche di risposta:
prompt_length/mean,prompt_length/max,prompt_length/min(statistiche sui token di input),response_length/meanresponse_length/max, (statistiche sui token di output) eresponse_length/minresponse/aborted_ratio(frequenza di generazione incompleta; 0 equivale a tutti i dati completati)Prestazioni:
perf/throughput(velocità di formazione),perf/time_per_step(tempo per fase di addestramento) etiming_per_token_ms/*(tempi di elaborazione per token)Utilizzo delle risorse:
perf/max_memory_allocated_gbperf/max_memory_reserved_gb(memoria GPU) eperf/cpu_memory_used_gb(memoria CPU)
Utilizzo di modelli ottimizzati
Al termine dell'addestramento, il checkpoint finale del modello viene salvato nella posizione di output specificata. Il percorso del checkpoint è disponibile nei log di formazione e nel manifest.json file nella posizione di output di Amazon S3 (output_s3_uridefinita nel notebook).
Limitazioni e best practice
Limitazioni
Timeout Lambda: le funzioni Reward devono essere completate entro 15 minuti (previene processi inutili e gestisce i costi)
Solo turno singolo: le conversazioni a turni multipli non sono supportate
Requisiti in materia di dati: richiede una diversità sufficiente; ha difficoltà con ricompense scarse (esempi positivi inferiori al 5%)
Costo computazionale: più costoso della messa a punto supervisionata
Best practice
Inizia in piccolo: inizia con 100-200 esempi, convalida la correttezza della funzione di ricompensa e scala gradualmente in base ai risultati
Valutazione pre-allenamento: verifica le prestazioni del modello di base prima di RFT. Se i premi sono costantemente pari allo 0%, utilizza innanzitutto SFT per stabilire le funzionalità di base. Se i premi sono superiori al 95 percento, RFT potrebbe non essere necessario.
Monitora la formazione: monitora i punteggi medi e la distribuzione dei premi. Fai attenzione all'overfitting (i premi di formazione aumentano mentre i premi di convalida diminuiscono). Presta attenzione a modelli preoccupanti, ad esempio un rallentamento delle ricompense al di sotto di 0,15, l'aumento della varianza delle ricompense nel tempo e il calo delle prestazioni di convalida.
Ottimizzazione delle funzioni di ricompensa: esegui in pochi secondi (non minuti), riduci al minimo le chiamate API esterne, utilizza algoritmi efficienti, implementa la corretta gestione degli errori e sfrutta la scalabilità parallela di Lambda
Strategia di iterazione: se i premi non migliorano, modifica la progettazione della funzione di ricompensa, aumenta la diversità dei set di dati, aggiungi altri esempi rappresentativi e verifica che i segnali di ricompensa siano chiari e coerenti