Peaufinage supervisé (SFT) - Amazon SageMaker AI

Peaufinage supervisé (SFT)

Les sections suivantes décrivent le processus de peaufinage supervisé (SFT), pour un SFT complet et pour un SFT efficace des paramètres.

Peaufinage supervisé (SFT) complet

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

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

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. 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 tâche dans la 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 le même Compte AWS 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.

    • 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 journaux TensorBoard 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. 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. 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

Voici une formule de SFT complète qui vous permet de démarrer rapidement une tâche de SFT sur un cluster HyperPod. Cette formule suppose également que vous vous êtes connecté à votre cluster HyperPod à l’aide des bonnes informations d’identification AWS.

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 val_check_interval: 100 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

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
Limites

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

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.

Peaufinage efficace des paramètres (PEFT)

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.

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 la PEFT avec LoRA sur SageMaker AI pour générer de meilleurs résultats.

  • Si vous avez déjà obtenu des résultats prometteurs via le peaufinage Amazon Bedrock, la PEFT avec LoRA dans SageMaker AI 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 tâche dans la AWS Management Console.

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

    • model_name_or_path : chemin 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 journaux TensorBoard 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

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
Limites

La PEFT comporte les limitations suivantes :

  • La configuration d’entraînement fournie précédemment comporte les valeurs recommandées pour chaque paramètre.

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

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

Résolution des problèmes

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 « Region not found » dans l’AWS CLI, soumettez de 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.