Fine-tuning supervisionato (SFT) - Amazon SageMaker AI

Fine-tuning supervisionato (SFT)

Le sezioni seguenti descrivono il processo di fine-tuning supervisionato (SFT), sia SFT a dimensionalità completa che SFT efficiente in termini di parametri.

Ottimizzazione del fine-tuning supervisionato (SFT) a dimensionalità completa

Il fine-tuning supervisionato (SFT, Supervised Fine-Tuning) è il processo in base al quale viene fornita una raccolta di coppie prompt-risposta a un modello di fondazione per migliorare le prestazioni di un modello preaddestrato su un’attività specifica. Gli esempi etichettati sono formattati come coppie prompt-risposta e formulati come istruzioni. Questo processo di ottimizzazione modifica i pesi del modello.

È consigliabile utilizzare SFT in presenza di dati specifici del dominio che richiedono di fornire coppie prompt-risposta specifiche per risultati ottimali.

I set di dati di input per l’addestramento e la convalida devono risiedere in bucket di proprietà del cliente, non in bucket escrow o bucket S3 gestiti dal servizio.

Requisiti dei dati

Per SFT a dimensionalità completa e Low-Rank Adapter (LoRA), i dati devono seguire il formato operativo di Amazon Bedrock Converse. Per esempi e vincoli di questo formato, consulta Preparing data for fine-tuning Understanding models.

Per convalidare il formato del set di dati prima dell’invio, è consigliabile utilizzare lo script di convalida dal repository di esempi di Amazon Bedrock. Questo strumento di convalida aiuta a garantire che i file JSONL rispettino le specifiche di formato richieste e a identificare eventuali problemi potenziali prima di inviare il processo di fine-tuning.

I parametri di Amazon Nova disponibili per l’ottimizzazione con SFT sono i seguenti:

  • Configurazione run

    • name: un nome descrittivo per il job di addestramento. Consente di identificare il job nella Console di gestione AWS.

    • model_type: la variante del modello Amazon Nova da utilizzare. Le opzioni disponibili sono amazon.nova-micro-v1:0:128k, amazon.nova-lite-v1:0:300k oppure amazon.nova-pro-v1:0:300k.

    • model_name_or_path: il percorso del modello di base da utilizzare per l’addestramento. Seleziona il modello da utilizzare tra nova-micro/prod, nova-lite/prod, nova-pro/prod o il percorso S3 per il checkpoint post-addestramento (s3://<escrow bucket>/<job id>/outputs/checkpoints).

    • replicas: il numero di istanze di calcolo da utilizzare per l’addestramento distribuito. I valori disponibili variano in base al modello scelto. Amazon Nova Micro supporta 2, 4 oppure 8 repliche. Amazon Nova Lite supporta 4, 8, 16 oppure 32 repliche. Amazon Nova Pro supporta 6, 12 oppure 24 repliche.

    • data_s3_path: la posizione S3 del set di dati di addestramento, ovvero un file JSONL. Questo file deve trovarsi nello stesso Account AWS e nella stessa Regione del cluster. Tutte le posizioni S3 nel percorso S3 fornito devono trovarsi nello stesso account e nella stessa Regione.

    • validation_data_s3_path: (facoltativo) la posizione S3 del set di dati di convalida, ovvero un file JSONL. Questo file deve trovarsi nello stesso account e nella stessa Regione del cluster. Tutte le posizioni S3 nel percorso S3 fornito devono trovarsi nello stesso account e nella stessa Regione.

    • output_s3_path: la posizione S3 in cui sono archiviati il manifesto e i log TensorBoard. Tutte le posizioni S3 nel percorso S3 fornito devono trovarsi nello stesso account e nella stessa Regione.

  • Configurazione di addestramento

    • max_length: la lunghezza massima della sequenza in token. Determina la dimensione della finestra di contesto per l’addestramento. Il valore massimo supportato è di 65.536 token per SFT.

      Sequenze più lunghe migliorano l’efficienza di addestramento a scapito di maggiori requisiti di memoria. È consigliabile che il parametro max_length corrisponda alla distribuzione dei dati.

  • Impostazioni di addestramento

    • max_epochs: il numero di passaggi completi nel set di dati di addestramento. Il valore massimo è 5.

      In generale, set di dati di dimensioni maggiori richiedono meno epoch per la convergenza, mentre set di dati di dimensioni minori prevedono più epoch. È consigliabile regolare il numero di epoch in base alla dimensione dei dati.

  • Impostazioni del modello

    • hidden_dropout: la probabilità di eliminare output di stato nascosti. Aumenta questo valore di circa 0,0-0,2 per ridurre l’overfitting su set di dati più piccoli. I valori validi sono compresi tra 0 e 1, entrambi inclusi.

    • attention_dropout: la probabilità di eliminare pesi di attenzione. Questo parametro può agevolare la generalizzazione. I valori validi sono compresi tra 0 e 1, entrambi inclusi.

    • ffn_dropout: la probabilità di eliminare output di rete feed-forward. I valori validi sono compresi tra 0 e 1, entrambi inclusi.

  • Configurazione optimizer

    • lr: il tasso di apprendimento, che controlla la dimensione del passaggio durante l’ottimizzazione. I valori validi sono compresi tra 1e-6 e 1e-3, entrambi inclusi. Sono consigliabili valori compresi tra 1e-6 e 1e-4 per ottenere buone prestazioni.

    • name: l’algoritmo dell’ottimizzatore. Attualmente è supportato solo distributed_fused_adam.

    • weight_decay: la potenza di regolarizzazione L2. Valori maggiori (compresi tra 0,01 e 0,1) aumentano la regolarizzazione.

    • warmup_steps: il numero di passaggi per aumentare gradualmente il tasso di apprendimento. Migliora la stabilità dell’addestramento. I valori validi sono compresi tra 1 e 20, entrambi inclusi.

    • min_lr: il tasso minimo di apprendimento alla fine del decadimento. I valori validi sono compresi tra 0 e 1, entrambi inclusi, ma devono essere inferiori al tasso di apprendimento.

Avvio rapido con una ricetta per SFT a dimensionalità completa

Di seguito è riportata una ricetta per il processo SFT a dimensionalità completa che avvia rapidamente un processo SFT su un cluster HyperPod. Questa ricetta presuppone inoltre che la connessione al cluster HyperPod sia stata effettuata utilizzando le credenziali AWS corrette.

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
Esempio di ricetta per SFT a dimensionalità completa

Di seguito è riportato un esempio di ricetta per il processo SFT a dimensionalità completa con tutti i componenti configurati correttamente.

## 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
Limitazioni

Non è supportata la pubblicazione di metriche su Weights & Biases e MLflow.

I checkpoint intermedi non vengono salvati per la valutazione e non è possibile riprendere da un checkpoint intermedio. Viene salvato solo l’ultimo checkpoint.

Per regolare gli iperparametri, segui le istruzioni riportate in Selecting hyperparameters.

Fine-tuning efficiente in termini di parametri (PEFT)

Il fine-tuning efficiente in termini di parametri (PEFT, Parameter-Efficient Fine-Tuning) prevede il riaddestramento di un numero limitato di pesi aggiuntivi per adattare un modello di fondazione a nuovi domini o attività. In particolare, il processo PEFT Low-Rank Adapter (LoRA) esegue in modo efficiente il fine-tuning dei modelli di fondazione introducendo matrici di pesi addestrabili a bassa dimensionalità in livelli specifici del modello, riducendo il numero di parametri addestrabili e mantenendo la qualità del modello.

Un adattatore PEFT LoRA amplia il modello di fondazione incorporando livelli di adattatori leggeri che modificano i pesi del modello durante l’inferenza, mantenendo intatti i parametri del modello originale. Questo approccio è anche considerato una delle tecniche di fine-tuning più convenienti. Per ulteriori informazioni, consulta Fine-tune models with adapter inference components.

È consigliabile utilizzare il processo PEFT di tipo LoRA nei seguenti scenari:

  • Per iniziare con una procedura di addestramento rapida.

  • Le prestazioni del modello base sono già soddisfacenti. In questo caso, l’obiettivo di PEFT LoRA è quello di migliorare le sue capacità in molteplici attività correlate, come la sintesi testuale o la traduzione linguistica. Le proprietà di regolarizzazione di PEFT LoRA contribuiscono a prevenire l’overfitting e riducono il rischio che il modello “dimentichi” il dominio di origine. Ciò garantisce che il modello rimanga versatile e adattabile a varie applicazioni.

  • Per eseguire scenari di fine-tuning delle istruzioni con set di dati relativamente piccoli. PEFT LoRA offre prestazioni migliori con set di dati di dimensioni ridotte e specifici per attività rispetto a set di dati più ampi e più grandi.

  • In presenza di set di dati di grandi dimensioni ed etichettati che superano i limiti di personalizzazione di Amazon Bedrock. In questo caso, è possibile utilizzare PEFT LoRA su SageMaker AI per generare risultati migliori.

  • Con risultati promettenti già ottenuti grazie al fine-tuning di Amazon Bedrock, PEFT LoRA in SageMaker AI contribuisce a ottimizzare ulteriormente gli iperparametri del modello.

I parametri Amazon Nova disponibili per PEFT LoRA includono:

  • Configurazione run

    • name: un nome descrittivo per il job di addestramento. Consente di identificare il job nella Console di gestione AWS.

    • model_type: la variante del modello Nova da utilizzare. Le opzioni disponibili sono amazon.nova-micro-v1:0:128k, amazon.nova-lite-v1:0:300k oppure amazon.nova-pro-v1:0:300k.

    • model_name_or_path: il percorso del modello di base da utilizzare per l’addestramento. Seleziona il modello da utilizzare. Le opzioni disponibili sono nova-micro/prod, nova-lite/prod, nova-pro/prod o il percorso S3 per il checkpoint post-addestramento (s3://<escrow bucket>/<job id>/outputs/checkpoints).

    • replicas: il numero di istanze di calcolo da utilizzare per l’addestramento distribuito. I valori disponibili variano in base al modello utilizzato. Amazon Nova Micro supporta 2, 4 oppure 8 repliche. Amazon Nova Lite supporta 4, 8, 16 oppure 32 repliche. Amazon Nova Pro supporta 6, 12 oppure 24 repliche.

    • output_s3_path: la posizione S3 in cui sono archiviati il manifesto e i log TensorBoard. Tutte le posizioni S3 nel percorso S3 fornito devono trovarsi nello stesso account e nella stessa Regione.

  • Configurazione di addestramento

    • max_length: la lunghezza massima della sequenza in token. Determina la dimensione della finestra di contesto per l’addestramento. Il valore massimo supportato è di 65.536 token per PEFT LoRA.

      Sequenze più lunghe migliorano l’efficienza di addestramento a scapito di maggiori requisiti di memoria. È consigliabile che il parametro max_length corrisponda alla distribuzione dei dati.

  • Impostazioni di addestramento

    • max_epochs: il numero di passaggi completi nel set di dati di addestramento. È possibile impostare max_steps oppure max_epochs, ma non è consigliabile impostare entrambi i parametri. Il valore massimo è 5.

      In generale, set di dati di dimensioni maggiori richiedono meno epoch per la convergenza, mentre set di dati di dimensioni minori prevedono più epoch. È consigliabile regolare il numero di epoch in base alla dimensione dei dati.

  • Impostazioni del modello

    • hidden_dropout: la probabilità di eliminare output di stato nascosti. Aumenta questo valore di circa 0,0-0,2 per ridurre l’overfitting su set di dati più piccoli. I valori validi sono compresi tra 0 e 1, entrambi inclusi.

    • attention_dropout: la probabilità di eliminare pesi di attenzione. Questo parametro può agevolare la generalizzazione. I valori validi sono compresi tra 0 e 1, entrambi inclusi.

    • ffn_dropout: la probabilità di eliminare output di rete feed-forward. I valori validi sono compresi tra 0 e 1, entrambi inclusi.

  • Configurazione optimizer

    • lr: il tasso di apprendimento, che controlla la dimensione del passaggio durante l’ottimizzazione. Sono consigliabili valori compresi tra 1e-6 e 1e-4 per ottenere buone prestazioni. I valori validi sono compresi tra 0 e 1, entrambi inclusi.

    • name: l’algoritmo dell’ottimizzatore. Attualmente è supportato solo distributed_fused_adam.

    • weight_decay: la potenza di regolarizzazione L2. Valori maggiori (compresi tra 0,01 e 0,1) aumentano la regolarizzazione.

    • warmup_steps: il numero di passaggi per aumentare gradualmente il tasso di apprendimento. Migliora la stabilità dell’addestramento. I valori validi sono compresi tra 1 e 20, entrambi inclusi.

    • min_lr: il tasso minimo di apprendimento alla fine del decadimento. I valori validi sono compresi tra 0 e 1, entrambi inclusi, ma devono essere inferiori al tasso di apprendimento.

  • Parametri di configurazione LoRA

    • peft_scheme: impostato su lora per abilitare l’adattamento a bassa dimensionalità.

    • alpha: il fattore di dimensionamento per i pesi LoRA. In genere è impostato sullo stesso valore di adapter_dim.

    • adaptor_dropout: il parametro di regolarizzazione per LoRA.

Ricetta per PEFT

Di seguito è riportata una ricetta per PEFT 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
Limitazioni

PEFT presenta le seguenti limitazioni:

  • La configurazione di addestramento fornita in precedenza include i valori consigliati per ogni parametro.

  • I checkpoint intermedi non vengono salvati per la valutazione e non è possibile riprendere da un checkpoint intermedio. Viene salvato solo l’ultimo checkpoint.

  • La registrazione di log MLflow non è supportata.

Risoluzione dei problemi

Utilizza le informazioni seguenti per risolvere i problemi che possono verificarsi:

  • Il set di dati di input per l’addestramento e la convalida deve risiedere in bucket di proprietà del cliente, non in bucket escrow o bucket S3 gestiti dal servizio.

  • Se ricevi un errore di Regione non trovata nell’AWS CLI, invia nuovamente il job con la Regione anteposta al comando start-job. Ad esempio: AWS_REGION=us-east-1 hyperpod start-job ...Job Parameters.

  • Per regolare gli iperparametri, segui le istruzioni riportate in Selecting hyperparameters.