

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Réglage précis des modèles Amazon Nova sur SageMaker HyperPod
<a name="nova-hp-fine-tune"></a>

Les techniques suivantes vous montrent comment peaufiner les modèles Amazon Nova 2 sur SageMaker HyperPod.

**Topics**
+ [

# Peaufinage supervisé (SFT)
](nova-fine-tune.md)
+ [

# Optimisation directe des préférences (DPO)
](nova-dpo.md)
+ [

# Optimisation des politiques proximales (PPO)
](nova-ppo.md)

# Peaufinage supervisé (SFT)
<a name="nova-fine-tune"></a>

Le processus de formation SFT comprend deux étapes principales :
+ **Préparation des données** : suivez les directives établies pour créer, nettoyer ou reformater les ensembles de données selon la structure requise. Assurez-vous que les entrées, les sorties et les informations auxiliaires (telles que les traces de raisonnement ou les métadonnées) sont correctement alignées et formatées.
+ **Configuration de l'entraînement** : définissez la manière dont le modèle sera entraîné. Lors de l'utilisation, cette configuration est écrite dans un fichier de recette YAML qui inclut :
  + Chemins des sources de données (ensembles de données de formation et de validation)
  + Hyperparamètres clés (époques, taux d'apprentissage, taille du lot)
  + Composants optionnels (paramètres d'entraînement distribués, etc.)

## Comparaison et sélection des modèles Nova
<a name="nova-model-comparison"></a>

Amazon Nova 2.0 est un modèle formé sur un ensemble de données plus vaste et plus diversifié qu'Amazon Nova 1.0. Les améliorations clés comprennent les suivantes :
+ **Capacités de raisonnement améliorées** avec prise en charge du mode de raisonnement explicite
+ **Performances multilingues étendues** dans d'autres langues
+ **Performances améliorées pour les tâches complexes**, notamment le codage et l'utilisation des outils
+ **Gestion étendue du contexte** avec une précision et une stabilité accrues à des longueurs de contexte plus longues

## Quand utiliser Nova 1.0 ou Nova 2.0
<a name="nova-model-selection"></a>

Choisissez Amazon Nova 1.0 lorsque :
+ Le cas d'utilisation nécessite une compréhension standard de la langue sans raisonnement avancé
+ Les performances ont déjà été validées sur Amazon Nova 1.0 et aucune fonctionnalité supplémentaire n'est nécessaire

# SFT sur Nova 1.0
<a name="nova-sft-1"></a>

Le peaufinage supervisé (SFT) est le processus qui fournit une collection de paires invite-réponse à un modèle de fondation afin d’améliorer les performances d’un modèle de fondation pré-entraîné sur une tâche spécifique. Les exemples étiquetés sont présentés sous forme de paires invite-réponse et formulés comme des instructions. Ce processus d'optimisation modifie les poids du modèle.

Vous devez utiliser la SFT lorsque vous disposez de données spécifiques à un domaine, qui nécessitent la fourniture de paires invite-réponse spécifiques pour des résultats optimaux.

Notez que vos jeux de données d’entrée d’entraînement et de validation doivent résider dans des compartiments appartenant au client, et non dans des compartiments S3 sous séquestres ou gérés par des services.

## Exigences relatives aux données
<a name="nova-sft-1-data-requirements"></a>

Pour la SFT complète et la SFT avec adaptateur de rang inférieur (LoRA), les données doivent suivre le format d’opération [Converse Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html). Pour découvrir des exemples et les contraintes liés à ce format, consultez [Préparation des données pour optimiser les modèles de compréhension](https://docs.aws.amazon.com/nova/latest/userguide/fine-tune-prepare-data-understanding.html).

Pour valider le format de votre jeu de données avant de le soumettre, nous vous recommandons d’utiliser le [script de validation issu du référentiel d’exemples Amazon Bedrock](https://github.com/aws-samples/amazon-nova-samples/blob/main/customization/bedrock-finetuning/understanding/dataset_validation/nova_ft_dataset_validator.py). Cet outil de validation vous aidera à garantir que vos fichiers JSONL respectent les spécifications de format requises, et à identifier tout problème potentiel avant de soumettre votre tâche de peaufinage.

Les paramètres Amazon Nova disponibles pour l’ajustement de la SFT sont les suivants :
+ **Configuration d’exécution**
  + `name` : nom descriptif de votre tâche d’entraînement. Cela permet d'identifier votre travail dans le AWS Management Console.
  + `model_type` : variante du modèle Amazon 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 vers le modèle de base à utiliser pour l’entraînement. 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 la même Compte AWS région que le cluster. Tous les emplacements S3 situés au sein du chemin S3 fourni doivent se trouver dans le même compte et la même région.
  + `validation_data_s3_path` : (Facultatif) emplacement S3 du jeu de données de validation, 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 situés au sein du chemin S3 fourni doivent se trouver dans le même compte et la même région.
  + `output_s3_path`: emplacement S3 où le manifeste et les TensorBoard journaux sont stockés. Tous les emplacements S3 situés au sein du chemin S3 fourni 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 65 536 jetons pour la SFT.

    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.

    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. Les valeurs valides sont comprises entre 1e-6 et 1e-3 inclus. Nous recommandons des valeurs comprises entre 1e-6 et 1e-4 pour de bonnes performances.
  + `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.

## Démarrage rapide avec une formule de SFT complète
<a name="nova-sft-1-quick-start"></a>

Voici une recette de SFT de rang complet qui vous permet de démarrer rapidement une tâche SFT sur un cluster. SageMaker HyperPod Cette recette suppose également que vous vous êtes connecté à votre SageMaker HyperPod cluster à l'aide des AWS informations d'identification correctes.

```
run:
  name: "my-sft-micro-job" # gets appended with a unique ID for HP jobs
  model_type: "amazon.nova-micro-v1:0:128k"
  model_name_or_path: "nova-micro/prod"
  replicas: 2
  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
  save_steps: 100000
  replicas: ${recipes.run.replicas}
  micro_batch_size: 1
  task_type: sft
  global_batch_size: 64
  weights_only: True
  allow_percentage_invalid_samples: 10

  exp_manager:
    exp_dir: null
    create_wandb_logger: False
    create_tensorboard_logger: True
      project: null
      name: null
    checkpoint_callback_params:
      monitor: step
      save_top_k: 10
      mode: max
      every_n_train_steps: ${recipes.training_config.save_steps}
      save_last: True
    create_early_stopping_callback: True
    early_stopping_callback_params:
      min_delta: 0.001
      mode: min
      monitor: "val_loss"
      patience: 2

  trainer:
    log_every_n_steps: 1
    max_epochs: -1
    max_steps: 16
    limit_test_batches: 0
    gradient_clip_val: 1.0
    num_nodes: ${recipes.training_config.replicas}

  model:
    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.
    sequence_parallel: True
    optim:
      lr: 1e-5
      name: distributed_fused_adam
      bucket_cap_mb: 10
      contiguous_grad_buffer: False
      overlap_param_sync: False
      contiguous_param_buffer: False
      overlap_grad_sync: False
      adam_w_mode: true
      eps: 1e-06
      weight_decay: 0.0
      betas:
        - 0.9
        - 0.999
      sched:
        name: CosineAnnealing
        warmup_steps: 10
        constant_steps: 0
        min_lr: 1e-6

    mm_cfg:
      llm:
        freeze: false
      image_projector:
        freeze: true
        require_newline: true
      video_projector:
        freeze: true
        require_newline: false

    peft:
      peft_scheme: null

    training_validation:
      loader:
        args:
          data_loader_workers: 1
          prefetch_factor: 2
      collator:
        args:
          force_image_at_turn_beginning: false
```

## Exemple de formule complète
<a name="nova-sft-1-sample-recipe"></a>

Voici un exemple de formule complète pour une SFT avec tous les composants correctement configurés.

```
## Run config
run:
    name: "my-sft-run"              # A descriptive name for your training job
    model_type: "amazon.nova-lite-v1:0:300k"  # Model variant specification
    model_name_or_path: "nova-lite/prod"      # Base model path
    replicas: 4                     # Number of compute instances for training
    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)

    trainer:
        max_epochs: 2               # Number of training epochs

    model:
        hidden_dropout: 0.0          # Dropout for hidden states
        attention_dropout: 0.0       # Dropout for attention weights
        ffn_dropout: 0.0             # Dropout for feed-forward networks

        optim:
            lr: 1e-5                 # Learning rate
            name: distributed_fused_adam  # Optimizer algorithm
            adam_w_mode: true        # Enable AdamW mode
            eps: 1e-06               # Epsilon for numerical stability
            weight_decay: 0.0        # L2 regularization strength
            betas:                   # Adam optimizer betas
                - 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

        peft:
            peft_scheme: null        # Set to null for full-parameter fine-tuning
```

## Limitations
<a name="nova-sft-1-limitations"></a>

La publication de métriques dans Weights & Biases n'est pas prise en charge.

Pour ajuster les hyperparamètres, suivez les instructions dans [Selecting hyperparameters](https://docs.aws.amazon.com/nova/latest/userguide/customize-fine-tune-hyperparameters.html).

## Peaufinage efficace des paramètres (PEFT)
<a name="nova-fine-tune-peft"></a>

Le peaufinage efficace des paramètres (PEFT) consiste à réentraîner un petit nombre de poids supplémentaires pour adapter un modèle de fondation à de nouvelles tâches ou à de nouveaux domaines. Plus précisément, la PEFT avec adaptateur de rang inférieur (LoRA) optimise efficacement les modèles de fondation en introduisant des matrices de poids entraînables de rang inférieur dans des couches de modèles spécifiques, réduisant ainsi le nombre de paramètres pouvant être entraînés tout en préservant la qualité du modèle.

Un adaptateur PEFT avec LoRA complète le modèle de fondation en incorporant des couches d’adaptation légères qui modifient les poids du modèle lors de l’inférence tout en préservant les paramètres du modèle d’origine intacts. Cette approche est également considérée comme l’une des techniques de peaufinage les plus rentables. Pour plus d’informations, consultez [Peaufinage des modèles avec les composants d’inférence des adaptateurs](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints-adapt.html).

Vous devez utiliser la PEFT avec LoRA dans les scénarios suivants :
+ Vous souhaitez commencer par une procédure d’entraînement rapide.
+ Les performances du modèle de base sont déjà satisfaisantes. Dans ce cas, l’objectif de la PEFT avec LoRA est d’améliorer ses capacités dans le cadre de multiples tâches connexes, telles que la synthétisation de texte ou la traduction linguistique. Les propriétés de régularisation de la PEFT avec LoRA aident à prévenir le surajustement et à atténuer le risque que le modèle « oublie » le domaine source. Cela garantit que le modèle reste polyvalent et adaptable à diverses applications.
+ Vous souhaitez exécuter des scénarios de peaufinage par instructions avec des jeux de données relativement petits. La PEFT avec LoRA fonctionne mieux avec des jeux de données plus petits et spécifiques à une tâche qu’avec des jeux de données plus larges et plus grands.
+ Vous disposez de grands jeux de données étiquetés qui dépassent les limites des données de personnalisation Amazon Bedrock. Dans ce cas, vous pouvez utiliser LoRa PEFT sur l' SageMaker IA pour obtenir de meilleurs résultats.
+ Si vous avez déjà obtenu des résultats prometteurs grâce au réglage précis d'Amazon Bedrock, LoRa PEFT en SageMaker IA peut vous aider à optimiser davantage les hyperparamètres du modèle.

Les paramètres Amazon Nova disponibles pour la PEFT avec LoRA sont les suivants :
+ **Configuration d’exécution**
  + `name` : nom descriptif de votre tâche d’entraînement. Cela permet d'identifier votre travail dans le 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 vers le modèle de base à utiliser pour l’entraînement. Sélectionnez le modèle à utiliser. Les options disponibles sont `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 que vous utilisez. 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.
  + `output_s3_path`: emplacement S3 où le manifeste et les TensorBoard journaux sont stockés. Tous les emplacements S3 situés au sein du chemin S3 fourni 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 65 536 jetons pour une PEFT avec LoRA.

    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. Vous pouvez définir `max_steps` ou `max_epochs`, mais nous vous déconseillons de définir les deux. 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.
+ **Paramètres de configuration LoRA**
  + `peft_scheme` : défini sur `lora` pour activer l’adaptation de rang inférieur. 
  + `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`.
  + `adaptor_dropout` : paramètre de régularisation pour LoRA.

### Formule de PEFT
<a name="nova-sft-1-peft-recipe"></a>

Ce qui suit est une formule de PEFT 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
    model_name_or_path: "nova-lite/prod"      # Base model path
    replicas: 4                     # Number of compute instances for training
    output_s3_path: [S3_PATH_TO_STORE_MANIFEST]

## Training specific configs
training_config:
    max_length: 32768               # Maximum context window size (tokens)

    trainer:
        max_epochs: 2               # Number of training epochs

    model:
        hidden_dropout: 0.0          # Dropout for hidden states
        attention_dropout: 0.0       # Dropout for attention weights
        ffn_dropout: 0.0             # Dropout for feed-forward networks

        optim:
            lr: 1e-5                 # Learning rate
            name: distributed_fused_adam  # Optimizer algorithm
            adam_w_mode: true        # Enable AdamW mode
            eps: 1e-06               # Epsilon for numerical stability
            weight_decay: 0.0        # L2 regularization strength
            betas:                   # Adam optimizer betas
                - 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

        peft:
            peft_scheme: "lora"      # Enable LoRA for parameter-efficient fine-tuning
            lora_tuning:
                loraplus_lr_ratio: 8.0  # LoRA+ learning rate scaling factor
                alpha: 32            # Scaling factor for LoRA weights
                adapter_dropout: 0.01  # Regularization for LoRA parameters
```

### Résolution des problèmes
<a name="nova-sft-1-troubleshooting"></a>

Utilisez les informations suivantes pour vous aider à résoudre les problèmes que vous pouvez rencontrer :
+ Les jeux de données d’entrée d’entraînement et de validation doivent résider dans des compartiments appartenant au client et non sous séquestres, ni dans des compartiments S3 gérés par des services.
+ Si vous recevez un message d'erreur « Région introuvable » dans le AWS CLI, soumettez à nouveau la tâche en ajoutant la région au début de la commande start-job. Par exemple : `AWS_REGION=us-east-1 hyperpod start-job ...Job Parameters`.
+ Pour ajuster les hyperparamètres, suivez les instructions dans [Selecting hyperparameters](https://docs.aws.amazon.com/nova/latest/userguide/customize-fine-tune-hyperparameters.html).

# Optimisation directe des préférences (DPO)
<a name="nova-dpo"></a>

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](https://docs.aws.amazon.com/nova/latest/userguide/fine-tune-prepare-data-understanding.html#custom-fine-tune-constraints). 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
<a name="customize-fine-tune-hyperpod-dpo-fr"></a>

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 travail dans le 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.

    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
<a name="customize-fine-tune-hyperpod-dpo-lora"></a>

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 travail dans le 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.

    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]
```

**Limitations**  
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é.
+ Pour ajuster les hyperparamètres, suivez les instructions dans [Selecting hyperparameters](https://docs.aws.amazon.com/nova/latest/userguide/customize-fine-tune-hyperparameters.html).

# Optimisation des politiques proximales (PPO)
<a name="nova-ppo"></a>

L’optimisation des politiques proximales (PPO) est le processus qui consiste à utiliser plusieurs modèles de machine learning pour entraîner et évaluer un modèle. Les modèles suivants font partie du processus PPO :
+ **Modèle de politique ou d’entraînement acteur** : un modèle de peaufinage supervisé (SFT) qui est optimisé et mis à jour à chaque époque. Les mises à jour sont effectuées en échantillonnant des invites, en générant les réponses du modèle (complétions) et en mettant à jour les poids à l’aide d’un objectif de substitution tronqué. Cela limite l’évolution de la rentabilité logarithmique par jeton, de sorte que chaque étape de la politique est *proche* de la précédente, préservant ainsi la stabilité de l’entraînement.
+ **Modèle de génération acteur** : modèle qui génère des complétions d’invites ou des réponses à évaluer selon le modèle de récompense et le modèle critique. Les poids de ce modèle sont mis à jour à partir d’un entraînement de modèle acteur ou d’un modèle de politique à chaque époque.
+ **Modèle de récompense** : modèle avec des poids figés, utilisé pour évaluer le modèle de génération acteur.
+ **Modèle critique** : modèle avec des poids figés, utilisé pour évaluer le modèle de génération acteur. Ce score est souvent considéré comme une estimation de la récompense totale que l’acteur reçoit lorsqu’il génère les jetons restants.
+ **Modèle d’ancrage** : modèle de SFT avec des poids figés, utilisé pour calculer la divergence KL entre le modèle d’entraînement acteur et le modèle de base. Le modèle d’ancrage garantit que les mises à jour du modèle acteur ne sont pas trop drastiques par rapport au modèle de base. Des changements radicaux peuvent entraîner une instabilité ou une dégradation des performances.

Les données d’entraînement doivent être au format JSONL, où chaque ligne contient un seul objet JSON représentant un exemple d’entraînement. Voici un exemple :

```
{
    "turns": ["string", "string", ...], // Required
    "turns_to_mask": [integer, integer, ...], // Required
    "reward_category": "string", // Required
    "meta_data": {} // Optional
}
```
+ `turns` est un tableau de chaînes de conversation représentant la séquence du dialogue. Cette ligne contient les invites du système, les messages des utilisateurs et les réponses des bots. Les messages utilisateur se terminent généralement par « Bot: » pour indiquer où commence la sortie du modèle. Par exemple, `[["System prompt"], ["User: Question Bot:"], ["Bot response"]]`.
+ `turns_to_mask` est un tableau d’indices basés sur 0 qui identifie les tours de dialogue qui ne doivent pas recevoir de mise à jour du gradient. Les tours masqués sont généralement les invites du système et les tours de l’utilisateur. Par exemple, `[0, 1, 3]` masque l’invite du système et les messages de l’utilisateur (les premier et troisième messages).
+ `reward_category` est une chaîne qui identifie les aspects des performances du modèle à évaluer. Elle est utilisée pour sélectionner la catégorie de modèle de récompense appropriée pendant l’entraînement. La catégorie de récompense est disponible pour les catégories de récompenses suivantes : `default`, `math`, `coding`, `if`, `rag` et `rai`.
+ `meta_data` est un objet facultatif qui contient des informations contextuelles ou factuelles supplémentaires. Cela peut inclure des identifiants, des informations sur la source ou le contexte de la conversation. La structure est flexible en fonction des besoins de votre jeu de données.

Voici un exemple d’enregistrement :

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

Le cadre de modélisation des récompenses met en œuvre une optimisation multidimensionnelle selon des objectifs catégoriels distincts afin de faciliter une convergence robuste des modèles. La catégorie de récompense doit être sélectionnée en fonction de la tâche pour laquelle le modèle doit être optimisé. 

Nous vous recommandons de suivre les directives suivantes pour sélectionner le cadre adapté à vos tâches :
+ `default` : optimiseur à usage général pour les tâches conversationnelles standard et les interactions de base. Utilisé pour les conversations et discussions générales, les tâches d’écriture de base, les réponses simples à des questions et les requêtes de connaissances non spécialisées. 

  Voici un exemple :

  ```
  {
      "turns": ["Write a summary of climate change"],
      "turns_to_mask": [0],
      "reward_category": "default"
  }
  ```
+ `math` : optimiseur spécialisé pour les calculs mathématiques et les tâches de raisonnement numérique. Utilisé pour la résolution de problèmes mathématiques, les calculs arithmétiques, les équations algébriques, les problèmes géométriques et l’analyse statistique.

  Voici un exemple :

  ```
  {
      "turns": ["Calculate the derivative of x²"],
      "turns_to_mask": [0],
      "reward_category": "math"
  }
  ```
+ `coding` : catégorie dédiée aux requêtes liées à la programmation et au développement de logiciels. Utilisée pour l’implémentation de code, l’assistance au débogage, la conception d’algorithmes, la documentation technique et les questions d’architecture système.

  Voici un exemple :

  ```
  {
      "turns": ["Write a function to check if a string is palindrome"],
      "turns_to_mask": [0],
      "reward_category": "coding"
  }
  ```
+ `if`: Catégorie pour les tâches qui nécessitent une exécution et des step-by-step directives procédurales précises. Utilisée pour les procédures en plusieurs étapes, les instructions séquentielles, la décomposition de tâches complexes et la documentation des processus.

  Voici un exemple :

  ```
  {
      "turns": ["Provide steps to deploy a web application"],
      "turns_to_mask": [0],
      "reward_category": "if"
  }
  ```
+ `rag` : catégorie de récompense pour les tâches qui nécessitent de répondre à des requêtes basées spécifiquement sur les informations contextuelles extraites. Utilisée lorsque les réponses doivent provenir directement des documents de référence fournis, en synthétisant le contenu factuel sans dépasser le cadre des informations extraites, en veillant à ce que les réponses soient fondées sur le contexte fourni plutôt que sur des connaissances générales.

  Voici un exemple :

  ```
  {
              "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` : catégorie de récompense pour les tâches qui nécessitent l’application des principes de l’IA responsable tels que l’équité, la transparence et l’éthique. Utilisée pour évaluer les biais potentiels dans les systèmes d’IA, garantir les considérations de confidentialité, résoudre les dilemmes éthiques et promouvoir les principes de conception inclusifs.

  Voici un exemple :

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

**Masquage des tours**  
Dans les jeux de données d’entraînement, le paramètre `turns_to_mask` est crucial pour contrôler les tours de conversation qui reçoivent des mises à jour du gradient pendant l’entraînement. Ce tableau d’indices détermine les parties du dialogue que le modèle doit apprendre à générer par rapport aux parties qui doivent être traitées uniquement en tant que contexte. Un masquage approprié garantit que le modèle apprend les modèles de réponse appropriés tout en évitant de s’entraîner sur des invites système ou des entrées utilisateur susceptibles de dégrader les performances.

Nous vous recommandons la procédure de masquage suivante :
+ **Indice de masque toujours à 0** : les invites système ne devraient jamais recevoir de mises à jour du gradient.
+ **Toujours masquer les tours utilisateur** : empêchez le modèle d’apprendre à générer des entrées utilisateur.
+ **Cohérence des modèles** : utilisez des modèles de masquage identiques pour des structures de conversation similaires, telles que (0, 1, 3, 5) pour les dialogues à plusieurs tours.
+ **Entraînement sélectif** : masquez les premières réponses des bots pour concentrer l’entraînement sur l’amélioration des réponses finales.
+ **Chain-of-thought préservation** - Masquez uniquement le système et l'utilisateur ne tournent que lorsqu'il s'entraîne sur des séquences de raisonnement.
+ **Filtrage de qualité** : masquez les réponses de faible qualité des assistants pour éviter toute dégradation des performances.
+ **Optimisation du contexte** : assurez-vous que les tours masqués ne suppriment pas le contexte essentiel nécessaire aux réponses suivantes.

La clé d’un masquage efficace consiste à surveiller les métriques d’entraînement et les performances de validation afin de déterminer si votre stratégie de masquage préserve le contexte nécessaire tout en concentrant les mises à jour des gradients sur les résultats souhaités du modèle.

**Activation de la perte de divergence KL**  
Pour activer la perte de divergence KL, le serveur d’ancrage doit être activé pour calculer la divergence entre la politique actuelle et la distribution d’origine. Le type de perte KL doit être spécifié et les coefficients doivent être d’une valeur autre que zéro. Des valeurs de coefficient plus élevées aident le modèle à ne pas s’écarter beaucoup de la politique d’origine, ce qui entraîne moins de moindres modifications des performances générales. Des valeurs de coefficient plus faibles permettent des écarts plus importants par rapport à la politique précédente, ce qui améliore les performances des indicateurs cibles, mais a un impact sur les performances générales.

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

**Taux d’apprentissage**  
Le taux d’apprentissage des modèles critiques et de politiques peut être ajusté, 3e-6 étant le choix équilibré par défaut. Des taux d’apprentissage plus élevés entraînent généralement des instabilités d’entraînement, qui peuvent être identifiées par des pics de divergence KL et un comportement erratique des politiques. La baisse des taux d’apprentissage peut entraîner des problèmes de convergence et un ralentissement de l’apprentissage, comme en témoignent la stagnation des récompenses et des mises à jour minimes des politiques. Une surveillance régulière de la divergence KL, du score de récompense et de la perte de valeur permet de déterminer s’il convient d’ajuster le taux d’apprentissage pendant l’entraînement.

```
ppo_critic:
  model:
    optim:
      lr: 3e-6

ppo_actor_train:
  model:
    optim:
      lr: 3e-06
```

**Taille globale de lot**  
La taille globale de lot a un impact significatif sur les performances de la PPO dans Amazon Nova, les lots plus importants améliorant généralement la stabilité de l’entraînement et l’estimation du gradient tout en permettant un traitement parallèle plus efficace. Cependant, les lots de très grande taille peuvent entraîner des retours décroissants et être limités par la mémoire disponible, ce qui nécessite un équilibre prudent avec le taux d’apprentissage et d’autres hyperparamètres.

```
ppo_actor_train:
  model:
    global_batch_size: 160
```

Les paramètres Amazon Nova disponibles pour l’ajustement de la PPO sont les suivants :
+ **Configuration d’exécution**
  + `actor_train_replicas` : nombre d’instances de calcul à utiliser pour le modèle d’entraînement acteur. Les valeurs disponibles varient en fonction du modèle choisi. Amazon Nova Micro prend en charge 1 ou 2 réplicas. Amazon Nova Lite prend en charge 1, 2 ou 4 réplicas. Amazon Nova Pro prend en charge 3, 6 ou 12 réplicas.
  + `rm_replicas` : nombre d’instances de calcul à utiliser pour le modèle de récompense. Nous vous recommandons d’utiliser un réplica pour toutes les tailles de modèle.
  + `cm_replicas` : nombre d’instances de calcul à utiliser pour le modèle critique. Nous vous recommandons d’utiliser un réplica pour toutes les tailles de modèle.
  + `actor_generation_replicas` : nombre d’instances de calcul à utiliser pour la génération d’acteur. Les valeurs disponibles varient en fonction du modèle choisi. Amazon Nova Micro prend en charge 1 réplica. Amazon Nova Lite prend en charge 1 ou 2 réplicas. Amazon Nova Pro prend en charge 1 ou 2 réplicas.
  + `am_replicas` : nombre d’instances de calcul à utiliser pour le modèle d’ancrage. Nous vous recommandons d’utiliser un réplica pour toutes les tailles de modèle.
+ **Configuration de l’entraînement acteur (configuration de politique)**
  + `max_steps` : nombre maximal d’étapes pour optimiser ou entraîner le modèle d’entraînement acteur. Ici, une étape est définie comme déploiement, suivie de l’entraînement du modèle d’entraînement acteur avec le nombre d’exemples `global_batch_size`. Une époque est définie comme `global_batch_size * trajectory_buffer_scale`.

    La valeur choisie ici variera en fonction de votre cas d’utilisation et de la complexité du jeu de données. Nous vous recommandons de commencer par 65 époques ou 520 étapes, soit le nombre d’époques multiplié par la valeur de `trajectory_buffer_scale`. Cependant, certaines tâches nécessitent un temps d’entraînement de PPO plus long pour obtenir les mêmes performances.

    Pour une PPO, les métriques d’entraînement, telles que le score du modèle de récompense saturant et la durée moyenne des actions provenant de la console [ml-flow](https://docs.aws.amazon.com/sagemaker/latest/dg/mlflow-create-tracking-server.html), peuvent aider à identifier les points optimaux pour l’évaluation.
  + `actor_model_max_length` : longueur maximale des données d’entrée envoyées au composant de génération acteur pour générer des complétions.
  + `reward_model_max_length` : longueur maximale des données d’entrée envoyées au serveur de récompense pour évaluer les complétions.
  + `trajectory_buffer_scale` : cette zone tampon représente le nombre de déploiements générés à l’aide de l’ancien modèle d’entraînement acteur (politique) avant de mettre à jour les poids et de générer les nouveaux déploiements. Les valeurs prises en charge sont 1, 2, 4, 8 et 16.

    Si le paramètre `trajectory_buffer_scale` est égal à 1, l’entraînement est conforme à la politique. Cela signifie que les déploiements sont générés avec les poids de modèle les plus récents, mais le débit en pâtit. S’il est égal à 16, le modèle est légèrement hors politique, mais le débit est plus élevé. Nous recommandons de commencer par une valeur de 8 pour chaque modèle.
  + `kl_reward_penalty_coeff` : il s’agit la condition de divergence KL qui garantit que les mises à jour ne sont pas trop drastiques et que la politique n’est pas rédigée à partir du modèle de base ou SFT.
  + `kl_loss_coeff` : cette valeur contrôle dans quelle mesure la pénalité de divergence KL influence l’objectif d’entraînement global dans la PPO.
  + `kl_loss_type` : cette valeur indique comment calculer la divergence entre les distributions des politiques actuelles et de référence. Les `kl_loss_types` disponibles sont `kl` (divergence KL standard), `mse` (erreur quadratique moyenne), `abs` (différence absolue entre les probabilités logarithmiques) et `low_var_kl` (approximation KL à faible variance).
  + `model.clip_ratio` : le ratio de troncature de l’acteur (ε) dans une PPO est un hyperparamètre qui limite le degré de modification de la politique lors de chaque mise à jour.
  + `model.optim.lr` : taux d’apprentissage utilisé pour l’entraînement à la perte du modèle de substitution dans le modèle acteur. 
  + `model.lam` : fait partie du processus d’estimation des avantages. Un λ plus élevé donne plus de poids aux récompenses à long terme, mais avec une variance plus élevée, tandis qu’un λ faible se concentre davantage sur les récompenses immédiates avec une variance plus faible, mais plus de biais.
  + `model.ent_coeff` : la perte d’entropie dans une PPO encourage l’exploration en pénalisant la politique lorsqu’elle devient trop déterministe (c’est-à-dire en choisissant toujours les mêmes actions avec une grande confiance).
+ **Configuration du modèle de récompense**
  + `global_batch_size` : taille du lot pour évaluer les complétions à l’aide du modèle de récompense. Si `ppo_actor_train.model.global_batch_size` est supérieur à `ppo_reward.model.global_batch_size`, elles sont traitées en plusieurs lots. Notez que `ppo_actor_train.model.global_batch_size % ppo_reward.model.global_batch_size` doit être égal à 0.
  + `max_length` : longueur maximale du contexte du modèle de récompense. Devrait être la même que `ppo_actor_train.model.max_length`.
+ **Configuration du modèle critique**
  + `global_batch_size` : taille de lot correspondant à la valeur du modèle critique. Le modèle critique fournit des estimations de valeur pour chaque jeton dans les réponses fournies par le modèle acteur. La taille de lot est utilisée à la fois pour l’inférence et pour l’entraînement.

    Notez que `ppo_actor_train.model.global_batch_size % ppo_critic.model.global_batch_size` doit être égale à 0 et `ppo_actor_train.model.global_batch_size * ppo_actor_train.model.trajectory_buffer_size % ppo_critic.model.global_batch_size == 0`.
  + `max_length` : longueur maximale du contexte du modèle critique. Devrait être la même que `ppo_actor_train.model.max_length`.
  + `model.optim.lr` : taux d’apprentissage utilisé pour l’entraînement à la perte du modèle de substitution dans le modèle acteur.
+ **Configuration du modèle d’ancrage**
  + `global_batch_size` : taille du lot pour générer le journal du modèle SFT ou d’ancrage figé. Notez que `ppo_actor_train.model.global_batch_size % ppo_anchor.model.global_batch_size` doit être égal à 0.
  + `max_length` : longueur maximale du contexte du modèle de récompense. Devrait être la même que `ppo_actor_train.model.max_length`.
+ **Configuration du modèle de génération acteur**
  + `actor_model_max_length` : longueur de contexte maximale du composant de génération du modèle acteur. Devrait être la même que `ppo_actor_train.model.max_length`.

**Formule de PPO**  
Ce qui suit est une formule de 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
```

**Limitations**  
La PPO 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é.
+ Les jeux de données multimodaux ne sont pas pris en charge.
+ Les tâches d’entraînement ne sont pas automatiquement interrompues. Vous devez arrêter le travail à l'aide de la SageMaker HyperPod CLI.
+ Les indicateurs d'entraînement critiques ne sont pas pris en charge sur TensorBoard.
+ Pour ajuster les hyperparamètres, suivez les instructions dans [Selecting hyperparameters](https://docs.aws.amazon.com/nova/latest/userguide/customize-fine-tune-hyperparameters.html).