调整 API

模型调优是调整 Gemini 以更准确地执行特定任务的关键过程。模型调优的工作原理是为模型提供训练数据集,其中包含一组特定下游任务的示例。

在以下应用场景中使用 Gemini 调优 API:

支持的模型:

您可以对以下 Gemini 模型使用监督式微调:

模型 版本
Gemini 1.0 Pro gemini-1.0-pro-002

示例语法

用于对模型调优的语法。

curl

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \

https://TUNING_JOB_REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/TUNING_JOB_REGION/tuningJobs \
-d '{
  "baseModel": "...",
  "supervisedTuningSpec" : {
    ...
      "hyper_parameters": {
        ...
      },
  },
  "tunedModelDisplayName": "",
}'

参数列表

如需了解实现详情,请参阅示例

请求正文

请求正文中包含具有以下参数的数据:

参数

source_model

可选:string

要调优的基础模型的名称。支持的值为:gemini-1.0-pro-002

tunedModelDisplayName

string

TunedModel 的显示名称。名称不得超过 128 个字符,可以包含任何 UTF-8 字符。

supervisedTuningSpec

参数

training_dataset

string

训练数据集的 Cloud Storage URI。数据集必须采用 JSONL 文件格式。为获得最佳效果,请提供至少 100 到 500 个样本。如需了解详情,请参阅监督式调优数据集简介

validation_dataset

可选:string

验证数据集的 Cloud Storage URI。您的数据集必须采用 JSONL 文件格式。一个数据集最多可以包含 256 个样本。如果您提供此文件,系统会在微调期间定期使用其中的数据生成验证指标。如需了解详情,请参阅监督式调优数据集简介

epoch_count

可选:int

在训练期间,模型完整通过整个训练数据集的次数。

learning_rate_multiplier

可选:float

用于调整默认学习速率的系数。

adapter_size

可选:AdapterSize

用于调优的适配器大小。

tuned_model_display_name

可选:string

TunedModel 的显示名称。名称不得超过 128 个字符,可以包含任何 UTF-8 字符。

AdapterSize

调优作业的适配器大小。

参数

ADAPTER_SIZE_UNSPECIFIED

未指定适配器大小。

ADAPTER_SIZE_ONE

适配器大小 1。

ADAPTER_SIZE_FOUR

适配器大小 4。

ADAPTER_SIZE_EIGHT

适配器大小 8。

ADAPTER_SIZE_SIXTEEN

适配器大小 16。

示例

创建监督式调优作业

您可以使用 Vertex AI SDK for Python 或通过发送 POST 请求来创建监督式文本模型调优作业。

基本用例

基本用例仅设置 baseModeltraining_dataset_uri 的值。所有其他参数均使用默认值。

REST

如需创建模型调优作业,请使用 tuningJobs.create 方法发送 POST 请求。请注意,某些参数只受部分模型支持。确保仅包含您要调优的模型的适用参数。

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:您的项目 ID
  • TUNING_JOB_REGION:运行调优作业的区域。这也是上传调优后模型的默认区域。
  • BASE_MODEL:要调整的基础模型的名称。支持的值:gemini-1.0-pro-002
  • TRAINING_DATASET_URI:训练数据集的 Cloud Storage URI。数据集必须采用 JSONL 文件格式。为获得最佳效果,请提供至少 100 到 500 个样本。如需了解详情,请参阅监督式调优数据集简介

HTTP 方法和网址:

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

请求 JSON 正文:

{
  "baseModel": "BASE_MODEL",
  "supervisedTuningSpec" : {
      "training_dataset_uri": "TRAINING_DATASET_URI"
  },
}

如需发送请求,请选择以下方式之一:

curl

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

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

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

$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

您应该收到类似以下内容的 JSON 响应。

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

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

高级用例

高级用例在基本用例的基础上进行了扩展,但还会设置可选 hyper_parameters(例如 epoch_countlearning_rate_multiplieradapter_size)的值。

REST

如需创建模型调优作业,请使用 tuningJobs.create 方法发送 POST 请求。请注意,某些参数只受部分模型支持。确保仅包含您要调优的模型的适用参数。

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:您的项目 ID
  • TUNING_JOB_REGION:运行调优作业的区域。这也是上传调优后模型的默认区域。
  • BASE_MODEL:要调整的基础模型的名称。支持的值:gemini-1.0-pro-002
  • TRAINING_DATASET_URI:训练数据集的 Cloud Storage URI。数据集必须采用 JSONL 文件格式。为获得最佳效果,请提供至少 100 到 500 个样本。如需了解详情,请参阅监督式调优数据集简介
  • VALIDATION_DATASET_URI可选:验证数据集文件的 Cloud Storage URI。
  • EPOCH_COUNT可选:训练的周期数。如果不设置,则使用建议的值。
  • ADAPTER_SIZE可选:用于调优作业的适配器大小
  • LEARNING_RATE_MULTIPLIER:可选:要应用于建议的学习速率的调节系数。如果不设置,则使用建议的值。
  • TUNED_MODEL_DISPLAYNAME可选:调优后模型的显示名称。如果未设置,则会生成随机名称。

HTTP 方法和网址:

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

请求 JSON 正文:

{
  "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,
}

如需发送请求,请选择以下方式之一:

curl

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

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

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

$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

您应该收到类似以下内容的 JSON 响应。

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)

列出调优作业

您可以使用 Vertex AI SDK for Python 或通过发送 GET 请求来查看当前项目中的调优作业列表。

REST

如需创建模型调优作业,请使用 tuningJobs.create 方法发送 POST 请求。请注意,某些参数只受部分模型支持。确保仅包含您要调优的模型的适用参数。

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:您的项目 ID
  • TUNING_JOB_REGION:运行调优作业的区域。这也是上传调优后模型的默认区域。

HTTP 方法和网址:

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

如需发送请求,请选择以下方式之一:

curl

执行以下命令:

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

执行以下命令:

$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

您应该收到类似以下内容的 JSON 响应。

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)

获取调优作业的详细信息

您可以使用 Vertex AI SDK for Python 或通过发送 GET 请求来获取调优作业的详细信息。

REST

如需查看模型调优作业列表,请使用 tuningJobs.get 方法发送 GET 请求并指定 TuningJob_ID

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:您的项目 ID
  • TUNING_JOB_REGION:运行调优作业的区域。这也是上传调优后模型的默认区域。
  • TUNING_JOB_ID:调优作业的 ID。

HTTP 方法和网址:

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

如需发送请求,请选择以下方式之一:

curl

执行以下命令:

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

执行以下命令:

$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

您应该收到类似以下内容的 JSON 响应。

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)

取消调优作业

您可以使用 Vertex AI SDK for Python 或通过发送 POST 请求来取消调优作业。

REST

如需查看模型调优作业列表,请使用 tuningJobs.cancel 方法发送 GET 请求并指定 TuningJob_ID

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:您的项目 ID
  • TUNING_JOB_REGION:运行调优作业的区域。这也是上传调优后模型的默认区域。
  • TUNING_JOB_ID:调优作业的 ID。

HTTP 方法和网址:

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

如需发送请求,请选择以下方式之一:

curl

执行以下命令:

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

执行以下命令:

$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

您应该收到类似以下内容的 JSON 响应。

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

后续步骤

如需查看详细文档,请参阅以下内容: