Ottimizza i modelli Gemini mediante l'ottimizzazione supervisionata

Questo documento descrive come ottimizzare un modello Gemini mediante l'ottimizzazione supervisionata

Prima di iniziare

Crea un job di ottimizzazione

Puoi creare un job di ottimizzazione supervisionato utilizzando la console Google Cloud, l'API o l'SDK Vertex AI per Python. Per indicazioni sulle configurazioni di ottimizzazione del modello, consulta Configurazioni consigliate.

REST

Per creare un job di ottimizzazione del modello, invia una richiesta POST utilizzando il metodo tuningJobs.create. Tieni presente che alcuni parametri non sono supportati da tutti i modelli. Assicurati di includere solo i parametri applicabili per il modello che stai ottimizzando.

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • PROJECT_ID: il tuo ID progetto.
  • TUNING_JOB_REGION: la regione in cui viene eseguito il job di ottimizzazione. Questa è anche la regione predefinita in cui viene caricato il modello ottimizzato.
  • BASE_MODEL: nome del modello di base da ottimizzare. Valori supportati: gemini-1.0-pro-002.
  • TRAINING_DATASET_URI: URI Cloud Storage del set di dati di addestramento. Il set di dati deve essere formattato come file JSONL. Per ottenere risultati ottimali, fornisci almeno da 100 a 500 esempi. Per saperne di più, consulta Informazioni sui set di dati di ottimizzazione supervisionati .
  • VALIDATION_DATASET_URIFacoltativo: l'URI Cloud Storage del file del set di dati di convalida.
  • EPOCH_COUNT(Facoltativo) Il numero di epoche da addestrare. Lascialo non configurato per utilizzare il valore consigliato.
  • ADAPTER_SIZEFacoltativo: le dimensioni dell'alimentatore da utilizzare per il job di ottimizzazione.
  • LEARNING_RATE_MULTIPLIER: (facoltativo) un moltiplicatore da applicare al tasso di apprendimento consigliato. Lascialo non configurato per utilizzare il valore consigliato.
  • TUNED_MODEL_DISPLAYNAME(Facoltativo) Un nome visualizzato per il modello ottimizzato. Se non viene impostato, viene generato un nome casuale.

Metodo HTTP e URL:

POST https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs

Corpo JSON della richiesta:

{
  "baseModel": "BASE_MODEL",
  "supervisedTuningSpec" : {
      "training_dataset_uri": "TRAINING_DATASET_URI",
      "validation_dataset_uri": "VALIDATION_DATASET_URI",
      "hyper_parameters": {
          "epoch_count": EPOCH_COUNT,
          "adapter_size": ADAPTER_SIZE,
          "learning_rate_multiplier": LEARNING_RATE_MULTIPLIER
      },
  },
  "tunedModelDisplayName": "TUNED_MODEL_DISPLAYNAME,
}

Per inviare la richiesta, scegli una delle seguenti opzioni:

curl

Salva il corpo della richiesta in un file denominato request.json ed esegui questo comando:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs"

PowerShell

Salva il corpo della richiesta in un file denominato request.json ed esegui questo comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs" | Select-Object -Expand Content

Dovresti ricevere una risposta JSON simile alla seguente.

Comando curl di esempio

PROJECT_ID=myproject
LOCATION=us-central1

curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
"https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/tuningJobs" \
-d \
$'{
   "baseModel": "gemini-1.0-pro-002",
   "supervisedTuningSpec" : {
      "training_dataset_uri": "gs://cloud-samples-data/ai-platform/generative_ai/sft_train_data.jsonl",
      "validation_dataset_uri": "gs://cloud-samples-data/ai-platform/generative_ai/sft_validation_data.jsonl"
   },
   "tunedModelDisplayName": "tuned_gemini_pro"
}'

Python


import time

import vertexai
from vertexai.preview.tuning import sft

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"

vertexai.init(project=project_id, location="us-central1")

sft_tuning_job = sft.train(
    source_model="gemini-1.0-pro-002",
    train_dataset="gs://cloud-samples-data/ai-platform/generative_ai/sft_train_data.jsonl",
    # The following parameters are optional
    validation_dataset="gs://cloud-samples-data/ai-platform/generative_ai/sft_validation_data.jsonl",
    epochs=4,
    learning_rate_multiplier=1.0,
    tuned_model_display_name="tuned_gemini_pro",
)

# Polling for job completion
while not sft_tuning_job.has_ended:
    time.sleep(60)
    sft_tuning_job.refresh()

print(sft_tuning_job.tuned_model_name)
print(sft_tuning_job.tuned_model_endpoint_name)
print(sft_tuning_job.experiment)

Console

Per ottimizzare un modello di testo con l'ottimizzazione supervisionata utilizzando la console Google Cloud, segui questi passaggi:

  1. Nella sezione Vertex AI della console Google Cloud, vai alla pagina Vertex AI Studio.

    Vai a Vertex AI Studio

  2. Fai clic su Crea modello ottimizzato.

  3. In Metodo di ottimizzazione, seleziona il pulsante di opzione per Ottimizzazione supervisionata.

  4. In Dettagli modello, configura quanto segue:

    1. Nel campo Nome del modello ottimizzato, inserisci un nome per il nuovo modello ottimizzato, fino a 128 caratteri.
    2. Nel campo Modello di base, seleziona gemini-1.0-pro-002.
    3. Nel campo a discesa Regione, seleziona la regione in cui viene eseguito il job di ottimizzazione della pipeline e in cui viene eseguito il deployment del modello ottimizzato.
  5. (Facoltativo) Espandi la freccia menu a discesa Opzioni avanzate e configura quanto segue:

    1. Nel campo Numero di epoche, inserisci il numero di passaggi da eseguire per l'ottimizzazione del modello.
    2. Nel campo Dimensione adattatore, inserisci le dimensioni dell'adattatore da utilizzare per l'ottimizzazione del modello.
    3. Nel campo Moltiplicatore del tasso di apprendimento, inserisci la dimensione del passaggio a ogni iterazione. Il valore predefinito è 1.
  6. Fai clic su Continua.

    Si apre la pagina Set di dati di ottimizzazione.

  7. Per caricare il file di un set di dati, seleziona una delle seguenti opzioni:

    1. Se non hai ancora caricato un set di dati, seleziona il pulsante di opzione Carica il file in Cloud Storage.
    2. Nel campo Seleziona file JSONL, fai clic su Sfoglia e seleziona il file del set di dati.
    3. Nel campo Posizione del set di dati, fai clic su Sfoglia e seleziona il bucket Cloud Storage in cui archiviare il file del set di dati.
    4. Se il file del set di dati si trova già in un bucket Cloud Storage, seleziona il pulsante di opzione File esistente in Cloud Storage.
    5. Nel campo Percorso file di Cloud Storage, fai clic su Sfoglia e seleziona il bucket Cloud Storage in cui si trova il file del set di dati.
  8. (Facoltativo) Per visualizzare le metriche di convalida durante l'addestramento, fai clic sul pulsante di attivazione/disattivazione Abilita convalida del modello.

    1. Nel file Validation dataset (Set di dati di convalida), inserisci il percorso Cloud Storage del tuo set di dati di convalida.
  9. Fai clic su Avvia ottimizzazione.

    Il nuovo modello viene visualizzato nella sezione Modelli ottimizzati di Gemini Pro della pagina Ottimizza e distilla. Quando il modello ha terminato l'ottimizzazione, lo Stato indica Riuscito.

La tabella seguente mostra le configurazioni consigliate per ottimizzare un modello di base in base all'attività:

Attività N. di esempi nel set di dati N. di epoche
Classificazione 500+ 2-4
Riassunto 1000+ 2-4
QA estrattivo 500+ 2-4
Chat 1000+ 2-4

Per il numero di epoche, ti suggeriamo di provare più di un valore per ottenere le migliori prestazioni per un determinato set di dati. L'aumento del numero di epoche potrebbe fornire risultati migliori. Tuttavia, occorre fare attenzione all'overfitting, soprattutto se il set di dati è piccolo e, in caso affermativo, a ridurre il numero di epoche.

Per le attività di classificazione, la complessità dell'attività aumenta con il numero di classi. Per un numero elevato di classi, potrebbero essere necessari set di dati più grandi.

Visualizza un elenco di job di ottimizzazione

Puoi visualizzare un elenco di job di ottimizzazione nel progetto attuale utilizzando la console Google Cloud, l'SDK Vertex AI per Python oppure inviando una richiesta GET utilizzando il metodo tuningJobs.

REST

Per visualizzare un elenco di job di ottimizzazione dei modelli, invia una richiesta GET utilizzando il metodo tuningJobs.list.

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • PROJECT_ID: il tuo ID progetto.
  • TUNING_JOB_REGION: la regione in cui viene eseguito il job di ottimizzazione. Questa è anche la regione predefinita in cui viene caricato il modello ottimizzato.

Metodo HTTP e URL:

GET https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs

Per inviare la richiesta, scegli una delle seguenti opzioni:

curl

Esegui questo comando:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs"

PowerShell

Esegui questo comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs" | Select-Object -Expand Content

Dovresti ricevere una risposta JSON simile alla seguente.

Python

import vertexai
from vertexai.preview.tuning import sft

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"

vertexai.init(project=project_id, location="us-central1")

responses = sft.SupervisedTuningJob.list()

for response in responses:
    print(response)

Console

Per visualizzare i tuoi job di ottimizzazione nella console Google Cloud, vai alla pagina Vertex AI Studio.

Vai a Vertex AI Studio

I tuoi job di ottimizzazione di Gemini sono elencati nella tabella nella sezione Modelli ottimizzati di Gemini Pro.

Ottieni i dettagli di un job di ottimizzazione

Per ottenere i dettagli di un job di ottimizzazione nel progetto attuale, puoi usare la console Google Cloud, l'SDK Vertex AI per Python o inviare una richiesta GET utilizzando il metodo tuningJobs.

REST

Per visualizzare un elenco di job di ottimizzazione dei modelli, invia una richiesta GET utilizzando il metodo tuningJobs.get e specifica TuningJob_ID.

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • PROJECT_ID: il tuo ID progetto.
  • TUNING_JOB_REGION: la regione in cui viene eseguito il job di ottimizzazione. Questa è anche la regione predefinita in cui viene caricato il modello ottimizzato.
  • TUNING_JOB_ID: l'ID del job di ottimizzazione.

Metodo HTTP e URL:

GET https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs/TUNING_JOB_ID

Per inviare la richiesta, scegli una delle seguenti opzioni:

curl

Esegui questo comando:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs/TUNING_JOB_ID"

PowerShell

Esegui questo comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs/TUNING_JOB_ID" | Select-Object -Expand Content

Dovresti ricevere una risposta JSON simile alla seguente.

Python

import vertexai
from vertexai.preview.tuning import sft

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"
# location = "us-central1"
# tuning_job_id = "TUNING_JOB_ID"

vertexai.init(project=project_id, location="us-central1")

response = sft.SupervisedTuningJob(
    f"projects/{project_id}/locations/{location}/tuningJobs/{tuning_job_id}"
)

print(response)

Console

  1. Per visualizzare i dettagli di un modello ottimizzato nella console Google Cloud, vai alla pagina Vertex AI Studio.

    Vai a Vertex AI Studio

  2. Nella tabella Modelli ottimizzati di Gemini Pro, trova il tuo modello e fai clic su Dettagli.

    Vengono mostrati i dettagli del modello.

Annullare un job di ottimizzazione

Puoi annullare un job di ottimizzazione nel progetto attuale utilizzando la console Google Cloud, l'SDK Vertex AI per Python o inviando una richiesta POST utilizzando il metodo tuningJobs.

REST

Per visualizzare un elenco di job di ottimizzazione dei modelli, invia una richiesta GET utilizzando il metodo tuningJobs.cancel e specifica TuningJob_ID.

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • PROJECT_ID: il tuo ID progetto.
  • TUNING_JOB_REGION: la regione in cui viene eseguito il job di ottimizzazione. Questa è anche la regione predefinita in cui viene caricato il modello ottimizzato.
  • TUNING_JOB_ID: l'ID del job di ottimizzazione.

Metodo HTTP e URL:

POST https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs/TUNING_JOB_ID:cancel

Per inviare la richiesta, scegli una delle seguenti opzioni:

curl

Esegui questo comando:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d "" \
"https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs/TUNING_JOB_ID:cancel"

PowerShell

Esegui questo comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-Uri "https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs/TUNING_JOB_ID:cancel" | Select-Object -Expand Content

Dovresti ricevere una risposta JSON simile alla seguente.

Python

import vertexai
from vertexai.preview.tuning import sft

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"
# location = "us-central1"
# tuning_job_id = "TUNING_JOB_ID"

vertexai.init(project=project_id, location="us-central1")

job = sft.SupervisedTuningJob(
    f"projects/{project_id}/locations/{location}/tuningJobs/{tuning_job_id}"
)
job.cancel()

Console

  1. Per annullare un job di ottimizzazione nella console Google Cloud, vai alla pagina Vertex AI Studio.

    Vai a Vertex AI Studio

  2. Nella tabella Modelli ottimizzati di Gemini Pro, fai clic su Gestisci esecuzione.

  3. Fai clic su Annulla.

Testa il modello ottimizzato con un prompt

REST

Per testare un modello ottimizzato con un prompt, invia una richiesta POST e specifica TUNED_ENDPOINT_ID.

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • PROJECT_ID: il tuo ID progetto.
  • TUNING_JOB_REGION: la regione in cui viene eseguito il job di ottimizzazione. Questa è anche la regione predefinita in cui viene caricato il modello ottimizzato.
  • ENDPOINT_ID: l'ID endpoint del modello ottimizzato dall'API GET.
  • TEMPERATURE: La temperatura viene utilizzata per il campionamento durante la generazione della risposta, che si verifica quando vengono applicati topP e topK. La temperatura controlla il grado di casualità nella selezione dei token. Le temperature più basse sono ideali per prompt che richiedono una risposta meno aperta o creativa, mentre le temperature più alte possono portare a risultati più diversificati o creativi. Una temperatura pari a 0 significa che vengono sempre selezionati i token con la probabilità più alta. In questo caso, le risposte a una determinata richiesta sono per lo più deterministiche, ma è comunque possibile una piccola variazione.

    Se il modello restituisce una risposta troppo generica, troppo breve o fornisce una risposta di riserva, prova ad aumentare la temperatura.

  • TOP_P: Top-P cambia il modo in cui il modello seleziona i token per l'output. I token vengono selezionati dal più probabile (vedi top-K) al meno probabile finché la somma delle probabilità non corrisponde al valore di top-P. Ad esempio, se i token A, B e C hanno una probabilità di 0,3, 0,2 e 0,1 e il valore di top-P è 0.5, il modello selezionerà A o B come token successivo utilizzando la temperatura ed esclude C come candidato.

    Specifica un valore più basso per risposte meno casuali e un valore più alto per risposte più casuali.

  • TOP_K: Top-K cambia il modo in cui il modello seleziona i token per l'output. Un top-K di 1 indica che il token successivo selezionato è il più probabile tra tutti i token nel vocabolario del modello (chiamato anche decodifica greedy). Un top-K pari a 3 indica che il token successivo viene selezionato tra i tre token più probabili utilizzando la temperatura.

    Per ogni passaggio di selezione dei token, vengono campionati i token top-K con le probabilità più alte. Quindi i token vengono ulteriormente filtrati in base a top-P e il token finale viene selezionato utilizzando il campionamento con temperatura.

    Specifica un valore più basso per risposte meno casuali e un valore più alto per risposte più casuali.

  • MAX_OUTPUT_TOKENS: numero massimo di token che possono essere generati nella risposta. Un token equivale a circa quattro caratteri. 100 token corrispondono a circa 60-80 parole.

    Specifica un valore più basso per risposte più brevi e un valore più alto per risposte potenzialmente più lunghe.

Metodo HTTP e URL:

POST https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/endpoints/ENDPOINT_ID:generateContent

Corpo JSON della richiesta:

{
    "contents": [
        {
            "role": "USER",
            "parts": {
                "text" : "Why is sky blue?"
            }
        }
    ],
    "generation_config": {
        "temperature":TEMPERATURE,
        "top_p": TOP_P,
        "top_k": TOP_K,
        "max_output_tokens": MAX_OUTPUT_TOKENS
    }
}

Per inviare la richiesta, scegli una delle seguenti opzioni:

curl

Salva il corpo della richiesta in un file denominato request.json ed esegui questo comando:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/endpoints/ENDPOINT_ID:generateContent"

PowerShell

Salva il corpo della richiesta in un file denominato request.json ed esegui questo comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/endpoints/ENDPOINT_ID:generateContent" | Select-Object -Expand Content

Dovresti ricevere una risposta JSON simile alla seguente.

Python

from vertexai.preview.generative_models import GenerativeModel
from vertexai.preview import tuning
from vertexai.preview.tuning import sft

sft_tuning_job = sft.SupervisedTuningJob("projects/<PROJECT_ID>/locations/<TUNING_JOB_REGION>/tuningJobs/<TUNING_JOB_ID>")
tuned_model = GenerativeModel(sft_tuning_job.tuned_model_endpoint_name)
print(tuned_model.generate_content(content))

Console

  1. Per visualizzare i dettagli di un modello ottimizzato nella console Google Cloud, vai alla pagina Vertex AI Studio.

    Vai a Vertex AI Studio

  2. Nella tabella Modelli ottimizzati di Gemini Pro, seleziona Test.

    Si apre una pagina in cui puoi creare una conversazione con il tuo modello ottimizzato.

Metriche di ottimizzazione e convalida

Puoi configurare un job di ottimizzazione del modello per raccogliere e generare report sulle metriche di ottimizzazione e valutazione del modello, che possono poi essere visualizzate in Vertex AI Studio.

  1. Per visualizzare i dettagli di un modello ottimizzato nella console Google Cloud, vai alla pagina Vertex AI Studio.

    Vai a Vertex AI Studio

  2. Nella tabella Ottimizzazione e distillazione, fai clic sul nome del modello ottimizzato per il quale vuoi visualizzare le metriche.

    Le metriche di ottimizzazione vengono visualizzate nella scheda Monitor.

Metriche di ottimizzazione del modello

Il job di ottimizzazione del modello raccoglie automaticamente le seguenti metriche di ottimizzazione per gemini-1.0-pro-002.

  • /train_total_loss: perdita del set di dati di ottimizzazione in una fase di addestramento.
  • /train_fraction_of_correct_next_step_preds: l'accuratezza dei token in una fase di addestramento. Una singola previsione è composta da una sequenza di token. Questa metrica misura l'accuratezza dei token previsti rispetto ai dati empirici reali nel set di dati di ottimizzazione.
  • /train_num_predictions: Numero di token previsti in una fase di addestramento.

Metriche di convalida del modello:

Puoi configurare un job di ottimizzazione del modello per raccogliere le seguenti metriche di convalida per gemini-1.0-pro-002.

  • /eval_total_loss: perdita del set di dati di convalida in una fase di convalida.
  • /eval_fraction_of_correct_next_step_preds: l'accuratezza del token in una fase di convalida. Una singola previsione è composta da una sequenza di token. Questa metrica misura l'accuratezza dei token previsti rispetto ai dati empirici reali nel set di dati di convalida.
  • /eval_num_predictions: numero di token previsti in un passaggio di convalida.

Le visualizzazioni delle metriche sono disponibili al termine del job di ottimizzazione del modello. Se non specifichi un set di dati di convalida quando crei il job di ottimizzazione, sono disponibili solo le visualizzazioni per le metriche di ottimizzazione.

Passaggi successivi