Optimisation directe des préférences (DPO) - Amazon SageMaker AI

Optimisation directe des préférences (DPO)

Le peaufinage direct des préférences (DPO) est une méthode de peaufinage efficace pour les modèles de fondation, qui utilise des données de comparaison par paires pour aligner les sorties des modèles sur les préférences humaines. Cette approche permet d’optimiser directement le comportement du modèle en fonction des commentaires humains concernant les réponses les plus souhaitables.

La DPO complète et la DPO avec adaptateur de rang inférieur (LoRA) sont disponibles.

Exigences de format de données

Pour les DPO complètes et LoRA, les exigences relatives au format des données d’entraînement sont similaires à celles de la SFT. Cependant, pour la DPO, le tour final doit comporter des paires de préférences. Voici un exemple de format de données d’une 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" } ] }

Voici un autre exemple de texte d’une DPO complète :

{ "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" } ] } ], }

Voici un exemple d’image d’une DPO complète :

{ "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" } ] } ], }

D’autres contraintes s’appliquent aux jeu de données d’entrée. Pour plus d’informations, consultez Contraintes liées aux jeux de données. Nous vous recommandons d’inclure un minimum de 1 000 paires de préférences pour un entraînement efficace. Des données de préférences de haute qualité permettront d’obtenir des résultats plus efficaces.

Nous recommandons la DPO dans les scénarios suivants :

  • Optimisation des sorties subjectives qui nécessitent un alignement sur des préférences humaines spécifiques

  • Ajustement du ton, du style ou des caractéristiques de contenu du modèle pour qu’il corresponde aux modèles de réponse souhaités

  • Améliorations ciblées sur un modèle existant en fonction des commentaires des utilisateurs et de l’analyse des erreurs

  • Maintien d’une qualité de sortie constante dans les différents cas d’utilisation

  • Implémentation de barrières de protection de sécurité via des modèles de réponse privilégiés

  • Entraînement avec apprentissage par renforcement sans récompense

  • Utilisation de données de préférence uniquement au lieu de données notées ou étiquetées

  • Amélioration du modèle dans des tâches d’alignement nuancées, telles que l’utilité, l’innocuité ou l’honnêteté.

DPO complète

Les paramètres Amazon Nova disponibles pour une DPO complète sont les suivants :

  • Configuration d’exécution

    • name : nom descriptif de votre tâche d’entraînement. Cela permet d’identifier votre tâche dans la AWS Management Console.

    • model_type : variante du modèle Nova à utiliser. Les options disponibles sont amazon.nova-micro-v1:0:128k, amazon.nova-lite-v1:0:300k ou amazon.nova-pro-v1:0:300k.

    • model_name_or_path : chemin d’accès au modèle de base. Sélectionnez le modèle à utiliser depuis nova-micro/prod, nova-lite/prod, nova-pro/prod ou le chemin S3 pour le point de contrôle post-entraînement (s3://<escrow bucket>/<job id>/outputs/checkpoints).

    • replicas : nombre d’instances de calcul à utiliser pour l’entraînement distribué. Les valeurs disponibles varient en fonction du modèle choisi. Amazon Nova Micro prend en charge 2, 4 ou 8 réplicas. Amazon Nova Lite prend en charge 4, 8, 16 ou 32 réplicas. Amazon Nova Pro prend en charge 6, 12 ou 24 réplicas.

    • data_s3_path : emplacement S3 du jeu de données d’entraînement, qui est un fichier JSONL. Ce fichier doit résider dans le même compte et la même région que le cluster. Tous les emplacements S3 fournis doivent se trouver dans le même compte et la même région.

    • validation_data_s3_path : emplacement S3 du jeu de données de validation, qui est un fichier JSONL. Ce fichier doit résider dans le même Compte AWS et la même région que le cluster. Tous les emplacements S3 fournis doivent se trouver dans le même compte et la même région.

  • Configuration d’entraînement

    • max_length : longueur de séquence maximale en jetons. Détermine la taille de la fenêtre contextuelle pour l’entraînement. La valeur maximale prise en charge est de 32 768 jetons pour la DPO.

      Des séquences plus longues amélioreront l’efficacité de l’entraînement au prix d’une augmentation des exigences de mémoire. Nous vous recommandons de faire correspondre le paramètre max_length à la distribution de vos données.

  • Paramètres de l’entraîneur

    • max_epochs : nombre de passages complets sur votre jeu de données d’entraînement. La valeur maximale est 5.

      En général, les plus grands jeux de données nécessitent moins d’époques pour converger, tandis que les plus petits en nécessitent plus. Nous vous recommandons d’ajuster le nombre d’époques en fonction de la taille de vos données.

  • Paramètres du modèle

    • hidden_dropout : probabilité de perte des sorties d’état masquées. Augmentez cette valeur d’environ 0,0-0,2 pour réduire les surajustements sur de plus petits jeux de données. Les valeurs valides sont comprises entre 0 et 1 inclus.

    • attention_dropout : probabilité de perte des poids d’attention. Ce paramètre peut faciliter la généralisation. Les valeurs valides sont comprises entre 0 et 1 inclus.

    • ffn_dropout : probabilité de perte des sorties du réseau à propagation avant. Les valeurs valides sont comprises entre 0 et 1 inclus.

  • Configuration d’optimiseur

    • lr : taux d’apprentissage qui contrôle la taille des étapes lors de l’optimisation. Nous recommandons des valeurs comprises entre 1e-6 et 1e-4 pour de bonnes performances. Les valeurs valides sont comprises entre 0 et 1 inclus.

    • name : algorithme de l’optimiseur. Actuellement, seul distributed_fused_adam est pris en charge.

    • weight_decay : force de régularisation L2. Des valeurs plus élevées (entre 0,01 et 0,1) augmentent la régularisation.

    • warmup_steps : nombre d’étapes pour augmenter progressivement le taux d’apprentissage. Cela améliore la stabilité de l’entraînement. Les valeurs valides sont comprises entre 1 et 20 inclus.

    • min_lr : taux d’apprentissage minimal en fin de décalage. Les valeurs valides sont comprises entre 0 et 1 inclus, mais doivent être inférieures au taux d’apprentissage.

  • Configuration DPO

    • beta : détermine dans quelle mesure le modèle doit correspondre aux données d’entraînement ou au modèle d’origine. Les valeurs valides sont comprises entre 0,001 et 0,5 inclus.

      Spécifiez des valeurs plus élevées (par exemple, 0,5) pour conserver une plus grande partie du comportement du modèle de référence tout en apprenant plus lentement les nouvelles préférences. Spécifiez des valeurs plus petites (par exemple, de 0,01 à 0,05) pour un apprentissage plus rapide des nouvelles préférences au risque de s’écarter du comportement du modèle de référence.

Formule de DPO complète

Voici une formule complète pour une 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

DPO avec adaptateur de rang inférieur

Les paramètres Amazon Nova disponibles pour une DPO avec adaptateur de niveau inférieur sont les suivants :

  • Configuration d’exécution

    • name : nom descriptif de votre tâche d’entraînement. Cela permet d’identifier votre tâche dans la AWS Management Console.

    • model_type : variante du modèle Nova à utiliser. Les options disponibles sont amazon.nova-micro-v1:0:128k, amazon.nova-lite-v1:0:300k ou amazon.nova-pro-v1:0:300k.

    • model_name_or_path : chemin d’accès au modèle de base. Sélectionnez le modèle à utiliser depuis nova-micro/prod, nova-lite/prod, nova-pro/prod ou le chemin S3 pour le point de contrôle post-entraînement (s3://<escrow bucket>/<job id>/outputs/checkpoints).

    • replicas : nombre d’instances de calcul à utiliser pour l’entraînement distribué. Les valeurs disponibles varient en fonction du modèle choisi. Amazon Nova Micro prend en charge 2, 4 ou 8 réplicas. Amazon Nova Lite prend en charge 4, 8, 16 ou 32 réplicas. Amazon Nova Pro prend en charge 6, 12 ou 24 réplicas.

  • Configuration d’entraînement

    • max_length : longueur de séquence maximale en jetons. Détermine la taille de la fenêtre contextuelle pour l’entraînement. La valeur maximale prise en charge est de 32 768 jetons pour la DPO.

      Des séquences plus longues amélioreront l’efficacité de l’entraînement au prix d’une augmentation des exigences de mémoire. Nous vous recommandons de faire correspondre le paramètre max_length à la distribution de vos données.

  • Paramètres de l’entraîneur

    • max_epochs : nombre de passages complets sur votre jeu de données d’entraînement. La valeur maximale est 5.

      En général, les plus grands jeux de données nécessitent moins d’époques pour converger, tandis que les plus petits en nécessitent plus. Nous vous recommandons d’ajuster le nombre d’époques en fonction de la taille de vos données.

  • Paramètres du modèle

    • hidden_dropout : probabilité de perte des sorties d’état masquées. Augmentez cette valeur d’environ 0,0-0,2 pour réduire les surajustements sur de plus petits jeux de données. Les valeurs valides sont comprises entre 0 et 1 inclus.

    • attention_dropout : probabilité de perte des poids d’attention. Ce paramètre peut faciliter la généralisation. Les valeurs valides sont comprises entre 0 et 1 inclus.

    • ffn_dropout : probabilité de perte des sorties du réseau à propagation avant. Les valeurs valides sont comprises entre 0 et 1 inclus.

  • Configuration d’optimiseur

    • lr : taux d’apprentissage qui contrôle la taille des étapes lors de l’optimisation. Nous recommandons des valeurs comprises entre 1e-6 et 1e-4 pour de bonnes performances. Les valeurs valides sont comprises entre 0 et 1 inclus.

    • name : algorithme de l’optimiseur. Actuellement, seul distributed_fused_adam est pris en charge.

    • weight_decay : force de régularisation L2. Des valeurs plus élevées (entre 0,01 et 0,1) augmentent la régularisation.

    • warmup_steps : nombre d’étapes pour augmenter progressivement le taux d’apprentissage. Cela améliore la stabilité de l’entraînement. Les valeurs valides sont comprises entre 1 et 20 inclus.

    • min_lr : taux d’apprentissage minimal en fin de décalage. Les valeurs valides sont comprises entre 0 et 1 inclus, mais doivent être inférieures au taux d’apprentissage.

  • Configuration DPO

    • beta : détermine dans quelle mesure le modèle doit correspondre aux données d’entraînement ou au modèle d’origine. Les valeurs valides sont comprises entre 0,001 et 0,5 inclus.

      Spécifiez des valeurs plus élevées (par exemple, 0,5) pour conserver une plus grande partie du comportement du modèle de référence tout en apprenant plus lentement les nouvelles préférences. Spécifiez des valeurs plus petites (par exemple, de 0,01 à 0,05) pour un apprentissage plus rapide des nouvelles préférences au risque de s’écarter du comportement du modèle de référence.

  • Paramètres de configuration LoRA

    • peft_scheme : défini sur lora pour activer l’adaptation de rang inférieur, qui génère un modèle de sortie plus efficace et plus petit. Ces propriétés spécifiques à LoRA sont également disponibles :

      • alpha : facteur de mise à l’échelle pour les poids LoRA. Ce paramètre est généralement défini sur la même valeur que adapter_dim.

      • adapter_dropout : paramètre de régularisation des paramètres LoRA.

Formule de DPO avec LoRA

Voici une formule de DPO avec 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]
Limites

La DPO comporte les limitations suivantes :

  • Les points de contrôle intermédiaires ne sont pas enregistrés pour évaluation et vous ne pouvez pas les reprendre à partir d’un point de contrôle intermédiaire. Seul le dernier point de contrôle est enregistré.

  • La journalisation MLflow n’est pas prise en charge.

  • Pour ajuster les hyperparamètres, suivez les instructions dans Selecting hyperparameters.