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) è un metodo di ottimizzazione efficiente per i modelli di base 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 del feedback umano su quali risposte sono più desiderabili.

Sono disponibili sia un DPO completo che un DPO con adattatore LoRa (Low Rank Adapter).

Requisiti di formato dei dati

Sia per Full Rank che per LoRa DPO, i requisiti di formato dei dati di formazione sono simili a quelli di SFT. Tuttavia, per DPO, il turno finale deve avere coppie di preferenze. Ecco un esempio del formato dei dati del 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 completo del DPO:

{ "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 completo di immagine del DPO:

{ "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, vedere Vincoli del set di dati. Ti consigliamo di includere un minimo di 1.000 coppie di preferenze per un allenamento efficace. Dati sulle preferenze di alta qualità portano a risultati più efficienti.

Consigliamo di utilizzare DPO nei seguenti scenari:

  • Ottimizzazione per gli output soggettivi che richiedono l'allineamento con preferenze umane specifiche.

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

  • Apportare miglioramenti mirati a un modello esistente sulla base del feedback degli utenti e dell'analisi degli errori.

  • Mantenimento di una qualità di output costante in diversi casi d'uso.

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

  • Formazione con apprendimento per rinforzo senza ricompense.

  • Utilizzando solo dati di preferenza anziché dati classificati o etichettati.

  • Miglioramento del modello in attività di allineamento articolate, come la disponibilità, l'innocuità o l'onestà.

DPO a pieno titolo

I parametri di Amazon Nova disponibili per il DPO completo sono i seguenti:

  • Esegui la configurazione

    • name: Un nome descrittivo per il tuo lavoro di formazione. Questo aiuta a identificare il tuo lavoro in. AWS Management Console

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

    • model_name_or_path: percorso del modello base. Seleziona il modello da utilizzare nova-micro/prod nova-lite/prodnova-pro/prod, o il percorso S3 per il checkpoint post-allenamento (). 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 o 8 repliche. Amazon Nova Lite supporta 4, 8, 16 o 32 repliche. Amazon Nova Pro supporta 6, 12 o 24 repliche.

    • data_s3_path: La posizione S3 del set di dati di addestramento, che è un file JSONL. Questo file deve risiedere nello stesso account e nella stessa regione del cluster. Tutte le sedi S3 fornite devono trovarsi nello stesso account e nella stessa regione.

    • validation_data_s3_path: La posizione S3 del set di dati di convalida, che è un file JSONL. Questo file deve risiedere nella stessa Account AWS regione del cluster. Tutte le sedi S3 fornite devono trovarsi nello stesso account e nella stessa regione.

  • Configurazione dell'allenamento

    • max_length: La lunghezza massima della sequenza in token. Ciò determina la dimensione della finestra contestuale per l'addestramento. Il valore massimo supportato è 32.768 token per DPO.

      Sequenze più lunghe miglioreranno l'efficienza dell'allenamento a scapito di maggiori requisiti di memoria. Ti consigliamo di abbinare il max_length parametro alla distribuzione dei dati.

  • Impostazioni del trainer

    • max_epochs: Il numero di passaggi completi attraverso il set di dati di allenamento. Il valore massimo è 5.

      In generale, i set di dati più grandi richiedono meno epoche per convergere, mentre i set di dati più piccoli richiedono più epoche per convergere. Ti consigliamo di regolare il numero di epoche in base alla dimensione dei dati.

  • Impostazioni del modello

    • hidden_dropout: La probabilità di eliminare gli output di stato nascosti. Aumentate 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.

    • attention_dropout: La probabilità di far cadere i pesi di attenzione. Questo parametro può facilitare la generalizzazione. I valori validi sono compresi tra 0 e 1.

    • ffn_dropout: La probabilità di interruzione degli output di rete feed-forward. I valori validi sono compresi tra 0 e 1.

  • Configurazione dell'ottimizzatore

    • lr: Il tasso di apprendimento, che controlla la dimensione del passo durante l'ottimizzazione. Consigliamo valori compresi tra 1e-6-1e-4 per buone prestazioni. I valori validi sono compresi tra 0 e 1.

    • name: L'algoritmo di ottimizzazione. Attualmente è supportato solo distributed_fused_adam.

    • weight_decay: La forza di regolarizzazione L2. Valori più alti (compresi tra 0,01-0,1) aumentano la regolarizzazione.

    • warmup_steps: Il numero di passaggi per aumentare gradualmente il tasso di apprendimento. Ciò migliora la stabilità dell'allenamento. I valori validi sono compresi tra 1 e 20, inclusi.

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

  • Configurazione DPO

    • beta: Determina la corrispondenza tra il modello e i dati di addestramento o il modello originale. I valori validi sono compresi tra 0,001-0,5 inclusi.

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

Ricetta completa del DPO

Di seguito è riportata una ricetta completa per il DPO

## 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

Adattatore di basso rango DPO

I parametri di Amazon Nova disponibili per gli adattatori di basso rango DPO sono i seguenti:

  • Esegui la configurazione

    • name: Un nome descrittivo per il tuo lavoro di formazione. Questo aiuta a identificare il tuo lavoro in. AWS Management Console

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

    • model_name_or_path: percorso del modello base. Seleziona il modello da utilizzare nova-micro/prod nova-lite/prodnova-pro/prod, o il percorso S3 per il checkpoint post-allenamento (). 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 o 8 repliche. Amazon Nova Lite supporta 4, 8, 16 o 32 repliche. Amazon Nova Pro supporta 6, 12 o 24 repliche.

  • Configurazione della formazione

    • max_length: La lunghezza massima della sequenza in token. Ciò determina la dimensione della finestra contestuale per l'addestramento. Il valore massimo supportato è 32.768 token per DPO.

      Sequenze più lunghe miglioreranno l'efficienza dell'allenamento a scapito di maggiori requisiti di memoria. Ti consigliamo di abbinare il max_length parametro alla distribuzione dei dati.

  • Impostazioni del trainer

    • max_epochs: Il numero di passaggi completi attraverso il set di dati di allenamento. Il valore massimo è 5.

      In generale, i set di dati più grandi richiedono meno epoche per convergere, mentre i set di dati più piccoli richiedono più epoche per convergere. Ti consigliamo di regolare il numero di epoche in base alla dimensione dei dati.

  • Impostazioni del modello

    • hidden_dropout: La probabilità di eliminare gli output di stato nascosti. Aumentate 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.

    • attention_dropout: La probabilità di far cadere i pesi di attenzione. Questo parametro può facilitare la generalizzazione. I valori validi sono compresi tra 0 e 1.

    • ffn_dropout: La probabilità di interruzione degli output di rete feed-forward. I valori validi sono compresi tra 0 e 1.

  • Configurazione dell'ottimizzatore

    • lr: Il tasso di apprendimento, che controlla la dimensione del passo durante l'ottimizzazione. Consigliamo valori compresi tra 1e-6-1e-4 per buone prestazioni. I valori validi sono compresi tra 0 e 1.

    • name: L'algoritmo di ottimizzazione. Attualmente è supportato solo distributed_fused_adam.

    • weight_decay: La forza di regolarizzazione L2. Valori più alti (compresi tra 0,01-0,1) aumentano la regolarizzazione.

    • warmup_steps: Il numero di passaggi per aumentare gradualmente il tasso di apprendimento. Ciò migliora la stabilità dell'allenamento. I valori validi sono compresi tra 1 e 20, inclusi.

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

  • Configurazione DPO

    • beta: Determina la corrispondenza tra il modello e i dati di addestramento o il modello originale. I valori validi sono compresi tra 0,001-0,5 inclusi.

      Specificate valori più grandi (ad esempio 0,5) per preservare meglio il comportamento del modello di riferimento e apprendere più lentamente nuove preferenze. Specificate valori più piccoli (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 per lora abilitare Low-Rank Adaptation, che genera un modello di output più efficiente e più piccolo. Sono disponibili anche queste proprietà specifiche di LoRA:

      • alpha: Il fattore di scala per i pesi LoRa. In genere è impostato sullo stesso valore di. adapter_dim

      • adapter_dropout: Il parametro di regolarizzazione per i parametri LoRa.

Ricetta LoRa DPO

Quella che segue è una ricetta per LoRa DPO.

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

  • MLflow la registrazione non è supportata.

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