Überwachte Feinabstimmung (SFT) - Amazon SageMaker KI

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Überwachte Feinabstimmung (SFT)

In den folgenden Abschnitten wird der Prozess der überwachten Feinabstimmung (Supervised Fine-Tuning, SFT) beschrieben, sowohl bei Vollrang-SFT als auch bei parametereffizienter SFT.

Vollständig überwachte Feinabstimmung (SFT)

Unter überwachter Feinabstimmung (SFT) versteht man den Prozess der Bereitstellung einer Sammlung von Prompt-Response-Paaren für ein Basismodell, um die Leistung eines vorab trainierten Fundamentmodells bei einer bestimmten Aufgabe zu verbessern. Die beschrifteten Beispiele sind als Prompt-Response-Paare formatiert und als Anweisungen formuliert. Durch diesen Feinabstimmungsprozess werden die Gewichtungen des Modells geändert.

Sie sollten SFT verwenden, wenn Sie über domänenspezifische Daten verfügen, für die optimale Ergebnisse die Bereitstellung bestimmter Prompt-Response-Paare erforderlich ist.

Beachten Sie, dass sich Ihre Schulungs- und Validierungs-Eingabedatensätze in kundeneigenen Buckets befinden müssen, nicht in Escrow- oder service-verwalteten S3-Buckets.

Datenanforderungen

Für Full-Rank SFT und Low-Rank Adapter (LoRa) -SFT sollten die Daten dem Amazon Bedrock Converse-Betriebsformat entsprechen. Beispiele und Einschränkungen dieses Formats finden Sie unter Vorbereiten von Daten für die Feinabstimmung von Understanding models.

Um Ihr Datensatzformat vor der Einreichung zu überprüfen, empfehlen wir, das Validierungsskript aus dem Amazon Bedrock Samples Repository zu verwenden. Mit diesem Validierungstool können Sie sicherstellen, dass Ihre JSONL-Dateien den erforderlichen Formatspezifikationen entsprechen, und mögliche Probleme identifizieren, bevor Sie Ihren Feinabstimmungsauftrag einreichen.

Die Amazon Nova-Parameter, die für die Optimierung mit SFT verfügbar sind, lauten wie folgt:

  • Konfiguration ausführen

    • name: Ein aussagekräftiger Name für Ihren Trainingsjob. Dies hilft dabei, Ihren Job in der AWS Management Console zu identifizieren.

    • model_type: Die zu verwendende Amazon Nova-Modellvariante. Die verfügbaren Optionen sindamazon.nova-micro-v1:0:128k,amazon.nova-lite-v1:0:300k, oderamazon.nova-pro-v1:0:300k.

    • model_name_or_path: Der Pfad zum Basismodell, das Sie für Ihr Training verwenden möchten. Wählen Sie das Modell ausnova-micro/prod, nova-lite/prodnova-pro/prod, oder den S3-Pfad für den Checkpoint nach dem Training () s3://<escrow bucket>/<job id>/outputs/checkpoints aus.

    • replicas: Die Anzahl der Recheninstanzen, die für verteiltes Training verwendet werden sollen. Die verfügbaren Werte variieren je nach ausgewähltem Modell. Amazon Nova Micro unterstützt 2, 4 oder 8 Replikate. Amazon Nova Lite unterstützt 4, 8, 16 oder 32 Replikate. Amazon Nova Pro unterstützt 6, 12 oder 24 Replikate.

    • data_s3_path: Der S3-Speicherort des Trainingsdatensatzes, bei dem es sich um eine JSONL-Datei handelt. Diese Datei muss sich in derselben Region wie der AWS-Konto Cluster befinden. Alle S3-Standorte innerhalb des angegebenen S3-Pfads müssen sich im selben Konto und in derselben Region befinden.

    • validation_data_s3_path: (Optional) Der S3-Speicherort des Validierungsdatensatzes, bei dem es sich um eine JSONL-Datei handelt. Diese Datei muss sich in demselben Konto und derselben Region wie der Cluster befinden. Alle S3-Standorte innerhalb des angegebenen S3-Pfads müssen sich im selben Konto und in derselben Region befinden.

    • output_s3_path: Der S3-Speicherort, an dem das Manifest und die TensorBoard Protokolle gespeichert sind. Alle S3-Standorte innerhalb des angegebenen S3-Pfads müssen sich im selben Konto und in derselben Region befinden.

  • Konfiguration des Trainings

    • max_length: Die maximale Sequenzlänge in Tokens. Dies bestimmt die Größe des Kontextfensters für das Training. Der maximal unterstützte Wert beträgt 65.536 Token für SFT.

      Längere Sequenzen verbessern die Trainingseffizienz auf Kosten eines erhöhten Speicherbedarfs. Wir empfehlen Ihnen, den max_length Parameter an Ihre Datenverteilung anzupassen.

  • Trainer-Einstellungen

    • max_epochs: Die Anzahl der vollständigen Durchläufe, die deinen Trainingsdatensatz durchlaufen haben. Der Höchstwert ist 5.

      Im Allgemeinen benötigen größere Datensätze weniger Epochen, um zu konvergieren, während kleinere Datensätze mehr Epochen erfordern, um zu konvergieren. Wir empfehlen, dass Sie die Anzahl der Epochen an die Größe Ihrer Daten anpassen.

  • Modell-Einstellungen

    • hidden_dropout: Die Wahrscheinlichkeit, dass ausgeblendete Ausgaben verloren gehen. Erhöhen Sie diesen Wert um etwa 0,0-0,2, um eine Überanpassung bei kleineren Datensätzen zu vermeiden. Gültige Werte liegen zwischen 0 und 1 (einschließlich).

    • attention_dropout: Die Wahrscheinlichkeit, dass die Aufmerksamkeit nachlässt, wird gewichtet. Dieser Parameter kann bei der Generalisierung helfen. Gültige Werte liegen zwischen 0 und 1 (einschließlich).

    • ffn_dropout: Die Wahrscheinlichkeit, dass Feed-Forward-Netzwerkausgänge ausfallen. Gültige Werte liegen zwischen 0 und 1 (einschließlich).

  • Konfiguration des Optimierers

    • lr: Die Lernrate, die die Schrittgröße während der Optimierung steuert. Gültige Werte liegen zwischen 1e-6-1e-3 (einschließlich). Für eine gute Leistung empfehlen wir Werte zwischen 1e-6-1e-4.

    • name: Der Optimierer-Algorithmus. Derzeit wird nur distributed_fused_adam unterstützt.

    • weight_decay: Die Stärke der L2-Regularisierung. Höhere Werte (zwischen 0,01 und 0,1) erhöhen die Regularisierung.

    • warmup_steps: Die Anzahl der Schritte zur schrittweisen Erhöhung der Lernrate. Dies verbessert die Stabilität des Trainings. Gültige Werte liegen zwischen 1 und 20 (einschließlich).

    • min_lr: Die minimale Lernrate am Ende des Zerfalls. Gültige Werte liegen zwischen 0 und 1 (einschließlich), müssen jedoch unter der Lernrate liegen.

Schneller Start mit einem umfassenden SFT-Rezept

Im Folgenden finden Sie ein Rezept für SFT mit vollem Rang, mit dem Sie schnell einen SFT-Job in einem Cluster starten können. HyperPod Bei diesem Rezept wird auch davon ausgegangen, dass Sie mit den richtigen Anmeldeinformationen eine Verbindung zu Ihrem HyperPod Cluster hergestellt haben. 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
Beispiel für ein Rezept mit vollständigem Rang

Im Folgenden finden Sie ein Beispiel für ein Full-Rank-Rezept für SFT, bei dem alle Komponenten ordnungsgemäß konfiguriert sind.

## 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
Einschränkungen

Das Veröffentlichen von Metriken auf Weights & Biases MLFlow wird nicht unterstützt.

Zwischenprüfpunkte werden nicht zur Auswertung gespeichert, und Sie können nicht von einem Zwischenprüfpunkt aus weitermachen. Nur der letzte Checkpoint wird gespeichert.

Folgen Sie den Anweisungen unter Hyperparameter auswählen, um die Hyperparameter anzupassen.

Parametereffiziente Feinabstimmung (PEFT)

Bei der parametereffizienten Feinabstimmung (PEFT) wird eine kleine Anzahl zusätzlicher Gewichte neu trainiert, um ein Basismodell an neue Aufgaben oder Bereiche anzupassen. Insbesondere beim Low-Rank Adapter (LoRa) -PEFT werden Basismodelle effizient optimiert, indem trainierbare Gewichtsmatrizen mit niedrigem Rang in spezifische Modellebenen eingeführt werden, wodurch die Anzahl der trainierbaren Parameter reduziert und gleichzeitig die Modellqualität erhalten bleibt.

Ein LoRa-PEFT-Adapter erweitert das Basismodell um leichte Adapterschichten, die die Gewichte des Modells während der Inferenz modifizieren und gleichzeitig die ursprünglichen Modellparameter beibehalten. Dieser Ansatz wird auch als eine der kostengünstigsten Feinabstimmungstechniken angesehen. Weitere Informationen finden Sie unter Feinabstimmung von Modellen mit Adapter-Inferenzkomponenten.

Sie sollten LoRa PEFT in den folgenden Szenarien verwenden:

  • Sie möchten mit einem schnellen Trainingsverfahren beginnen.

  • Die Leistung des Basismodells ist bereits zufriedenstellend. In diesem Fall besteht das Ziel von LoRa PEFT darin, seine Fähigkeiten für mehrere verwandte Aufgaben wie Textzusammenfassung oder Sprachübersetzung zu verbessern. Die Regularisierungseigenschaften von LoRa PEFT tragen dazu bei, Überanpassungen zu verhindern und das Risiko zu minimieren, dass das Modell die Quelldomäne „vergisst“. Dadurch wird sichergestellt, dass das Modell vielseitig und an verschiedene Anwendungen anpassbar bleibt.

  • Sie möchten Szenarien zur Feinabstimmung von Anweisungen mit relativ kleinen Datensätzen durchführen. LoRa PEFT schneidet bei kleineren, aufgabenspezifischen Datensätzen besser ab als bei breiteren, größeren Datensätzen.

  • Sie haben große, beschriftete Datensätze, die die Grenzwerte für Amazon Bedrock-Anpassungsdaten überschreiten. In diesem Fall können Sie LoRa PEFT auf SageMaker KI verwenden, um bessere Ergebnisse zu erzielen.

  • Wenn Sie durch die Feinabstimmung von Amazon Bedrock bereits vielversprechende Ergebnisse erzielt haben, kann LoRa PEFT in SageMaker KI dazu beitragen, die Modell-Hyperparameter weiter zu optimieren.

Zu den Amazon Nova-Parametern, die mit LoRa PEFT verfügbar sind, gehören:

  • Konfiguration ausführen

    • name: Ein aussagekräftiger Name für Ihren Trainingsjob. Dies hilft dabei, Ihren Job in der AWS Management Console zu identifizieren.

    • model_type: Die zu verwendende Nova-Modellvariante. Die verfügbaren Optionen sindamazon.nova-micro-v1:0:128k,amazon.nova-lite-v1:0:300k, oderamazon.nova-pro-v1:0:300k.

    • model_name_or_path: Der Pfad zum Basismodell, das Sie für Ihr Training verwenden möchten. Wählen Sie das Modell aus, das Sie verwenden möchten. Die verfügbaren Optionen sindnova-micro/prod, nova-lite/prodnova-pro/prod, oder der S3-Pfad für den Checkpoint nach dem Training ()s3://<escrow bucket>/<job id>/outputs/checkpoints.

    • replicas: Die Anzahl der Recheninstanzen, die für verteilte Schulungen verwendet werden sollen. Die verfügbaren Werte variieren je nach verwendetem Modell. Amazon Nova Micro unterstützt 2, 4 oder 8 Replikate. Amazon Nova Lite unterstützt 4, 8, 16 oder 32 Replikate. Amazon Nova Pro unterstützt 6, 12 oder 24 Replikate.

    • output_s3_path: Der S3-Speicherort, an dem das Manifest und die TensorBoard Protokolle gespeichert werden. Alle S3-Standorte innerhalb des angegebenen S3-Pfads müssen sich im selben Konto und in derselben Region befinden.

  • Konfiguration des Trainings

    • max_length: Die maximale Sequenzlänge in Tokens. Dies bestimmt die Größe des Kontextfensters für das Training. Der maximal unterstützte Wert beträgt 65.536 Token für LoRa PEFT.

      Längere Sequenzen verbessern die Trainingseffizienz auf Kosten eines erhöhten Speicherbedarfs. Wir empfehlen Ihnen, den max_length Parameter an Ihre Datenverteilung anzupassen.

  • Trainer-Einstellungen

    • max_epochs: Die Anzahl der vollständigen Durchläufe, die deinen Trainingsdatensatz durchlaufen haben. Sie können entweder max_steps oder festlegenmax_epochs, wir empfehlen jedoch nicht, beide festzulegen. Der Höchstwert ist 5.

      Im Allgemeinen benötigen größere Datensätze weniger Epochen, um zu konvergieren, während kleinere Datensätze mehr Epochen erfordern, um zu konvergieren. Wir empfehlen, dass Sie die Anzahl der Epochen an die Größe Ihrer Daten anpassen.

  • Modell-Einstellungen

    • hidden_dropout: Die Wahrscheinlichkeit, dass ausgeblendete Ausgaben verloren gehen. Erhöhen Sie diesen Wert um etwa 0,0-0,2, um eine Überanpassung bei kleineren Datensätzen zu vermeiden. Gültige Werte liegen zwischen 0 und 1 (einschließlich).

    • attention_dropout: Die Wahrscheinlichkeit, dass die Aufmerksamkeit nachlässt, wird gewichtet. Dieser Parameter kann bei der Generalisierung helfen. Gültige Werte liegen zwischen 0 und 1 (einschließlich).

    • ffn_dropout: Die Wahrscheinlichkeit, dass Feed-Forward-Netzwerkausgänge ausfallen. Gültige Werte liegen zwischen 0 und 1 (einschließlich).

  • Konfiguration des Optimierers

    • lr: Die Lernrate, die die Schrittgröße während der Optimierung steuert. Für eine gute Leistung empfehlen wir Werte zwischen 1e-6-1e-4. Gültige Werte liegen zwischen 0 und 1 (einschließlich).

    • name: Der Optimierer-Algorithmus. Derzeit wird nur distributed_fused_adam unterstützt.

    • weight_decay: Die Stärke der L2-Regularisierung. Höhere Werte (zwischen 0,01 und 0,1) erhöhen die Regularisierung.

    • warmup_steps: Die Anzahl der Schritte zur schrittweisen Erhöhung der Lernrate. Dies verbessert die Stabilität des Trainings. Gültige Werte liegen zwischen 1 und 20 (einschließlich).

    • min_lr: Die minimale Lernrate am Ende des Zerfalls. Gültige Werte liegen zwischen 0 und 1 (einschließlich), müssen jedoch unter der Lernrate liegen.

  • LoRa-Konfigurationsparameter

    • peft_scheme: Auf einstellen, lora um eine Anpassung auf niedriger Ebene zu ermöglichen.

    • alpha: Der Skalierungsfaktor für LoRa-Gewichte. Dieser Wert ist in der Regel auf denselben Wert wie adapter_dim gesetzt.

    • adaptor_dropout: Der Regularisierungsparameter für LoRa.

PEFT-Rezept

Das Folgende ist ein Rezept für LoRa PEFT.

## 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
Einschränkungen

PEFT hat die folgenden Einschränkungen:

  • Die zuvor bereitgestellte Trainingskonfiguration enthält die empfohlenen Werte für jeden Parameter.

  • Zwischenprüfpunkte werden nicht zur Auswertung gespeichert, und Sie können von einem Zwischenprüfpunkt aus nicht weitermachen. Nur der letzte Checkpoint wird gespeichert.

  • MLflow Die Protokollierung wird nicht unterstützt.

Fehlerbehebung

Verwenden Sie die folgenden Informationen, um eventuell auftretende Probleme zu lösen:

  • Der Eingabedatensatz für Training und Validierung sollte sich in kundeneigenen Buckets und nicht in S3-Buckets mit Treuhandkonto oder serviceverwaltetem Service befinden.

  • Wenn Sie in der den Fehler Region nicht gefunden erhalten, senden Sie den Job erneut AWS CLI, wobei die Region dem Befehl start-job vorangestellt wird. Beispiel: AWS_REGION=us-east-1 hyperpod start-job ...Job Parameters.

  • Folgen Sie den Anweisungen unter Hyperparameter auswählen, um die Hyperparameter anzupassen.