Ottimizzazione delle politiche prossimali (PPO) - Amazon SageMaker AI

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à.

Ottimizzazione delle politiche prossimali (PPO)

L'ottimizzazione delle politiche prossimali (PPO) è il processo di utilizzo di diversi modelli di machine learning per addestrare e valutare un modello. I seguenti modelli fanno parte del processo PPO:

  • Modello di formazione o politica degli attori: un modello di messa a punto supervisionata (SFT) che viene perfezionato e aggiornato in ogni epoca. Gli aggiornamenti vengono effettuati campionando le istruzioni, generando completamenti e aggiornando i pesi utilizzando un obiettivo sostitutivo ritagliato. Ciò limita la modifica della redditività dei log per token in modo che ogni fase della politica sia prossima a quella precedente, preservando la stabilità della formazione.

  • Modello di generazione degli attori: un modello che genera completamenti o risposte tempestivi da giudicare in base al modello di ricompensa e al modello critico. I pesi di questo modello vengono aggiornati in base al modello di formazione degli attori o al modello politico di ogni epoca.

  • Modello di ricompensa: un modello con pesi congelati che viene utilizzato per comporre la colonna sonora del modello della generazione degli attori.

  • Modello critico: un modello con pesi non congelati utilizzato per comporre la colonna sonora del modello della generazione degli attori. Questo punteggio viene spesso visto come una stima della ricompensa totale che l'attore riceve quando genera i token rimanenti.

  • Modello di ancoraggio: modello SFT con pesi congelati utilizzato per calcolare la divergenza KL tra il modello di treno ad attori e il modello base. Il modello di ancoraggio garantisce che gli aggiornamenti al modello di attore non siano troppo drastici rispetto al modello base. Cambiamenti drastici possono portare all'instabilità o al degrado delle prestazioni.

I dati di addestramento devono essere in formato JSONL in cui ogni riga contiene un singolo oggetto JSON che rappresenta un esempio di addestramento. Ecco un esempio:

{ "turns": ["string", "string", ...], // Required "turns_to_mask": [integer, integer, ...], // Required "reward_category": "string", // Required "meta_data": {} // Optional }
  • turnsè una matrice di matrici di stringhe di conversazione che rappresentano la sequenza di dialogo. Questa riga contiene i prompt di sistema, i messaggi degli utenti e le risposte dei bot. I messaggi utente in genere terminano con «Bot:" per indicare dove inizia l'output del modello. Ad esempio, [["System prompt"], ["User: Question Bot:"], ["Bot response"]].

  • turns_to_maskè una matrice di indici basati su 0 che identificano quali curve non devono ricevere aggiornamenti in base al gradiente. I turni mascherati sono in genere istruzioni di sistema e turni utente. Ad esempio, [0, 1, 3] maschera il prompt del sistema e i messaggi utente (il primo e il terzo messaggio).

  • reward_categoryè una stringa che identifica gli aspetti delle prestazioni del modello da valutare. Viene utilizzato per selezionare la categoria di modello di ricompensa appropriata durante l'allenamento. La categoria di ricompensa è disponibile per le seguenti categorie di premi: defaultmath,coding,if,rag, erai.

  • meta_dataè un oggetto opzionale che contiene informazioni contestuali o fondate sulla verità. Ciò può includere identificatori, informazioni sulla fonte o contesto della conversazione. La struttura è flessibile in base alle esigenze del set di dati.

Ecco un esempio di record:

{ "turns": ["You are a helpful AI assistant.", "User: What is ML? Bot:", "Machine learning is...", "User: Examples? Bot:", "Email spam filtering is..." ], "turns_to_mask": [0, 1, 3], "reward_category": "default", "meta_data": { "messages": [{ "role": "system", "content": "You are a helpful AI assistant." }, { "role": "user", "content": "What is ML?" }, { "role": "assistant", "content": "Machine learning is..." }, { "role": "user", "content": "Examples?" }, { "role": "assistant", "content": "Email spam filtering is..." } ] } }

Il framework di modellazione delle ricompense implementa l'ottimizzazione multidimensionale su obiettivi categoriali distinti per facilitare una solida convergenza dei modelli. La categoria di ricompensa deve essere selezionata in base all'attività per cui il modello deve essere ottimizzato.

Consigliamo le seguenti linee guida per scegliere il framework giusto per le tue attività:

  • default: Un ottimizzatore generico per attività di conversazione standard e interazioni di base. Utilizzato per conversazioni e discussioni generali, attività di scrittura di base, risposte a domande semplici e richieste di conoscenze non specializzate.

    Ecco un esempio:

    { "turns": ["Write a summary of climate change"], "turns_to_mask": [0], "reward_category": "default" }
  • math: Un ottimizzatore specializzato per calcoli matematici e attività di ragionamento numerico. Utilizzato per la risoluzione di problemi matematici, calcoli aritmetici, equazioni algebriche, problemi geometrici e analisi statistiche.

    Ecco un esempio:

    { "turns": ["Calculate the derivative of x²"], "turns_to_mask": [0], "reward_category": "math" }
  • coding: Una categoria dedicata per le domande relative alla programmazione e allo sviluppo di software. Utilizzato per l'implementazione del codice, l'assistenza al debug, la progettazione di algoritmi, la documentazione tecnica e le domande sull'architettura del sistema.

    Ecco un esempio:

    { "turns": ["Write a function to check if a string is palindrome"], "turns_to_mask": [0], "reward_category": "coding" }
  • if: categoria per attività che richiedono un'esecuzione e una guida procedurali precise. step-by-step Utilizzata per procedure in più fasi, istruzioni sequenziali, scomposizione di attività complesse e documentazione dei processi.

    Ecco un esempio:

    { "turns": ["Provide steps to deploy a web application"], "turns_to_mask": [0], "reward_category": "if" }
  • rag: categoria di ricompensa per le attività che richiedono la risposta a domande basate specificamente sulle informazioni contestuali recuperate. Utilizzata quando le risposte devono essere derivate direttamente dai materiali di riferimento forniti, sintetizzando contenuti fattuali senza andare oltre l'ambito delle informazioni recuperate, garantendo che le risposte siano fondate sul contesto fornito anziché su conoscenze generali.

    Ecco un esempio:

    { "turns": ["The Synthesis Report integrates findings from all six IPCC assessment cycles, revealing that global surface temperature has increased 1.1°C from 1850-1900 to 2011-2020, with human activities unequivocally identified as the cause of this warming. Alarmingly, current policies put the world on track for 3.2°C warming by 2100. The document identifies 5 key climate system "tipping points" approaching and emphasizes that greenhouse gas emissions must decline 43% by 2030 (compared to 2019 levels) to limit warming to 1.5°C. Climate-related risks will escalate with every increment of warming, with loss and damage disproportionately affecting vulnerable populations. Despite some progress, climate adaptation remains uneven with significant gaps, and financial flows continue to fall below levels needed for mitigation goals.", "What were the key findings of the latest IPCC climate report?"], "turns_to_mask": [0, 0], "reward_category": "rag" }
  • rai: Una categoria di ricompensa per le attività che richiedono l'applicazione di principi di intelligenza artificiale responsabili come equità, trasparenza ed etica. Utilizzata per valutare potenziali pregiudizi nei sistemi di intelligenza artificiale, garantire considerazioni sulla privacy, affrontare dilemmi etici e promuovere principi di progettazione inclusivi.

    Ecco un esempio:

    { "turns": ["Identify potential bias concerns when developing a loan approval algorithm and suggest mitigation strategies"], "turns_to_mask": [0], "reward_category": "rai" }
Turni di mascheramento

Nei set di dati di allenamento, il turns_to_mask parametro è fondamentale per controllare quali turni di conversazione ricevono aggiornamenti in base al gradiente durante l'allenamento. Questa serie di indici determina quali parti del dialogo il modello dovrebbe imparare a generare e quali parti devono essere trattate solo come contesto. Un mascheramento adeguato assicura che il modello apprenda i modelli di risposta appropriati, evitando al contempo l'addestramento sulle istruzioni del sistema o sugli input dell'utente che potrebbero compromettere le prestazioni.

Consigliamo le seguenti linee guida per il mascheramento:

  • Maschera sempre l'indice 0: i prompt di sistema non dovrebbero mai ricevere aggiornamenti del gradiente.

  • Maschera sempre i turni degli utenti: impedisci al modello di imparare a generare input da parte dell'utente.

  • Coerenza dei modelli: utilizza schemi di mascheramento identici per strutture di conversazione simili, ad esempio (0, 1, 3, 5) per dialoghi a più turni.

  • Addestramento selettivo: maschera le risposte iniziali dei bot per concentrare l'allenamento sul miglioramento delle risposte finali.

  • Chain-of-thought conservazione - Durante l'addestramento sulle sequenze di ragionamento, maschera solo il sistema e l'utente che si rivolgono.

  • Filtro di qualità: maschera le risposte degli assistenti di bassa qualità per prevenire il degrado delle prestazioni.

  • Ottimizzazione del contesto: assicurati che i turni mascherati non rimuovano il contesto essenziale necessario per le risposte successive.

La chiave per un mascheramento efficace è il monitoraggio delle metriche di formazione e delle prestazioni di convalida per determinare se la strategia di mascheramento preserva il contesto necessario, concentrando al contempo gli aggiornamenti del gradiente sugli output del modello desiderati.

Abilita la perdita di divergenza KL

Per abilitare KL-Divergence Loss, il server di ancoraggio deve essere abilitato a calcolare la divergenza della politica corrente rispetto alla distribuzione originale. È necessario specificare il tipo di perdita KL e i coefficienti devono essere un valore diverso da zero. Valori di coefficienti più elevati aiutano il modello a non discostarsi molto dalla politica originale, il che si traduce in minori modifiche alle prestazioni generali. Valori di coefficienti più bassi consentono deviazioni maggiori rispetto alla politica precedente, con conseguente miglioramento delle prestazioni delle metriche target ma con un impatto sulle prestazioni generali.

ppo_anchor: max_length: 8192 trainer: num_nodes: ${recipes.run.cm_replicas} model: global_batch_size: 32 ppo_actor_train: model: ######## Use KL in actor loss ######## kl_loss_type: low_var_kl kl_loss_coeff: 0.1 ######## Use KL in reward model ###### kl_reward_penalty_coeff: 0.1
Velocità di apprendimento

Il tasso di apprendimento per i modelli critici e politici può essere modificato, con 3e-6 come scelta bilanciata predefinita. Tassi di apprendimento più elevati in genere portano a instabilità formative, che possono essere identificate attraverso picchi di divergenza KL e comportamenti politici irregolari. Tassi di apprendimento più bassi possono causare problemi di convergenza e rallentamento dell'apprendimento, come dimostrano i premi stagnanti e gli aggiornamenti minimi delle politiche. Il monitoraggio regolare della divergenza dei KL, del punteggio di ricompensa e della perdita di valore aiuta a determinare se modificare il tasso di apprendimento durante la formazione.

ppo_critic: model: optim: lr: 3e-6 ppo_actor_train: model: optim: lr: 3e-06
Dimensioni batch globali

Le dimensioni globali dei batch influiscono in modo significativo sulle prestazioni PPO in Amazon Nova, con lotti più grandi che generalmente migliorano la stabilità dell'allenamento e la stima del gradiente, consentendo al contempo un'elaborazione parallela più efficiente. Tuttavia, lotti di dimensioni molto grandi possono portare a rendimenti decrescenti e possono essere limitati dalla memoria disponibile, il che richiede un attento equilibrio tra il tasso di apprendimento e altri iperparametri.

ppo_actor_train: model: global_batch_size: 160

I parametri di Amazon Nova disponibili per l'ottimizzazione con PPO includono:

  • Esegui la configurazione

    • actor_train_replicas: Il numero di istanze di calcolo da utilizzare per il modello di treno degli attori. I valori disponibili variano in base al modello scelto. Amazon Nova Micro supporta 1 o 2 repliche. Amazon Nova Lite supporta 1, 2 o 4 repliche. Amazon Nova Pro supporta 3, 6 o 12 repliche.

    • rm_replicas: Il numero di istanze di calcolo utilizzate per il modello di ricompensa. Si consiglia di utilizzare una replica per qualsiasi dimensione del modello.

    • cm_replicas: il numero di istanze di calcolo utilizzate per il modello critico. Si consiglia di utilizzare una replica per qualsiasi dimensione del modello.

    • actor_generation_replicas: il numero di istanze di calcolo utilizzate per la generazione degli attori. I valori disponibili variano in base al modello scelto. Amazon Nova Micro supporta 1 replica. Amazon Nova Lite supporta 1 o 2 repliche. Amazon Nova Pro supporta 1 o 2 repliche.

    • am_replicas: Il numero di istanze di calcolo utilizzate per il modello di ancoraggio. Si consiglia di utilizzare una replica per qualsiasi dimensione del modello.

  • Configurazione Actor Train (policy config)

    • max_steps: Il numero massimo di passaggi per perfezionare o addestrare il modello di treno degli attori. Qui, una fase è definita come implementazione, seguita dall'addestramento del modello di treno degli attori con un global_batch_size numero di campioni. Un'epoca è definita come. global_batch_size * trajectory_buffer_scale

      Il valore scelto qui varierà in base al caso d'uso e alla complessità del set di dati. Ti consigliamo di iniziare con 65 epoche o 520 passaggi, ovvero il numero di epoche moltiplicato per il valore di. trajectory_buffer_scale Tuttavia, alcune attività richiedono un periodo di formazione PPO più lungo per ottenere le stesse prestazioni.

      Per quanto riguarda la PPO, le metriche di formazione, come la saturazione del punteggio del modello di ricompensa e la durata media dell'azione rilevate dalla console ml-flow, possono aiutare a identificare i punti ottimali per la valutazione.

    • actor_model_max_length: La lunghezza massima dei dati di input inviati al componente di generazione degli attori per generare i completamenti.

    • reward_model_max_length: La lunghezza massima dei dati di input inviati al server di ricompensa per ottenere punteggi di completamento.

    • trajectory_buffer_scale: Questo buffer rappresenta il numero di implementazioni generate utilizzando il vecchio modello actor train (policy) prima di aggiornare i pesi e generare i nuovi rollout. I valori supportati sono 1, 2, 4, 8 e 16.

      Se trajectory_buffer_scale è 1, allora la formazione è conforme alla politica. Ciò significa che le implementazioni vengono generate con i pesi dei modelli più aggiornati, ma la produttività ne risente. Se è 16, allora il modello è leggermente fuori norma, ma la velocità effettiva è maggiore. Consigliamo di iniziare con 8 per ogni modello.

    • kl_reward_penalty_coeff: Questo è il termine di divergenza KL che garantisce che gli aggiornamenti non siano troppo drastici e che la politica non venga redatta sulla base o sul modello SFT.

    • kl_loss_coeff: Questo valore controlla in che misura la penalità di divergenza KL influenzi l'obiettivo generale di formazione in PPO.

    • kl_loss_type: Questo valore specifica come calcolare la divergenza tra le distribuzioni delle politiche attuali e quelle di riferimento. Le kl_loss_types opzioni disponibili sono kl (divergenza KL standard), mse (Errore quadratico medio), (Differenza assoluta tra probabilità logaritmiche) e abs (approssimazione KL a bassa varianza). low_var_kl

    • model.clip_ratio: L'Actor Clip Ratio (ω) in PPO è un iperparametro che limita le modifiche che la policy può subire durante ogni aggiornamento.

    • model.optim.lr: Il tasso di apprendimento utilizzato per l'addestramento alla perdita del modello surrogato nel modello attoriale.

    • model.lam: Parte del processo di stima dei vantaggi. Un λ più alto dà più peso ai premi a lungo termine ma con una varianza maggiore, mentre un λ più basso si concentra maggiormente sui premi immediati con una varianza inferiore ma maggiori distorsioni.

    • model.ent_coeff: La perdita di entropia nel PPO incoraggia l'esplorazione penalizzando la politica quando diventa troppo deterministica (ovvero, intraprende sempre le stesse azioni con elevata fiducia).

  • Configurazione del modello Reward

    • global_batch_size: La dimensione del batch per il punteggio dei completamenti utilizzando il modello di ricompensa. Se ppo_actor_train.model.global_batch_size è maggiore dippo_reward.model.global_batch_size, vengono elaborati in più batch. Nota che ppo_actor_train.model.global_batch_size % ppo_reward.model.global_batch_size deve essere uguale a 0.

    • max_length: La lunghezza massima del contesto del modello di ricompensa. Dovrebbe essere uguale appo_actor_train.model.max_length.

  • Configurazione del modello critico

    • global_batch_size: La dimensione del batch del valore del modello critico. Il modello critico fornirà stime di valore per ogni token nelle risposte fornite dal modello di attore. La dimensione del batch viene utilizzata sia per l'inferenza che per l'addestramento.

      Nota che ppo_actor_train.model.global_batch_size % ppo_critic.model.global_batch_size deve essere uguale a 0 eppo_actor_train.model.global_batch_size * ppo_actor_train.model.trajectory_buffer_size % ppo_critic.model.global_batch_size == 0.

    • max_length: La lunghezza massima del contesto del modello critico. Dovrebbe essere uguale ppo_actor_train.model.max_length a.

    • model.optim.lr: Il tasso di apprendimento utilizzato per l'addestramento alla perdita del modello surrogato nel modello attoriale.

  • Configurazione del modello Anchor

    • global_batch_size: La dimensione del batch per la generazione del logo del modello SFT o di ancoraggio congelato. Nota che ppo_actor_train.model.global_batch_size % ppo_anchor.model.global_batch_size deve essere uguale a 0.

    • max_length: La lunghezza massima del contesto del modello di ricompensa. Dovrebbe essere uguale appo_actor_train.model.max_length.

  • Configurazione del modello di generazione degli attori

    • actor_model_max_length: La lunghezza massima del contesto del componente di generazione del modello di attore. Dovrebbe essere uguale appo_actor_train.model.max_length.

Ricetta PPO

Quella che segue è una ricetta per il PPO.

## Run config run: name: ndry-ppo-pro model_type: amazon.nova-pro-v1:0:300k model_name_or_path: nova-pro/prod data_s3_path: s3://testing/train.jsonl # Your training data S3 path actor_train_replicas: 6 # Actor train model replicas rm_replicas: 1 # Reward model replicas cm_replicas: 1 # Critic model replicas actor_generation_replicas: 2 # Actor generation model replicas am_replicas: 1 # Anchor model replicas ## Training config for each PPO component ppo_reward: max_length: 8192 # model architecture max length trainer: num_nodes: ${recipes.run.rm_replicas} model: global_batch_size: 16 ppo_critic: max_length: 8192 trainer: num_nodes: ${recipes.run.cm_replicas} model: global_batch_size: 16 optim: lr: 3e-6 name: distributed_fused_adam adam_w_mode: true eps: 1e-06 weight_decay: 0.0 betas: - 0.9 - 0.999 ppo_anchor: max_length: 8192 trainer: num_nodes: ${recipes.run.am_replicas} model: global_batch_size: 16 ppo_actor_generation: actor_model_max_length: 8192 trainer: num_nodes: ${recipes.run.actor_generation_replicas} ppo_actor_train: max_length: 8192 max_steps: 520 # Stopping criteria Desired epoch num * trajectory_buffer_scale actor_model_max_length: 8192 # truncate input data to max length reward_model_max_length: 8192 # truncate input data to max length trajectory_buffer_scale: 8 trainer: num_nodes: ${recipes.run.actor_train_replicas} model: global_batch_size: 160 ent_coeff: 0 clip_ratio: 0.2 lam: 1 kl_loss_coeff: 0.0 kl_loss_type: low_var_kl kl_reward_penalty_coeff: 0.0 hidden_dropout: 0.0 # Dropout probability for hidden state transformer. attention_dropout: 0.0 # Dropout probability in the attention layer. ffn_dropout: 0.0 # Dropout probability in the feed-forward layer. optim: lr: 3e-06 name: distributed_fused_adam # only this one is available for p0. adam_w_mode: true eps: 1e-08 weight_decay: 0.0 betas: - 0.9 - 0.999
Limitazioni

PPO presenta le seguenti limitazioni:

  • I checkpoint intermedi non vengono salvati per la valutazione e non è possibile riprendere da un checkpoint intermedio. Viene salvato solo l'ultimo checkpoint.

  • I set di dati multimodali non sono supportati.

  • I lavori di formazione non vengono interrotti automaticamente. È necessario interrompere il lavoro utilizzando la HyperPod CLI.

  • MLflow la registrazione non è supportata.

  • Le metriche di allenamento critiche non sono supportate su. TensorBoard

  • Per regolare gli iperparametri, segui le istruzioni riportate in Selezione degli iperparametri.