Ottimizzazione diretta delle preferenze (DPO) - 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 diretta delle preferenze (DPO)

L’ottimizzazione diretta delle preferenze (DPO, Direct Preference Optimization) è un metodo di fine-tuning efficiente per i modelli di fondazione che utilizza dati di confronto accoppiati per allineare gli output del modello alle preferenze umane. Questo approccio consente l’ottimizzazione diretta del comportamento del modello sulla base di feedback umano in merito alle risposte considerate più appropriate.

Sono disponibili processi DPO a dimensionalità completa e LoRA (Low Rank Adapter).

Requisiti per il formato dei dati

Per DPO a dimensionalità completa e LoRA, i requisiti di formato dei dati di addestramento sono simili a quelli di SFT. Tuttavia, per DPO, l’interazione finale deve avere coppie di preferenze. Di seguito viene riportato un esempio del formato dei dati per DPO:

// N-1 turns same as SFT format { "role": "assistant", "candidates": [ { "content": [ { "text": "..." } // content list can contain multiple 'text' objects ], "preferenceLabel": "preferred" }, { "content": [ { "text": "..." } // content list can contain multiple 'text' objects ], "preferenceLabel": "non-preferred" } ] }

Ecco un altro esempio di testo per DPO completa:

{ "system": [ { "text": "..." } ], "messages":[ { "role": "user", "content": [ { "text": "..." } ] }, { "role": "assistant", "content": [ { "text": "..." } ] }, { "role": "user", "content": [ { "text": "..." } ] }, { "role": "assistant", "candidates": [ { "content": [ { "text": "..." } ], "preferenceLabel": "preferred" }, { "content": [ { "text": "..." } ], "preferenceLabel": "non-preferred" } ] } ], }

Ecco un esempio di immagine per DPO completa:

{ "system": [ { "text": "..." } ], "messages":[ { "role": "user", "content": [ { "text": "..." }, { "text": "..." }, { "image": { "format": "jpeg", "source": { "s3Location": { "uri": "s3://your-bucket/your-path/your-image.jpg", "bucketOwner": "your-aws-account-id" } } } } // "content" can have multiple "text" and "image" objects. // max image count is 10 ] }, { "role": "assistant", "content": [ { "text": "..." } ] }, { "role": "user", "content": [ { "text": "..." }, { "text": "..." }, { "image": { "format": "jpeg", "source": { "s3Location": { "uri": "s3://your-bucket/your-path/your-image.jpg", "bucketOwner": "your-aws-account-id" } } } } // "content" can have multiple "text" and "image" objects. // max image count is 10 ] }, { "role": "assistant", "candidates": [ { "content": [ { "text": "..." } ], "preferenceLabel": "preferred" }, { "content": [ { "text": "..." } ], "preferenceLabel": "non-preferred" } ] } ], }

Si applicano altri vincoli sui set di dati di input. Per ulteriori informazioni, consulta Dataset constraints. È consigliabile includere un minimo di 1.000 coppie di preferenze per un addestramento efficace. Dati sulle preferenze di alta qualità generano risultati più efficienti.

È consigliabile utilizzare DPO nei seguenti scenari:

  • Ottimizzazione per output soggettivi che richiedono l’allineamento a specifiche preferenze umane.

  • Regolazione del tono, dello stile o delle caratteristiche del contenuto del modello in base ai modelli di risposta desiderati.

  • Miglioramenti mirati apportati a un modello esistente sulla base del feedback degli utenti e dell’analisi degli errori.

  • Mantenimento di un livello costante di qualità dell’output in diversi casi d’uso.

  • Implementazione di guardrail di sicurezza attraverso modelli di risposta preferiti.

  • Addestramento con apprendimento per rinforzo senza ricompense.

  • Utilizzo di soli dati di preferenza anziché dati classificati o etichettati.

  • Miglioramento del modello in attività di allineamento articolate, come disponibilità, innocuità e onestà.

I parametri di Amazon Nova disponibili per DPO a dimensionalità completa sono i seguenti:

  • Configurazione run

    • name: un nome descrittivo per il job di addestramento. Questo aiuta a identificare il tuo lavoro in. Console di gestione AWS

    • model_type: la variante del modello Nova da utilizzare. Le opzioni disponibili sono amazon.nova-micro-v1:0:128k, amazon.nova-lite-v1:0:300k oppure amazon.nova-pro-v1:0:300k.

    • model_name_or_path: il percorso del modello di base. Seleziona il modello da utilizzare tra nova-micro/prod, nova-lite/prod, nova-pro/prod o il percorso S3 per il checkpoint post-addestramento (s3://<escrow bucket>/<job id>/outputs/checkpoints).

    • replicas: il numero di istanze di calcolo da utilizzare per l’addestramento distribuito. I valori disponibili variano in base al modello scelto. Amazon Nova Micro supporta 2, 4 oppure 8 repliche. Amazon Nova Lite supporta 4, 8, 16 oppure 32 repliche. Amazon Nova Pro supporta 6, 12 oppure 24 repliche.

    • data_s3_path: la posizione S3 del set di dati di addestramento, ovvero un file JSONL. Questo file deve trovarsi nello stesso account e nella stessa Regione del cluster. Tutte le posizioni S3 fornite devono trovarsi nello stesso account e nella stessa Regione.

    • validation_data_s3_path: la posizione S3 del set di dati di convalida, ovvero un file JSONL. Questo file deve trovarsi nello stesso Account AWS e nella stessa Regione del cluster. Tutte le posizioni S3 fornite devono trovarsi nello stesso account e nella stessa Regione.

  • Configurazione di addestramento

    • max_length: la lunghezza massima della sequenza in token. Determina la dimensione della finestra di contesto per l’addestramento. Il valore massimo supportato è di 32.768 token per DPO.

      Sequenze più lunghe migliorano l’efficienza di addestramento a scapito di maggiori requisiti di memoria. È consigliabile che il parametro max_length corrisponda alla distribuzione dei dati.

  • Impostazioni di addestramento

    • max_epochs: il numero di passaggi completi nel set di dati di addestramento.

      In generale, set di dati di dimensioni maggiori richiedono meno epoch per la convergenza, mentre set di dati di dimensioni minori prevedono più epoch. È consigliabile regolare il numero di epoch in base alla dimensione dei dati.

  • Impostazioni del modello

    • hidden_dropout: la probabilità di eliminare output di stato nascosti. Aumenta questo valore di circa 0,0-0,2 per ridurre l’overfitting su set di dati più piccoli. I valori validi sono compresi tra 0 e 1, entrambi inclusi.

    • attention_dropout: la probabilità di eliminare pesi di attenzione. Questo parametro può agevolare la generalizzazione. I valori validi sono compresi tra 0 e 1, entrambi inclusi.

    • ffn_dropout: la probabilità di eliminare output di rete feed-forward. I valori validi sono compresi tra 0 e 1, entrambi inclusi.

  • Configurazione optimizer

    • lr: il tasso di apprendimento, che controlla la dimensione del passaggio durante l’ottimizzazione. Sono consigliabili valori compresi tra 1e-6 e 1e-4 per ottenere buone prestazioni. I valori validi sono compresi tra 0 e 1, entrambi inclusi.

    • name: l’algoritmo dell’ottimizzatore. Attualmente è supportato solo distributed_fused_adam.

    • weight_decay: la potenza di regolarizzazione L2. Valori maggiori (compresi tra 0,01 e 0,1) aumentano la regolarizzazione.

    • warmup_steps: il numero di passaggi per aumentare gradualmente il tasso di apprendimento. Migliora la stabilità dell’addestramento. I valori validi sono compresi tra 1 e 20, entrambi inclusi.

    • min_lr: il tasso minimo di apprendimento alla fine del decadimento. I valori validi sono compresi tra 0 e 1, entrambi inclusi, ma devono essere inferiori al tasso di apprendimento.

  • Configurazione DPO

    • beta: determina quanto il modello deve adattarsi ai dati di addestramento o al modello originale. I valori validi sono compresi tra 0,001 e 0,5, entrambi inclusi.

      Specifica valori maggiori (ad esempio 0,5) per preservare meglio il comportamento del modello di riferimento e apprendere più lentamente nuove preferenze. Specifica valori minori (ad esempio 0,01-0,05) per apprendere più rapidamente nuove preferenze, con il rischio di divergere dal comportamento del modello di riferimento.

Ricetta per DPO a dimensionalità completa

Di seguito è riportata una ricetta per DPO a dimensionalità completa

## Run config run: name: "my-dpo-micro-job" # A descriptive name for your training job model_type: "amazon.nova-micro-v1:0:128k" # Model variant specification, do not change model_name_or_path: "nova-micro/prod" # Base model path, do not change replicas: 2 # Number of compute instances for training, allowed values are 2, 4, 8 data_s3_path: s3:Replace with your S3 bucket name/input.jsonl validation_data_s3_path: [OPTIONAL] s3:your S3 bucket name/input.jsonl output_s3_path: [S3_PATH_TO_STORE_MANIFEST] ## Training specific configs training_config: max_length: 32768 # Maximum context window size (tokens). global_batch_size: 64 # Global batch size, allowed values are 16, 32, 64. trainer: max_epochs: 2 # Number of training epochs model: hidden_dropout: 0.0 # Dropout for hidden states, must be between 0.0 and 1.0 attention_dropout: 0.0 # Dropout for attention weights, must be between 0.0 and 1.0 ffn_dropout: 0.0 # Dropout for feed-forward networks, must be between 0.0 and 1.0 optim: lr: 1e-5 # Learning rate name: distributed_fused_adam # Optimizer algorithm, do not change adam_w_mode: true # Enable AdamW mode eps: 1e-06 # Epsilon for numerical stability weight_decay: 0.0 # L2 regularization strength, must be between 0.0 and 1.0 betas: # Adam optimizer betas, must be between 0.0 and 1.0 - 0.9 - 0.999 sched: warmup_steps: 10 # Learning rate warmup steps constant_steps: 0 # Steps at constant learning rate min_lr: 1e-6 # Minimum learning rate, must be lower than lr dpo_cfg: beta: 0.1 # Strength of preference enforcement. Limits: [0.001, 0.5] peft: peft_scheme: null # Disable LoRA, trigger full rank fine tuning

I parametri di Amazon Nova disponibili per DPO a bassa dimensionalità sono i seguenti:

  • Configurazione run

    • name: un nome descrittivo per il job di addestramento. Questo aiuta a identificare il tuo lavoro inConsole di gestione AWS.

    • model_type: la variante del modello Nova da utilizzare. Le opzioni disponibili sono amazon.nova-micro-v1:0:128k, amazon.nova-lite-v1:0:300k oppure amazon.nova-pro-v1:0:300k.

    • model_name_or_path: il percorso del modello di base. Seleziona il modello da utilizzare tra nova-micro/prod, nova-lite/prod, nova-pro/prod o il percorso S3 per il checkpoint post-addestramento (s3://<escrow bucket>/<job id>/outputs/checkpoints).

    • replicas: il numero di istanze di calcolo da utilizzare per l’addestramento distribuito. I valori disponibili variano in base al modello scelto. Amazon Nova Micro supporta 2, 4 oppure 8 repliche. Amazon Nova Lite supporta 4, 8, 16 oppure 32 repliche. Amazon Nova Pro supporta 6, 12 oppure 24 repliche.

  • Configurazione di addestramento

    • max_length: la lunghezza massima della sequenza in token. Determina la dimensione della finestra di contesto per l’addestramento. Il valore massimo supportato è di 32.768 token per DPO.

      Sequenze più lunghe migliorano l’efficienza di addestramento a scapito di maggiori requisiti di memoria. È consigliabile che il parametro max_length corrisponda alla distribuzione dei dati.

  • Impostazioni di addestramento

    • max_epochs: il numero di passaggi completi nel set di dati di addestramento.

      In generale, set di dati di dimensioni maggiori richiedono meno epoch per la convergenza, mentre set di dati di dimensioni minori prevedono più epoch. È consigliabile regolare il numero di epoch in base alla dimensione dei dati.

  • Impostazioni del modello

    • hidden_dropout: la probabilità di eliminare output di stato nascosti. Aumenta questo valore di circa 0,0-0,2 per ridurre l’overfitting su set di dati più piccoli. I valori validi sono compresi tra 0 e 1, entrambi inclusi.

    • attention_dropout: la probabilità di eliminare pesi di attenzione. Questo parametro può agevolare la generalizzazione. I valori validi sono compresi tra 0 e 1, entrambi inclusi.

    • ffn_dropout: la probabilità di eliminare output di rete feed-forward. I valori validi sono compresi tra 0 e 1, entrambi inclusi.

  • Configurazione optimizer

    • lr: il tasso di apprendimento, che controlla la dimensione del passaggio durante l’ottimizzazione. Sono consigliabili valori compresi tra 1e-6 e 1e-4 per ottenere buone prestazioni. I valori validi sono compresi tra 0 e 1, entrambi inclusi.

    • name: l’algoritmo dell’ottimizzatore. Attualmente è supportato solo distributed_fused_adam.

    • weight_decay: la potenza di regolarizzazione L2. Valori maggiori (compresi tra 0,01 e 0,1) aumentano la regolarizzazione.

    • warmup_steps: il numero di passaggi per aumentare gradualmente il tasso di apprendimento. Migliora la stabilità dell’addestramento. I valori validi sono compresi tra 1 e 20, entrambi inclusi.

    • min_lr: il tasso minimo di apprendimento alla fine del decadimento. I valori validi sono compresi tra 0 e 1, entrambi inclusi, ma devono essere inferiori al tasso di apprendimento.

  • Configurazione DPO

    • beta: determina quanto il modello deve adattarsi ai dati di addestramento o al modello originale. I valori validi sono compresi tra 0,001 e 0,5, entrambi inclusi.

      Specifica valori maggiori (ad esempio 0,5) per preservare meglio il comportamento del modello di riferimento e apprendere più lentamente nuove preferenze. Specifica valori minori (ad esempio 0,01-0,05) per apprendere più rapidamente nuove preferenze, con il rischio di divergere dal comportamento del modello di riferimento.

  • Parametri di configurazione LoRA

    • peft_scheme: impostato su lora per abilitare Low-Rank Adaptation, che genera un modello di output più efficiente e di dimensioni ridotte. Sono disponibili anche queste proprietà specifiche di LoRA:

      • alpha: il fattore di dimensionamento per i pesi LoRA. In genere è impostato sullo stesso valore di adapter_dim.

      • adapter_dropout: il parametro di regolarizzazione per i parametri LoRA.

Ricetta per DPO LoRA

Di seguito è riportata una ricetta per DPO LoRA.

## Run config run: name: "my-lora-run" # A descriptive name for your training job model_type: "amazon.nova-lite-v1:0:300k" # Model variant specification, do not change model_name_or_path: "nova-lite/prod" # Base model path, do not change replicas: 4 # Number of compute instances for training. All supported values: {4, 8, 16} data_s3_path: s3:Replace with your S3 bucket name/input.jsonl validation_data_s3_path: [OPTIONAL] s3:your S3 bucket name/input.jsonl output_s3_path: [S3_PATH_TO_STORE_MANIFEST] ## Training specific configs training_config: max_length: 16384 # Maximum context window size (tokens). Should be between [1024, 32768] and multiple of 1024. # Note: Image dataset for DPO has a limit on 20k samples and 16384 max_length global_batch_size: 64 # Total samples per step. Limits: {16, 32, 64, 128, 256} trainer: max_epochs: 2 # Number of training epochs model: hidden_dropout: 0.0 # Dropout for hidden states. Limits: [0.0, 1.0] attention_dropout: 0.0 # Dropout for attention weights. Limits: [0.0, 1.0] ffn_dropout: 0.0 # Dropout for feed-forward networks. Limits: [0.0, 1.0] optim: lr: 1e-5 # Learning rate name: distributed_fused_adam # Optimizer algorithm, do not change adam_w_mode: true # Enable AdamW mode eps: 1e-08 # Epsilon for numerical stability weight_decay: 0.01 # L2 regularization strength betas: # Adam optimizer betas. Limits: [0.0, 1.0] - 0.9 - 0.999 sched: warmup_steps: 10 # Learning rate warmup steps constant_steps: 0 # Steps at constant learning rate min_lr: 1e-6 # Minimum learning rate dpo_cfg: beta: 0.01 # Strength of preference enforcement. Limits: [0.001, 0.5] peft: peft_scheme: "lora" # Enable LoRA for parameter-efficient fine-tuning lora_tuning: loraplus_lr_ratio: 20.0 # LoRA+ learning rate scaling factor. Limits: [0.0, 100.0] alpha: 64 # Scaling factor for LoRA weights. [32, 64, 96, 128, 160, 192] adapter_dropout: 0.01 # Regularization for LoRA parameters. Limits: [0.0, 1.0]
Limitazioni

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

  • Per regolare gli iperparametri, segui le istruzioni riportate in Selecting hyperparameters.