

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.

# SFT sur Nova 2.0
<a name="nova-sft-2-fine-tune"></a>

Amazon Nova Lite 2.0 apporte des fonctionnalités améliorées pour un réglage précis supervisé, notamment un mode de raisonnement avancé, une meilleure compréhension multimodale et une gestion étendue du contexte. SFT on Nova 2.0 vous permet d'adapter ces puissantes fonctionnalités à vos cas d'utilisation spécifiques tout en maintenant les performances supérieures du modèle pour les tâches complexes.

Les principales fonctionnalités de SFT on Nova 2.0 incluent :
+ **Support du mode raisonnement** : entraînez des modèles pour générer des traces de raisonnement explicites avant les réponses finales pour des capacités analytiques améliorées.
+ **Formation multimodale avancée** : affinez la compréhension des documents (PDF), la compréhension vidéo et les tâches basées sur des images avec une précision accrue.
+ **Capacités d'appel d'outils** : entraînez les modèles à utiliser efficacement des outils externes et des fonctions nécessitant des flux de travail complexes.
+ **Support contextuel étendu** : tirez parti de fenêtres contextuelles plus longues avec une stabilité et une précision accrues pour les applications gourmandes en documents.

**Note**  
Pour plus d'informations sur les images de conteneurs ou les exemples de recettes à utiliser, consultez les [recettes Amazon Nova](nova-model-recipes.md).

**Topics**
+ [Sélection du mode de raisonnement (Nova 2.0 uniquement)](#nova-sft-2-reasoning-mode)
+ [Format des données d'appel de l'outil](#nova-sft-2-tool-calling)
+ [Document comprenant le format des données](#nova-sft-2-document-understanding)
+ [Compréhension vidéo pour SFT](#nova-sft-2-video-understanding)
+ [Instructions de téléchargement des données](#nova-sft-2-data-upload)
+ [Création d'un Job de peaufinage](#nova-sft-2-creating-job)
+ [Paramètres de réglage SFT](#nova-sft-2-tuning-parameters)
+ [Guidage des hyperparamètres](#nova-sft-2-hyperparameters)

## Exemple de recette SFT
<a name="nova-sft-2-sample-recipe"></a>

Vous trouverez ci-dessous un exemple de recette pour SFT. Vous pouvez trouver cette recette et d'autres dans le référentiel de [recettes](https://github.com/aws/sagemaker-hyperpod-recipes/tree/main/recipes_collection/recipes/fine-tuning/nova).

```
run:
  name: my-full-rank-sft-run
  model_type: amazon.nova-2-lite-v1:0:256k
  model_name_or_path: nova-lite-2/prod
  data_s3_path: s3://my-bucket-name/train.jsonl  #  only and not compatible with SageMaker Training Jobs
  replicas: 4                                     # Number of compute instances for training, allowed values are 4, 8, 16, 32
  output_s3_path: s3://my-bucket-name/outputs/    # Output artifact path (HyperPod job-specific; not compatible with standard SageMaker Training Jobs)
  mlflow_tracking_uri: ""                         # Required for MLFlow
  mlflow_experiment_name: "my-full-rank-sft-experiment"  # Optional for MLFlow. Note: leave this field non-empty
  mlflow_run_name: "my-full-rank-sft-run"         # Optional for MLFlow. Note: leave this field non-empty

training_config:
  max_steps: 100                    # Maximum training steps. Minimal is 4.
  save_steps: ${oc.select:training_config.max_steps}  # How many training steps the checkpoint will be saved
  save_top_k: 5                     # Keep top K best checkpoints. Note supported only for  jobs. Minimal is 1.
  max_length: 32768                 # Sequence length (options: 8192, 16384, 32768 [default], 65536)
  global_batch_size: 32             # Global batch size (options: 32, 64, 128)
  reasoning_enabled: true           # If data has reasoningContent, set to true; otherwise False

  lr_scheduler:
    warmup_steps: 15                # Learning rate warmup steps. Recommend 15% of max_steps
    min_lr: 1e-6                    # Minimum learning rate, must be between 0.0 and 1.0

  optim_config:                     # Optimizer settings
    lr: 1e-5                        # Learning rate, must be between 0.0 and 1.0
    weight_decay: 0.0               # L2 regularization strength, must be between 0.0 and 1.0
    adam_beta1: 0.9                  # Exponential decay rate for first-moment estimates
    adam_beta2: 0.95                 # Exponential decay rate for second-moment estimates

  peft:                             # Parameter-efficient fine-tuning (LoRA)
    peft_scheme: "null"             # Disable LoRA for PEFT
```

## Sélection du mode de raisonnement (Nova 2.0 uniquement)
<a name="nova-sft-2-reasoning-mode"></a>

Amazon Nova 2.0 prend en charge le mode raisonnement pour des capacités analytiques améliorées :
+ **Mode de raisonnement (activé)** :
  + `reasoning_enabled: true`Paramétré dans la configuration d'entraînement
  + Modélisez des trains pour générer des traces de raisonnement avant les réponses finales
  + Améliore les performances lors de tâches de raisonnement complexes
+ **Mode sans raisonnement (désactivé)** :
  + Définir `reasoning_enabled: false` ou omettre le paramètre (par défaut)
  + SFT standard sans raisonnement explicite
  + Convient aux tâches qui ne bénéficient pas du step-by-step raisonnement

**Note**  
Lorsque le raisonnement est activé, il fonctionne avec un effort de raisonnement élevé. Il n'existe pas d'option de faible raisonnement pour SFT.
Le contenu du raisonnement multimodal n'est pas pris en charge pour SFT. Le mode de raisonnement s'applique aux entrées contenant uniquement du texte.

### Utilisation du mode raisonnement avec des ensembles de données non raisonnés
<a name="nova-sft-2-reasoning-non-reasoning-data"></a>

L'entraînement d'Amazon Nova sur un ensemble de données non raisonné avec `reasoning_enabled: true` est autorisé. Cela risque toutefois de faire perdre au modèle ses capacités de raisonnement, car Amazon Nova apprend principalement à générer les réponses présentées dans les données sans appliquer de raisonnement.

Si vous entraînez Amazon Nova sur un ensemble de données non raisonné mais que vous souhaitez tout de même utiliser le raisonnement lors de l'inférence :

1. Désactiver le raisonnement pendant l'entraînement (`reasoning_enabled: false`)

1. Permettre le raisonnement ultérieurement lors de l'inférence

Bien que cette approche permette de raisonner au moment de l'inférence, elle ne garantit pas une amélioration des performances par rapport à l'inférence sans raisonnement.

**Bonne pratique :** activez le raisonnement à la fois pour l'entraînement et pour l'inférence lorsque vous utilisez des ensembles de données de raisonnement, et désactivez-le pour les deux lorsque vous utilisez des ensembles de données sans raisonnement.

**Note**  
Pour plus d'informations sur les images de conteneurs ou les exemples de recettes à utiliser, consultez les [recettes Amazon Nova](nova-model-recipes.md).

## Format des données d'appel de l'outil
<a name="nova-sft-2-tool-calling"></a>

SFT prend en charge les modèles de formation à l'utilisation des outils (appel de fonctions). Vous trouverez ci-dessous un exemple de format de saisie pour l'appel d'outils :

**Exemple de saisie :**

```
{
  "schemaVersion": "bedrock-conversation-2024",
  "system": [
    {
      "text": "You are an expert in composing function calls."
    }
  ],
  "toolConfig": {
    "tools": [
      {
        "toolSpec": {
          "name": "getItemCost",
          "description": "Retrieve the cost of an item from the catalog",
          "inputSchema": {
            "json": {
              "type": "object",
              "properties": {
                "item_name": {
                  "type": "string",
                  "description": "The name of the item to retrieve cost for"
                },
                "item_id": {
                  "type": "string",
                  "description": "The ASIN of item to retrieve cost for"
                }
              },
              "required": [
                "item_id"
              ]
            }
          }
        }
      },
      {
        "toolSpec": {
          "name": "getItemAvailability",
          "description": "Retrieve whether an item is available in a given location",
          "inputSchema": {
            "json": {
              "type": "object",
              "properties": {
                "zipcode": {
                  "type": "string",
                  "description": "The zipcode of the location to check in"
                },
                "quantity": {
                  "type": "integer",
                  "description": "The number of items to check availability for"
                },
                "item_id": {
                  "type": "string",
                  "description": "The ASIN of item to check availability for"
                }
              },
              "required": [
                "item_id", "zipcode"
              ]
            }
          }
        }
      }
    ]
  },
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "text": "I need to check whether there are twenty pieces of the following item available. Here is the item ASIN on Amazon: id-123. Please check for the zipcode 94086"
        }
      ]
    },
    {
      "role": "assistant",
      "content": [
        {
          "reasoningContent": {
            "reasoningText": {
              "text": "The user wants to check how many pieces of the item with ASIN id-123 are available in the zipcode 94086"
            }
          }
        },
        {
          "toolUse": {
            "toolUseId": "getItemAvailability_0",
            "name": "getItemAvailability",
            "input": {
              "zipcode": "94086",
              "quantity": 20,
              "item_id": "id-123"
            }
          }
        }
      ]
    },
    {
      "role": "user",
      "content": [
        {
          "toolResult": {
            "toolUseId": "getItemAvailability_0",
            "content": [
              {
                "text": "[{\"name\": \"getItemAvailability\", \"results\": {\"availability\": true}}]"
              }
            ]
          }
        }
      ]
    },
    {
      "role": "assistant",
      "content": [
        {
          "text": "Yes, there are twenty pieces of item id-123 available at 94086. Would you like to place an order or know the total cost?"
        }
      ]
    }
  ]
}
```

Considérations importantes concernant les données relatives aux appels d'outils :
+ ToolUse doit apparaître uniquement dans les virages d'assistant
+ ToolResult doit apparaître uniquement au tour de l'utilisateur
+ ToolResult doit être uniquement en texte ou en JSON ; les autres modalités ne sont actuellement pas prises en charge pour les modèles Amazon Nova
+ L'InputSchema du ToolSpec doit être un objet de schéma JSON valide
+ Chacun ToolResult doit faire référence toolUseId à un assistant précédent valide ToolUse, toolUseId utilisé exactement une fois par conversation

**Note**  
Pour plus d'informations sur les images de conteneurs ou les exemples de recettes à utiliser, consultez les [recettes Amazon Nova](nova-model-recipes.md).

## Document comprenant le format des données
<a name="nova-sft-2-document-understanding"></a>

SFT prend en charge les modèles de formation sur les tâches de compréhension des documents. Vous trouverez ci-dessous un exemple de format de saisie :

**Exemple d'entrée**

```
{
  "schemaVersion": "bedrock-conversation-2024",
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "text": "What are the ways in which a customer can experience issues during checkout on Amazon?"
        },
        {
          "document": {
            "format": "pdf",
            "source": {
              "s3Location": {
                "uri": "s3://my-bucket-name/path/to/documents/customer_service_debugging.pdf",
                "bucketOwner": "123456789012"
              }
            }
          }
        }
      ]
    },
    {
      "role": "assistant",
      "content": [
        {
          "text": "Customers can experience issues with 1. Data entry, 2. Payment methods, 3. Connectivity while placing the order. Which one would you like to dive into?"
        }
      ],
      "reasoning_content": [
        {
          "text": "I need to find the relevant section in the document to answer the question.",
          "type": "text"
        }
      ]
    }
  ]
}
```

Considérations importantes pour la compréhension des documents :
+ Seuls les fichiers PDF sont pris en charge
+ La taille maximale du document est de 10 Mo
+ Un échantillon peut contenir des documents et du texte, mais ne peut pas mélanger des documents avec d'autres modalités (telles que des images ou des vidéos)

**Note**  
Pour plus d'informations sur les images de conteneurs ou les exemples de recettes à utiliser, consultez les [recettes Amazon Nova](nova-model-recipes.md).

## Compréhension vidéo pour SFT
<a name="nova-sft-2-video-understanding"></a>

SFT prend en charge le réglage précis des modèles pour les tâches de compréhension vidéo. Vous trouverez ci-dessous un exemple de format de saisie :

**Exemple d'entrée**

```
{
  "schemaVersion": "bedrock-conversation-2024",
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "text": "What are the ways in which a customer can experience issues during checkout on Amazon?"
        },
        {
          "video": {
            "format": "mp4",
            "source": {
              "s3Location": {
                "uri": "s3://my-bucket-name/path/to/videos/customer_service_debugging.mp4",
                "bucketOwner": "123456789012"
              }
            }
          }
        }
      ]
    },
    {
      "role": "assistant",
      "content": [
        {
          "text": "Customers can experience issues with 1. Data entry, 2. Payment methods, 3. Connectivity while placing the order. Which one would you like to dive into?"
        }
      ],
      "reasoning_content": [
        {
          "text": "I need to find the relevant section in the video to answer the question.",
          "type": "text"
        }
      ]
    }
  ]
}
```

Considérations importantes pour la compréhension de la vidéo :
+ Les vidéos peuvent atteindre un maximum de 50 Mo
+ Les vidéos peuvent durer jusqu'à 15 minutes
+ Une seule vidéo est autorisée par échantillon ; les vidéos multiples dans le même échantillon ne sont pas prises en charge
+ Un échantillon peut contenir de la vidéo et du texte, mais ne peut pas mélanger la vidéo avec d'autres modalités (telles que des images ou des documents)

**Note**  
Pour plus d'informations sur les images de conteneurs ou les exemples de recettes à utiliser, consultez les [recettes Amazon Nova](nova-model-recipes.md).

## Instructions de téléchargement des données
<a name="nova-sft-2-data-upload"></a>

Téléchargez des ensembles de données de formation et de validation dans un compartiment S3. Spécifiez les emplacements suivants dans le `run` bloc de la recette :

```
## Run config
run:
  ...
  data_s3_path: "s3://<bucket-name>/<training-directory>/<training-file>.jsonl"
```

**Remarque** : remplacez`<bucket-name>`,`<training-directory>`, `<validation-directory>``<training-file>`, et `<validation-file>` par des chemins S3 réels.

**Remarque** : Les ensembles de données de validation ne sont actuellement pas pris en charge pour SFT avec Amazon Nova 2.0. Si un ensemble de données de validation est fourni, il sera ignoré.

## Création d'un Job de peaufinage
<a name="nova-sft-2-creating-job"></a>

Définissez le modèle de base à l'aide `model_name_or_path` des champs `model_type` et du `run` bloc :

```
## Run config
run:
  ...
  model_type: amazon.nova-2-lite-v1:0:256k
  model_name_or_path: nova-lite-2/prod
  ...
```

## Paramètres de réglage SFT
<a name="nova-sft-2-tuning-parameters"></a>

Les paramètres disponibles pour le réglage avec SFT sont les suivants :

**Configuration d'exécution**  

+ **nom : nom** descriptif de votre poste de formation. Cela permet d'identifier votre tâche dans la console AWS de gestion.
+ **model\_type** : variante du modèle Amazon Nova à utiliser. Les options disponibles sont les `amazon.nova-2-lite-v1:0:256k` suivantes :
+ **model\_name\_or\_path : chemin vers** le modèle de base à utiliser pour votre entraînement. Les options disponibles sont`nova-lite-2/prod`, ou le chemin S3 pour le point de contrôle post-entraînement ()`s3://customer-escrow-bucket-unique_id/training_run_name`.
+ **répliques** : nombre d'instances de calcul à utiliser pour la formation distribuée. Les valeurs disponibles varient en fonction du modèle que vous choisissez. Amazon Nova Lite 2.0 prend en charge 4, 8, 16 ou 32 répliques.
+ **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 AWS compte et dans 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** : (Facultatif) L'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 fournis doivent se trouver dans le même compte et la même région.
+ **output\_s3\_path** : emplacement S3 où le manifeste et les journaux sont stockés. TensorBoard Tous les emplacements S3 fournis doivent se trouver dans le même AWS compte et dans la même AWS région.
+ **mlflow\_tracking\_uri** : l'ARN de l'application à utiliser pour MLFlow la journalisation. MLFlow 
+ **mlflow\_experiment\_name** : nom de l'expérience. MLFlow 
+ **mlflow\_run\_name : nom de l'exécution**. MLFlow 

**Configuration de la formation**  

+ **max\_steps** : le nombre d'étapes d'entraînement à exécuter. Chaque étape entraînera le modèle avec un `global_batch_size` certain nombre d'éléments.
+ **save\_steps** : fréquence (en étapes) à laquelle enregistrer les points de contrôle du modèle pendant l'entraînement.
+ **save\_top\_k** : Le nombre maximum de meilleurs points de contrôle à conserver en fonction des métriques de validation.
+ **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 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.
+ **global\_batch\_size** : nombre total d'échantillons d'entraînement traités ensemble en un seul passage en avant ou en arrière sur tous les appareils et tous les travailleurs.

  Cette valeur multiplie la taille du lot par appareil et le nombre d’appareils. Cela affecte la stabilité de l’entraînement et le débit. Nous vous recommandons de commencer par une taille de lot adaptée à la mémoire, puis d’augmenter verticalement à partir de là. Pour les données spécifiques à un domaine, des lots plus importants peuvent trop lisser les gradients.
+ **reasoning\_enabled** : indicateur booléen pour activer les capacités de raisonnement pendant l'entraînement.

**Planificateur de taux d'apprentissage**  

+ **warmup\_steps** : nombre d'étapes pour augmenter progressivement le taux d'apprentissage. Cela améliore la stabilité de l’entraînement.
+ **min\_lr** : Le taux d'apprentissage minimum à la fin de la décadence. Les valeurs valides sont comprises entre 0 et 1 inclus, mais doivent être inférieures au taux d’apprentissage.

**Configuration de l'optimiseur**  

+ **lr** : le 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.
+ **weight\_decay** : La force de régularisation L2. Des valeurs plus élevées (entre 0,01 et 0,1) augmentent la régularisation.
+ **adam\_beta1** : Le taux de décroissance exponentiel pour les premières estimations dans l'optimiseur Adam. La valeur par défaut est 0,9.
+ **adam\_beta2** : Le taux de décroissance exponentiel pour le deuxième instant est estimé dans l'optimiseur Adam. La valeur par défaut est 0,95.

**Configuration PEFT**  

+ **peft\_scheme : schéma de réglage** fin efficace en termes de paramètres à utiliser. Les options concernent `'null'` un réglage précis du rang complet ou un réglage précis basé sur `lora` LoRA.

**Réglage LoRa (lorsque peft\_scheme est « lora »)**  

+ **alpha** : paramètre de mise à l'échelle LoRa. Contrôle l'amplitude de l'adaptation de rang inférieur. Les valeurs typiques sont comprises entre 8 et 128.
+ **lora\_plus\_lr\_ratio : taux** d'apprentissage pour l'optimisation LoRa\+. Ce multiplicateur ajuste le taux d'apprentissage spécifiquement pour les paramètres LoRa.

## Guidage des hyperparamètres
<a name="nova-sft-2-hyperparameters"></a>

Utilisez les hyperparamètres recommandés suivants en fonction de l'approche d'entraînement :

**Entraînement complet**
+ **Époques** : 1
+ **Taux d'apprentissage (lr)** : 1e-5
+ **Taux d'apprentissage minimal (min\_lr)** : 1e-6

**LoRa (adaptation de bas rang)**
+ **Époques** : 2
+ **Taux d'apprentissage (lr)** : 5e-5
+ **Taux d'apprentissage minimal (min\_lr)** : 1e-6

**Remarque** : ajustez ces valeurs en fonction de la taille du jeu de données et des performances de validation. Surveillez les indicateurs d'entraînement pour éviter le surajustement.