Ottimizza i modelli LLM di traduzione mediante l'ottimizzazione fine supervisionata

Questo documento descrive come ottimizzare un modello LLM di traduzione utilizzando l'ottimizzazione fine supervisionata.

Prima di iniziare

Prima di iniziare, devi preparare un set di dati di ottimizzazione supervisionata. A seconda del caso d'uso, esistono requisiti diversi.

Modelli supportati

  • translation-llm-002 (in anteprima, supporta solo la regolazione del testo)

Crea un job di ottimizzazione

Puoi creare un job di ottimizzazione supervisionata utilizzando l'API REST o l'SDK Vertex AI per Python.

REST

Per creare un job di ottimizzazione del modello, invia una richiesta POST utilizzando il metodo tuningJobs.create. 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, apporta le seguenti sostituzioni:

  • PROJECT_ID: il tuo ID progetto.
  • TUNING_JOB_REGION: la regione in cui viene eseguito il job di ottimizzazione. Si tratta anche della regione predefinita in cui viene caricato il modello ottimizzato. Regione supportata: us-central1.
  • BASE_MODEL: nome del modello di traduzione da ottimizzare. Valori supportati: translation-llm-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 100-500 esempi. Per ulteriori informazioni, consulta Informazioni sul set di dati di ottimizzazione supervisionata .
  • VALIDATION_DATASET_URIFacoltativo: l'URI Cloud Storage del file del set di dati di convalida.
  • TUNED_MODEL_DISPLAYNAMEFacoltativo: un nome visualizzato per il modello ottimizzato. Se non è 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" : {
      "trainingDatasetUri": "TRAINING_DATASET_URI",
      "validationDatasetUri": "VALIDATION_DATASET_URI",
  },
  "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, quindi esegui il comando seguente:

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, quindi esegui il comando seguente:

$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": "translation-llm-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_translation_llm"
}'

Python

from vertexai.generative_models import GenerativeModel

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

import time

import vertexai
from vertexai.tuning import sft

# TODO(developer): Update and un-comment below line.
# PROJECT_ID = os.environ["GOOGLE_CLOUD_PROJECT"]
vertexai.init(project=PROJECT_ID, location="us-central1")

sft_tuning_job = sft.train(
  source_model="translation-llm-002",
    train_dataset="gs://cloud-samples-data/ai-platform/generative_ai/gemini-1_5/text/sft_train_data.jsonl",
    # The following parameters are optional
    validation_dataset="gs://cloud-samples-data/ai-platform/generative_ai/gemini-1_5/text/sft_validation_data.jsonl",
    tuned_model_display_name="tuned_translation_llm_002",
)

# 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)
# Example response:
# projects/123456789012/locations/us-central1/models/1234567890@1
# projects/123456789012/locations/us-central1/endpoints/123456789012345
# <google.cloud.aiplatform.metadata.experiment_resources.Experiment object at 0x7b5b4ae07af0>

Visualizzare un elenco di job di ottimizzazione

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

REST

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

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

  • PROJECT_ID: il tuo ID progetto.
  • TUNING_JOB_REGION: la regione in cui viene eseguito il job di ottimizzazione. Si tratta anche della 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.tuning import sft

# TODO(developer): Update and un-comment below line
# PROJECT_ID = "your-project-id"
vertexai.init(project=PROJECT_ID, location="us-central1")

responses = sft.SupervisedTuningJob.list()

for response in responses:
    print(response)
# Example response:
# <vertexai.tuning._supervised_tuning.SupervisedTuningJob object at 0x7c85287b2680>
# resource name: projects/12345678/locations/us-central1/tuningJobs/123456789012345

Console

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

Vai a Vertex AI Studio

I job di ottimizzazione dell'LLM di traduzione sono elencati nella tabella della sezione Modelli LLM di traduzione ottimizzati.

Ottenere i dettagli di un job di ottimizzazione

Puoi ottenere i dettagli di un job di ottimizzazione nel tuo progetto corrente utilizzando la console Google Cloud, l'SDK Vertex AI per Python o inviando una richiesta GET utilizzando il metodo tuningJobs.

REST

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

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

  • PROJECT_ID: il tuo ID progetto.
  • TUNING_JOB_REGION: la regione in cui viene eseguito il job di ottimizzazione. Si tratta anche della 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.tuning import sft

# TODO(developer): Update and un-comment below lines
# PROJECT_ID = "your-project-id"
# LOCATION = "us-central1"
vertexai.init(project=PROJECT_ID, location=LOCATION)

tuning_job_id = "4982013113894174720"
response = sft.SupervisedTuningJob(
    f"projects/{PROJECT_ID}/locations/{LOCATION}/tuningJobs/{tuning_job_id}"
)

print(response)
# Example response:
# <vertexai.tuning._supervised_tuning.SupervisedTuningJob object at 0x7cc4bb20baf0>
# resource name: projects/1234567890/locations/us-central1/tuningJobs/4982013113894174720

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 LLM ottimizzati per la traduzione, trova il tuo modello e fai clic su Dettagli.

    Vengono visualizzati i dettagli del modello.

Annullamento di un job di ottimizzazione

Puoi annullare un job di ottimizzazione nel progetto corrente 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 del modello, invia una richiesta GET utilizzando il metodo tuningJobs.cancel e specifica TuningJob_ID.

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

  • PROJECT_ID: il tuo ID progetto.
  • TUNING_JOB_REGION: la regione in cui viene eseguito il job di ottimizzazione. Si tratta anche della 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.tuning import sft

# TODO(developer): Update and un-comment below lines
# PROJECT_ID = "your-project-id"
# LOCATION = "us-central1"
vertexai.init(project=PROJECT_ID, location=LOCATION)

tuning_job_id = "4982013113894174720"
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 per la traduzione, fai clic su Gestisci esecuzione.

  3. Fai clic su Annulla.

Testa il modello ottimizzato con un prompt

Puoi testare un job di ottimizzazione nel tuo progetto corrente utilizzando l'SDK Vertex AI per Python o inviando una richiesta POST utilizzando il metodo tuningJobs.

L'esempio seguente mostra un modello con la domanda "Perché il cielo è blu?".

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, apporta le seguenti sostituzioni:

  • PROJECT_ID: il tuo ID progetto.
  • TUNING_JOB_REGION: la regione in cui viene eseguito il job di ottimizzazione. Si tratta anche della regione predefinita in cui viene caricato il modello ottimizzato.
  • ENDPOINT_ID: l'ID endpoint del modello ottimizzato dall'API GET.

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" : "English: Hello. Spanish:"
            }
        }
    ],
}

Per inviare la richiesta, scegli una delle seguenti opzioni:

curl

Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

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, quindi esegui il comando seguente:

$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.generative_models import GenerativeModel

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

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 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 Ottimizza e distilla, fai clic sul nome del modello ottimizzato per cui 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 translation-llm-002.

  • /train_total_loss: perdita per il set di dati di ottimizzazione in un passaggio di addestramento.
  • /train_fraction_of_correct_next_step_preds: l'accuratezza del token in un passaggio di addestramento. Una singola previsione è costituita 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 un passaggio di addestramento.

Metriche di convalida del modello:

Puoi configurare un job di ottimizzazione del modello per raccogliere le seguenti metriche di convalida per translation-llm-002.

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

Le visualizzazioni delle metriche sono disponibili dopo l'avvio dell'ottimizzazione. Verrà aggiornato in tempo reale man mano che la regolazione procede. 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