

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.

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

## Présentation de
<a name="nova-dpo-smtj-overview"></a>

L'optimisation directe des préférences (DPO) est une technique d'alignement qui permet d'affiner les modèles de base à l'aide de données de comparaison par paires afin d'aligner les résultats des modèles sur les préférences humaines. Contrairement aux méthodes d'apprentissage par renforcement, le DPO optimise directement le comportement du modèle en fonction des commentaires humains concernant les réponses les plus souhaitables, offrant ainsi une approche plus stable et évolutive.

**Pourquoi utiliser DPO**

Les modèles de base peuvent générer des résultats factuellement corrects mais ne pas correspondre aux besoins spécifiques des utilisateurs, aux valeurs organisationnelles ou aux exigences de sécurité. Le DPO répond à ce problème en vous permettant de :
+ Ajustez les modèles en fonction des modèles de comportement souhaités
+ Réduisez les sorties indésirables ou nocives
+ Aligner les réponses des modèles sur la voix de la marque et les directives de communication
+ Améliorez la qualité des réponses en fonction des commentaires des experts du domaine
+ Mettre en œuvre des garde-fous de sécurité grâce à des modèles de réponse privilégiés

**Comment fonctionne le DPO**

Le DPO utilise des exemples appariés dans lesquels des évaluateurs humains indiquent laquelle des deux réponses possibles est préférée. Le modèle apprend à maximiser la probabilité de générer les réponses préférées tout en minimisant les réponses indésirables.

**Quand utiliser le DPO**

Utilisez DPO dans les scénarios suivants :
+ Optimisation pour des résultats subjectifs qui nécessitent un alignement sur des préférences humaines spécifiques
+ Ajustement du ton, du style ou des caractéristiques du contenu du modèle
+ Apporter des améliorations ciblées 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
+ Entraînement avec apprentissage par renforcement sans récompense en utilisant uniquement les données de préférence

## Modèles et techniques pris en charge
<a name="nova-dpo-smtj-models"></a>

DPO prend en charge à la fois le réglage précis de tous les paramètres et le LoRa (Low-Rank Adaptation) :


| Modèle | Entrées prises en charge | Type d’instance | Nombre d’instances recommandées | Nombre d’instances autorisées | 
| --- | --- | --- | --- | --- | 
| Amazon Nova Micro | Texte | ml.p5.48xlarge | 2 | 2, 4, 8 | 
| Amazon Nova Lite | Texte, image | ml.p5.48xlarge | 4 | 2, 4, 8, 16 | 
| Amazon Nova Pro | Texte, image | ml.p5.48xlarge | 6 | 6, 12, 24 | 

**Approches de formation**
+ **DPO de rang complet** : met à jour tous les paramètres du modèle. Offre potentiellement une meilleure qualité d'alignement, mais nécessite davantage de ressources de calcul et produit des modèles plus grands.
+ **LoRa DPO** : utilise des adaptateurs légers pour un réglage précis efficace des paramètres. Permet une formation et un déploiement plus efficaces avec des modèles de sortie plus petits tout en maintenant une bonne qualité d'alignement.

Dans la plupart des cas d'utilisation, l'approche LoRa fournit une capacité d'adaptation suffisante avec une efficacité nettement améliorée.

## Format de données
<a name="nova-dpo-smtj-data"></a>

Les données d'entraînement du DPO suivent le même format que le format SFT, sauf que le dernier tour de l'assistant doit contenir des paires de préférences avec `preferred` et `non-preferred` des étiquettes.

### Structure de base
<a name="nova-dpo-smtj-data-structure"></a>

Le dernier tour de l'assistant utilise un `candidates` tableau au lieu de `content` :

```
{
  "role": "assistant",
  "candidates": [
    {
      "content": [
        {
          "text": "This is the preferred response."
        }
      ],
      "preferenceLabel": "preferred"
    },
    {
      "content": [
        {
          "text": "This is the non-preferred response."
        }
      ],
      "preferenceLabel": "non-preferred"
    }
  ]
}
```

### Exemple de texte complet
<a name="nova-dpo-smtj-data-text-example"></a>

```
{
  "schemaVersion": "bedrock-conversation-2024",
  "system": [
    {
      "text": "You are a helpful assistant."
    }
  ],
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "text": "What is the capital of France?"
        }
      ]
    },
    {
      "role": "assistant",
      "content": [
        {
          "text": "The capital of France is Paris."
        }
      ]
    },
    {
      "role": "user",
      "content": [
        {
          "text": "Tell me more about it."
        }
      ]
    },
    {
      "role": "assistant",
      "candidates": [
        {
          "content": [
            {
              "text": "Paris is the capital and largest city of France, known for the Eiffel Tower, world-class museums like the Louvre, and its rich cultural heritage."
            }
          ],
          "preferenceLabel": "preferred"
        },
        {
          "content": [
            {
              "text": "Paris is a city in France."
            }
          ],
          "preferenceLabel": "non-preferred"
        }
      ]
    }
  ]
}
```

### Exemple avec images
<a name="nova-dpo-smtj-data-image-example"></a>

```
{
  "schemaVersion": "bedrock-conversation-2024",
  "system": [
    {
      "text": "You are a helpful assistant."
    }
  ],
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "text": "Describe this image."
        },
        {
          "image": {
            "format": "jpeg",
            "source": {
              "s3Location": {
                "uri": "s3://your-bucket/your-path/image.jpg",
                "bucketOwner": "your-aws-account-id"
              }
            }
          }
        }
      ]
    },
    {
      "role": "assistant",
      "candidates": [
        {
          "content": [
            {
              "text": "The image shows a detailed description with relevant context and observations."
            }
          ],
          "preferenceLabel": "preferred"
        },
        {
          "content": [
            {
              "text": "This is a picture."
            }
          ],
          "preferenceLabel": "non-preferred"
        }
      ]
    }
  ]
}
```

### Configuration requise pour les jeux de données
<a name="nova-dpo-smtj-data-requirements"></a>
+ **Format** : fichier JSONL unique pour la formation, fichier JSONL unique pour la validation (facultatif)
+ **Taille minimale** : 1 000 paires de préférence recommandées pour un entraînement efficace
+ **Qualité** : des données de préférences de haute qualité produisent des résultats plus efficaces
+ **Autres contraintes** : Identiques à SFT. Pour plus d’informations, consultez Contraintes liées aux jeux de données.

**Téléchargement de données**

```
aws s3 cp /path/to/training-data/ s3://your-bucket/train/ --recursive
aws s3 cp /path/to/validation-data/ s3://your-bucket/val/ --recursive
```

## Configuration de la recette
<a name="nova-dpo-smtj-recipe"></a>

### Configuration générale de l’exécution
<a name="nova-dpo-smtj-recipe-run"></a>

```
run:
  name: "my-dpo-run"
  model_type: "amazon.nova-lite-v1:0:300k"
  model_name_or_path: "nova-lite/prod"
  replicas: 4
```


| Paramètre | Description | 
| --- | --- | 
| name | Nom descriptif de votre poste de formation | 
| model\$1type | Variante du modèle Nova (ne pas modifier) | 
| model\$1name\$1or\$1path | Chemin du modèle de base (ne pas modifier) | 
| replicas | Nombre d'instances de calcul pour la formation distribuée | 

### Configuration d’entraînement
<a name="nova-dpo-smtj-recipe-training"></a>

```
training_config:
  max_length: 16384
  global_batch_size: 32

  trainer:
    max_epochs: 3

  model:
    hidden_dropout: 0.0
    attention_dropout: 0.0
    ffn_dropout: 0.0
```


| Paramètre | Description | Range | 
| --- | --- | --- | 
| max\$1length | Longueur de séquence maximale en jetons | 1024—32768 | 
| global\$1batch\$1size | Échantillons par étape d'optimisation | Micro/Lite/Pro: 16, 32, 64, 128. Micro/Lite : 256 | 
| max\$1epochs | La formation passe par un ensemble de données | Minimum : 1 | 
| hidden\$1dropout | Abandon pour les états cachés | 0.0-1.0 | 
| attention\$1dropout | Abandon scolaire pour perdre de l'attention | 0.0-1.0 | 
| ffn\$1dropout | Abandon pour les couches rétroactives | 0.0-1.0 | 

### Configuration d’optimiseur
<a name="nova-dpo-smtj-recipe-optimizer"></a>

```
model:
  optim:
    lr: 1e-5
    name: distributed_fused_adam
    adam_w_mode: true
    eps: 1e-08
    weight_decay: 0.0
    betas:
      - 0.9
      - 0.999
    sched:
      warmup_steps: 10
      constant_steps: 0
      min_lr: 1e-6
```


| Paramètre | Description | Range | 
| --- | --- | --- | 
| lr | Taux d’apprentissage | 0—1 (généralement 1e-6 à 1e-4) | 
| weight\$1decay | Force de régularisation L2 | 0.0-1.0 | 
| warmup\$1steps | Étapes pour augmenter progressivement le taux d'apprentissage | 0 à 20 | 
| min\$1lr | Taux d'apprentissage minimal en fin de décadence | 0—1 (doit être < lr) | 

### Configuration spécifique au DPO
<a name="nova-dpo-smtj-recipe-dpo"></a>

```
model:
  dpo_cfg:
    beta: 0.1
```


| Paramètre | Description | Range | 
| --- | --- | --- | 
| beta | Équilibre entre l'ajustement des données d'entraînement et le maintien de la proximité avec le modèle d'origine | 0,001—0,5 | 
+ **Bêta supérieur (0,1)** : préserve davantage le comportement du modèle de référence mais peut apprendre les préférences plus lentement
+ **Bêta inférieur (0,01 à 0,05)** : apprentissage des préférences plus agressif mais risque de divergence par rapport à la référence

**Recommandation** : Commencez par le bas `beta: 0.1` et ajustez à la baisse si l'apprentissage des préférences semble insuffisant.

### Configuration LoRa PET
<a name="nova-dpo-smtj-recipe-lora"></a>

```
model:
  peft:
    peft_scheme: "lora"
    lora_tuning:
      loraplus_lr_ratio: 64.0
      alpha: 32
      adapter_dropout: 0.01
```


| Paramètre | Description | Valeurs autorisées | 
| --- | --- | --- | 
| peft\$1scheme | Méthode de réglage précis | "lora"ou null (rang complet) | 
| alpha | Facteur d'échelle pour les poids LoRa | 32, 64, 96, 128, 160, 192 | 
| loraplus\$1lr\$1ratio | Facteur d'échelle du taux d'apprentissage LoRa\$1 | 0,0—100,0 | 
| adapter\$1dropout | Régularisation des paramètres LoRa | 0.0-1.0 | 

## Démarrage d'un poste de formation
<a name="nova-dpo-smtj-start"></a>

**Image du conteneur**

```
708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-fine-tune-repo:SM-TJ-DPO-latest
```

**Exemple de code**

```
from sagemaker.pytorch import PyTorch
from sagemaker.inputs import TrainingInput

instance_type = "ml.p5.48xlarge"
instance_count = 4

image_uri = "708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-fine-tune-repo:SM-TJ-DPO-latest"

recipe_overrides = {
    "training_config": {
        "trainer": {"max_epochs": 2},
        "model": {
            "dpo_cfg": {"beta": 0.1},
            "peft": {
                "peft_scheme": "lora",
                "lora_tuning": {
                    "loraplus_lr_ratio": 64.0,
                    "alpha": 32,
                    "adapter_dropout": 0.01,
                },
            },
        },
    },
}

estimator = PyTorch(
    output_path=f"s3://{bucket_name}/{job_name}",
    base_job_name=job_name,
    role=role,
    instance_count=instance_count,
    instance_type=instance_type,
    training_recipe="fine-tuning/nova/nova_lite_p5_gpu_lora_dpo",
    recipe_overrides=recipe_overrides,
    max_run=18000,
    sagemaker_session=sagemaker_session,
    image_uri=image_uri,
    disable_profiler=True,
    debugger_hook_config=False,
)

train_input = TrainingInput(
    s3_data=train_dataset_s3_path,
    distribution="FullyReplicated",
    s3_data_type="Converse",
)

val_input = TrainingInput(
    s3_data=val_dataset_s3_path,
    distribution="FullyReplicated",
    s3_data_type="Converse",
)

estimator.fit(inputs={"train": train_input, "validation": val_input}, wait=True)
```

## Déploiement du modèle
<a name="nova-dpo-smtj-deploy"></a>

Une fois la formation terminée, déployez le modèle personnalisé sur Amazon Bedrock à l'aide de la fonctionnalité d'importation de modèles personnalisés. Le modèle prend en charge à la fois le débit provisionné et l'inférence à la demande. Les modèles entraînés par LoRA prennent en charge l'inférence à la demande.

Pour les instructions de déploiement, voir [Déploiement de modèles personnalisés](deploy-custom-model.md).

## Limitations
<a name="nova-dpo-smtj-limitations"></a>
+ **Modalités de saisie** : Le DPO accepte uniquement le texte et les images. L'entrée vidéo n'est pas prise en charge.
+ **Modalité de sortie** : texte uniquement
+ **Paires de préférences** : le dernier tour d'assistant doit contenir exactement deux candidats avec des `non-preferred` étiquettes `preferred` et
+ **Limite d'images** : 10 images maximum par bloc de contenu
+ **Modalités mixtes** : impossible de combiner le texte, l'image et la vidéo dans le même travail de formation