Überwachte Optimierung (SFT) - Amazon SageMaker AI

Überwachte Optimierung (SFT)

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

Überwachte Full-Rank-Optimierung (SFT)

Die überwachte Optimierung (SFT, Supervised Fine-Tuning) ist ein Prozess, bei dem eine Sammlung von Prompt-Antwort-Paaren für ein Basismodell bereitgestellt wird, um die Leistung eines vortrainierten Basismodells für eine bestimmte Aufgabe zu verbessern. Die gekennzeichneten Beispiele sind als Prompt-Antwort-Paare formatiert und als Anweisungen formuliert. Durch diesen Feinabstimmungsprozess werden die Gewichtungen des Modells geändert.

Sie sollten SFT verwenden, wenn Sie über domainspezifische Daten verfügen, die für optimale Ergebnisse die Bereitstellung bestimmter Prompt-Antwort-Paare erfordern.

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

Datenvoraussetzungen

Bei der Full-Rank-SFT und der Low-Rank Adapter (LoRA)-SFT sollten die Daten dem Operationsformat von Amazon Bedrock Converse entsprechen. Beispiele und Einschränkungen dieses Formats finden Sie unter Vorbereiten von Daten für die Optimierung von Modellen mit Verständnisfunktion.

Um Ihr Datensatzformat vor der Einreichung zu überprüfen, empfehlen wir, das Validierungsskript aus dem Beispielrepository von Amazon Bedrock 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 Optimierungsjob einreichen.

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

  • Ausführungskonfiguration

    • name: Ein aussagekräftiger Name für Ihren Trainingsjob. Dies hilft bei der Identifizierung Ihres Jobs in der AWS-Managementkonsole.

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

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

    • replicas: Die Anzahl der Datenverarbeitungs-Instances, die für das verteilte Training verwendet werden sollen. Die verfügbaren Werte variieren abhängig vom ausgewählten 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, der eine JSONL-Datei ist. Diese Datei muss sich im selben AWS-Konto und derselben AWS-Region wie der 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, der eine JSONL-Datei ist. Diese Datei muss sich im selben 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 Token. 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 Parameter max_length an Ihre Datenverteilung anzupassen.

  • Trainer-Einstellungen

    • max_epochs: die Anzahl abgeschlossener Durchläufe durch Ihren Trainingsdatensatz Der Höchstwert ist 5.

      Im Allgemeinen benötigen größere Datensätze weniger Epochen zum Konvergieren und kleinere Datensätze mehr Epochen. Wir empfehlen, dass Sie die Anzahl der Epochen an die Größe der Daten anpassen.

  • Modelleinstellungen

    • hidden_dropout: Die Wahrscheinlichkeit, dass versteckte Zustandsausgaben verloren gehen. Erhöhen Sie diesen Wert um etwa 0,0 bis 0,2, um eine Überanpassung bei kleineren Datensätzen zu vermeiden. Zulässig sind alle Werte zwischen 0 und 1, beide inklusive.

    • attention_dropout: Die Wahrscheinlichkeit, dass Aufmerksamkeitsgewichtungen verloren gehen. Dieser Parameter kann bei der Generalisierung helfen. Zulässig sind alle Werte zwischen 0 und 1, beide inklusive.

    • ffn_dropout: Die Wahrscheinlichkeit, dass Ausgaben eines Feed-Forward-Netzwerks verloren gehen. Zulässig sind alle Werte zwischen 0 und 1, beide inklusive.

  • Konfiguration des Optimierers

    • lr: Die Lernrate, die die Schrittgröße während der Optimierung steuert. Gültige Werte liegen zwischen 1e-6 und 1e-3, beide inklusive. Für eine gute Leistung empfehlen wir Werte zwischen 1e-6 und 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 Trainingsstabilität. Zulässig sind alle Werte zwischen 1 und 20, beide inklusive.

    • min_lr: Die minimale Lernrate am Ende des Rückgangs. Gültige Werte liegen zwischen 0 und 1 (beide inklusive), müssen jedoch unter der Lernrate liegen.

Schnellstart mit umfassendem SFT-Rezept

Im Folgenden finden Sie ein Rezept für Full-Rank-SFT, mit dem Sie schnell einen SFT-Job auf einem HyperPod-Cluster starten können. Bei diesem Rezept wird auch davon ausgegangen, dass Sie mit den richtigen AWS-Anmeldeinformationen eine Verbindung zu Ihrem HyperPod-Cluster hergestellt haben.

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 Full-Rank-Rezept

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

Die Veröffentlichung von Metriken in Weights & Biases und MLflow wird nicht unterstützt.

Zwischen-Checkpoints werden nicht zur Bewertung gespeichert und Sie können nicht von einem Zwischen-Checkpoint aus fortfahren. Nur der letzte Checkpoint wird gespeichert.

Folgen Sie den Anweisungen unter Auswählen von Hyperparametern, um die Hyperparameter anzupassen.

Parametereffiziente Optimierung (PEFT)

Bei der parametereffizienten Optimierung (PEFT) wird eine kleine Anzahl zusätzlicher Gewichtungen neu trainiert, um ein Basismodell an neue Aufgaben oder Domains 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 wird und gleichzeitig die Modellqualität erhalten bleibt.

Ein LoRA-PEFT-Adapter erweitert das Basismodell durch die Integration leichter Adapterschichten, die die Gewichtungen des Modells während der Inferenz modifizieren und gleichzeitig die ursprünglichen Modellparameter beibehalten. Dieser Ansatz wird auch als eine der kostengünstigsten Optimierungstechniken angesehen. Weitere Informationen finden Sie unter Optimieren 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, dessen 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 Quelldomain „vergisst“. Dadurch wird sichergestellt, dass das Modell vielseitig und an verschiedene Anwendungen anpassbar bleibt.

  • Sie möchten Szenarien zur Optimierung 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 AI verwenden, um bessere Ergebnisse zu erzielen.

  • Wenn Sie durch die Amazon-Bedrock-Optimierung bereits vielversprechende Ergebnisse erzielt haben, kann LoRA PEFT in SageMaker AI dabei helfen, die Hyperparameter des Modells weiter zu optimieren.

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

  • Ausführungskonfiguration

    • name: Ein aussagekräftiger Name für Ihren Trainingsjob. Dies hilft bei der Identifizierung Ihres Jobs in der AWS-Managementkonsole.

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

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

    • replicas: Die Anzahl der Datenverarbeitungs-Instances, die für das verteilte Training verwendet werden sollen. Die verfügbaren Werte variieren abhängig vom verwendeten 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 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 Token. 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 Parameter max_length an Ihre Datenverteilung anzupassen.

  • Trainer-Einstellungen

    • max_epochs: die Anzahl abgeschlossener Durchläufe durch Ihren Trainingsdatensatz Sie können entweder max_steps oder max_epochs festlegen, wir empfehlen jedoch nicht, beide Werte festzulegen. Der Höchstwert ist 5.

      Im Allgemeinen benötigen größere Datensätze weniger Epochen zum Konvergieren und kleinere Datensätze mehr Epochen. Wir empfehlen, dass Sie die Anzahl der Epochen an die Größe der Daten anpassen.

  • Modelleinstellungen

    • hidden_dropout: Die Wahrscheinlichkeit, dass versteckte Zustandsausgaben verloren gehen. Erhöhen Sie diesen Wert um etwa 0,0 bis 0,2, um eine Überanpassung bei kleineren Datensätzen zu vermeiden. Zulässig sind alle Werte zwischen 0 und 1, beide inklusive.

    • attention_dropout: Die Wahrscheinlichkeit, dass Aufmerksamkeitsgewichtungen verloren gehen. Dieser Parameter kann bei der Generalisierung helfen. Zulässig sind alle Werte zwischen 0 und 1, beide inklusive.

    • ffn_dropout: Die Wahrscheinlichkeit, dass Ausgaben eines Feed-Forward-Netzwerks verloren gehen. Zulässig sind alle Werte zwischen 0 und 1, beide inklusive.

  • 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 und 1e-4. Zulässig sind alle Werte zwischen 0 und 1, beide inklusive.

    • 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 Trainingsstabilität. Zulässig sind alle Werte zwischen 1 und 20, beide inklusive.

    • min_lr: Die minimale Lernrate am Ende des Rückgangs. Gültige Werte liegen zwischen 0 und 1 (beide inklusive), müssen jedoch unter der Lernrate liegen.

  • LoRA-Konfigurationsparameter

    • peft_scheme: Wird auf lora gesetzt, um eine Anpassung auf niedrigen Rängen zu ermöglichen.

    • alpha: Der Skalierungsfaktor für LoRA-Gewichtungen. 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

Für PEFT gelten folgende Einschränkungen:

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

  • Zwischen-Checkpoints werden nicht zur Bewertung gespeichert und Sie können nicht von einem Zwischen-Checkpoint aus fortfahren. Nur der letzte Checkpoint wird gespeichert.

  • Die MLflow-Protokollierung wird nicht unterstützt.

Fehlerbehebung

Verwenden Sie die folgenden Informationen, um Probleme zu lösen, die auftreten könnten:

  • Der Eingabedatensatz für Training und Validierung sollte sich in kundeneigenen Buckets befinden, nicht in Escrow- oder serviceverwalteten S3-Buckets.

  • Wenn Sie in der AWS CLI den Fehler „Region nicht gefunden“ erhalten, senden Sie den Job erneut, 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 Auswählen von Hyperparametern, um die Hyperparameter anzupassen.