LLM-Modelle für Übersetzungen mithilfe der überwachten Feinabstimmung optimieren

In diesem Dokument wird beschrieben, wie Sie ein LLM-Modell für die Übersetzung mithilfe der überwachten Feinabstimmung optimieren.

Hinweise

Bevor Sie beginnen, müssen Sie ein Dataset für die überwachte Feinabstimmung vorbereiten. Je nach Anwendungsfall gelten unterschiedliche Anforderungen.

Unterstützte Modelle

  • translation-llm-002 (In der Vorabversion, unterstützt nur die Textabstimmung)

Abstimmungsjob erstellen

Sie können einen überwachten Feinabstimmungsjob mit der REST API oder dem Vertex AI SDK für Python erstellen.

REST

Senden Sie zum Erstellen eines Modellabstimmungsjobs eine POST-Anfrage mit der Methode tuningJobs.create. Einige Parameter werden nicht von allen Modellen unterstützt. Achten Sie darauf, dass Sie nur die für das abzustimmende Modell relevanten Parameter einfügen.

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • PROJECT_ID: Ihre Projekt-ID.
  • TUNING_JOB_REGION: Die Region, in der der Abstimmungsjob ausgeführt wird. Dies ist auch die Standardregion, in der das abgestimmte Modell hochgeladen wird. Unterstützte Region: us-central1.
  • BASE_MODEL: Name des zu optimierenden Übersetzungsmodells. Unterstützte Werte: translation-llm-002.
  • TRAINING_DATASET_URI: Cloud Storage-URI Ihres Trainingsdatensatzes. Das Dataset muss als JSONL-Datei formatiert sein. Die besten Ergebnisse erzielen Sie, wenn Sie mindestens 100 bis 500 Beispiele angeben. Weitere Informationen finden Sie unter Überwachte Abstimmungs-Datasets .
  • VALIDATION_DATASET_URIOptional: Der Cloud Storage-URI der Validierungs-Dataset-Datei.
  • TUNED_MODEL_DISPLAYNAMEOptional: Ein Anzeigename für das abgestimmte Modell. Wenn er nicht festgelegt ist, wird ein zufälliger Name generiert.

HTTP-Methode und URL:

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

JSON-Text der Anfrage:

{
  "baseModel": "BASE_MODEL",
  "supervisedTuningSpec" : {
      "trainingDatasetUri": "TRAINING_DATASET_URI",
      "validationDatasetUri": "VALIDATION_DATASET_URI",
  },
  "tunedModelDisplayName": "TUNED_MODEL_DISPLAYNAME"
}

Wenn Sie die Anfrage senden möchten, wählen Sie eine der folgenden Optionen aus:

curl

Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json und führen Sie den folgenden Befehl aus:

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

Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json und führen Sie den folgenden Befehl aus:

$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

Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:

Beispiel: cURL-Befehls

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>

Liste der Abstimmungsjobs ansehen

Sie können eine Liste der Abstimmungsjobs in Ihrem aktuellen Projekt über die Google Cloud Console, das Vertex AI SDK für Python oder durch Senden einer GET-Anfrage mit der Methode tuningJobs aufrufen.

REST

Wenn Sie eine Liste der Modellabstimmungsjobs aufrufen möchten, senden Sie eine GET-Anfrage mit der Methode tuningJobs.list.

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • PROJECT_ID: Ihre Projekt-ID.
  • TUNING_JOB_REGION: Die Region, in der der Abstimmungsjob ausgeführt wird. Dies ist auch die Standardregion, in der das abgestimmte Modell hochgeladen wird.

HTTP-Methode und URL:

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

Senden Sie die Anfrage mithilfe einer der folgenden Optionen:

curl

Führen Sie folgenden Befehl aus:

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

Führen Sie diesen Befehl aus:

$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

Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:

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

Rufen Sie die Seite Vertex AI Studio auf, um Ihre Optimierungsjobs in der Google Cloud Console aufzurufen.

Zu Vertex AI Studio

Ihre Jobs zur Optimierung des Übersetzungs-LLM sind in der Tabelle im Abschnitt Optimierte Modelle für Übersetzungs-LLM aufgeführt.

Details eines Abstimmungsjobs abrufen

Sie können die Details eines Tuning-Jobs in Ihrem aktuellen Projekt mit der Google Cloud Console, dem Vertex AI SDK für Python oder durch Senden einer GET-Anfrage mit der Methode tuningJobs abrufen.

REST

Wenn Sie eine Liste der Modellabstimmungsjobs aufrufen möchten, senden Sie eine GET-Anfrage mit der Methode tuningJobs.get und geben Sie die TuningJob_ID an.

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • PROJECT_ID: Ihre Projekt-ID.
  • TUNING_JOB_REGION: Die Region, in der der Abstimmungsjob ausgeführt wird. Dies ist auch die Standardregion, in der das abgestimmte Modell hochgeladen wird.
  • TUNING_JOB_ID: die ID des Abstimmungsjobs.

HTTP-Methode und URL:

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

Senden Sie die Anfrage mithilfe einer der folgenden Optionen:

curl

Führen Sie folgenden Befehl aus:

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

Führen Sie diesen Befehl aus:

$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

Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:

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. Details zu einem optimierten Modell in der Google Cloud Console finden Sie auf der Seite Vertex AI Studio.

    Zu Vertex AI Studio

  2. Suchen Sie in der Tabelle Optimierte Modelle für Übersetzungs-LLM nach Ihrem Modell und klicken Sie auf Details.

    Die Details Ihres Modells werden angezeigt.

Abstimmungsjob abbrechen

Sie können einen Abstimmungsjob in Ihrem aktuellen Projekt über die Google Cloud Console, das Vertex AI SDK für Python oder durch Senden einer POST-Anfrage mit der Methode tuningJobs abbrechen.

REST

Wenn Sie eine Liste der Modellabstimmungsjobs aufrufen möchten, senden Sie eine GET-Anfrage mit der Methode tuningJobs.cancel und geben Sie die TuningJob_ID an.

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • PROJECT_ID: Ihre Projekt-ID.
  • TUNING_JOB_REGION: Die Region, in der der Abstimmungsjob ausgeführt wird. Dies ist auch die Standardregion, in der das abgestimmte Modell hochgeladen wird.
  • TUNING_JOB_ID: die ID des Abstimmungsjobs.

HTTP-Methode und URL:

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

Senden Sie die Anfrage mithilfe einer der folgenden Optionen:

curl

Führen Sie folgenden Befehl aus:

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

Führen Sie diesen Befehl aus:

$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

Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:

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. Wenn Sie einen Optimierungsjob in der Google Cloud Console abbrechen möchten, rufen Sie die Seite Vertex AI Studio auf.

    Zu Vertex AI Studio

  2. Klicken Sie in der Tabelle Für die Übersetzung optimierte Modelle auf Ausführung verwalten.

  3. Klicken Sie auf Abbrechen.

Optimiertes Modell mit einem Prompt testen

Sie können einen Abstimmungsjob in Ihrem aktuellen Projekt mit dem Vertex AI SDK for Python oder durch Senden einer POST-Anfrage mit der Methode tuningJobs testen.

Im folgenden Beispiel wird ein Modell mit der Frage „Warum ist der Himmel blau?“ aufgefordert.

REST

Wenn Sie ein abgestimmtes Modell mit einem Prompt testen möchten, senden Sie eine POST-Anfrage und geben Sie TUNED_ENDPOINT_ID an.

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • PROJECT_ID: Ihre Projekt-ID.
  • TUNING_JOB_REGION: Die Region, in der der Abstimmungsjob ausgeführt wird. Dies ist auch die Standardregion, in der das abgestimmte Modell hochgeladen wird.
  • ENDPOINT_ID ist die Endpunkt-ID des abgestimmten Modells von der GET API.

HTTP-Methode und URL:

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

JSON-Text der Anfrage:

{
    "contents": [
        {
            "role": "USER",
            "parts": {
                "text" : "English: Hello. Spanish:"
            }
        }
    ],
}

Wenn Sie die Anfrage senden möchten, wählen Sie eine der folgenden Optionen aus:

curl

Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json und führen Sie den folgenden Befehl aus:

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

Speichern Sie den Anfragetext in einer Datei mit dem Namen request.json und führen Sie den folgenden Befehl aus:

$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

Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:

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

Messwerte für Feinabstimmung und Validierung

Sie können einen Modellabstimmungsjob konfigurieren, um Messwerte zur Modellabstimmung und Modellbewertung zu erfassen und zu melden. Diese können dann in Vertex AI Studio visualisiert werden.

  1. Details zu einem optimierten Modell in der Google Cloud Console finden Sie auf der Seite Vertex AI Studio.

    Zu Vertex AI Studio

  2. Klicken Sie in der Tabelle Optimieren und zusammenfassen auf den Namen des optimierten Modells, für das Sie Messwerte aufrufen möchten.

    Die Optimierungsmesswerte werden auf dem Tab Überwachen angezeigt.

Messwerte für die Modellabstimmung

Der Modellabstimmungsjob erfasst automatisch die folgenden Abstimmungsmesswerte für translation-llm-002.

  • /train_total_loss: Verlust für das Abstimmungs-Dataset in einem Trainingsschritt.
  • /train_fraction_of_correct_next_step_preds: Die Tokengenauigkeit in einem Trainingsschritt. Eine einzelne Vorhersage besteht aus einer Abfolge von Tokens. Dieser Messwert misst die Genauigkeit der vorhergesagten Tokens im Vergleich zum Ground Truth im Abstimmungs-Dataset.
  • /train_num_predictions:: Anzahl der vorhergesagten Tokens in einem Trainingsschritt.

Modellvalidierungsmesswerte:

Sie können einen Modellabstimmungsjob konfigurieren, um die folgenden Validierungsmesswerte für translation-llm-002 zu erfassen.

  • /eval_total_loss: Verlust für das Validierungs-Dataset in einem Validierungsschritt.
  • /eval_fraction_of_correct_next_step_preds: Die Tokengenauigkeit in einem Validierungsschritt. Eine einzelne Vorhersage besteht aus einer Abfolge von Tokens. Dieser Messwert misst die Genauigkeit der vorhergesagten Tokens im Vergleich zum Ground Truth im Validierungs-Dataset.
  • /eval_num_predictions: Anzahl der vorhergesagten Tokens in einem Validierungsschritt.

Die Messwertvisualisierungen sind verfügbar, sobald der Abstimmungsjob gestartet wurde. Er wird während der Optimierung in Echtzeit aktualisiert. Wenn Sie beim Erstellen des Abstimmungsjobs kein Validierungs-Dataset angeben, sind nur die Visualisierungen für die Abstimmungsmesswerte verfügbar.

Nächste Schritte