使用监督式微调来调优 Gemini 模型

本文档介绍如何使用监督式微调来调优 Gemini 模型。

准备工作

创建调优作业

您可以使用 Google Cloud 控制台、API 或 Python 版 Vertex AI SDK 创建监督式微调作业。如需查看模型调整配置的指导信息,请参阅推荐配置

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" : {
      "trainingDatasetUri": "TRAINING_DATASET_URI",
      "validationDatasetUri": "VALIDATION_DATASET_URI",
      "hyperParameters": {
          "epochCount": EPOCH_COUNT,
          "adapterSize": "ADAPTER_SIZE",
          "learningRateMultiplier": 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 响应。

示例 curl 命令

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 project_id and location
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,
    adapter_size=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)

控制台

如需使用 Google Cloud 控制台通过监督式微调功能来调整文本模型,请执行以下步骤:

  1. 在 Google Cloud 控制台的 Vertex AI 部分中,进入 Vertex AI Studio 页面。

    进入 Vertex AI Studio

  2. 点击创建经调整的模型

  3. 调优方法下,选择监督式调优单选按钮。

  4. 模型详细信息下,配置以下内容:

    1. 已调优模型的名称字段中,输入新的调优后模型的名称,最多 128 个字符。
    2. 基本模型字段中,选择 gemini-1.0-pro-002
    3. 区域下拉字段中,选择运行流水线调优作业以及部署调优后模型的区域。
  5. 可选:展开高级选项下拉箭头,然后配置以下内容:

    1. 周期数字段中,输入要为模型调优运行的步数。
    2. 适配器大小字段中,输入要用于模型调优的适配器大小。
    3. 学习速率调节系数字段中,输入每个迭代的步长。默认值为 1。
  6. 点击继续

    调优数据集页面随即会打开。

  7. 如需上传数据集文件,请选择以下选项之一:

    1. 如果您尚未上传数据集,请选中将文件上传到 Cloud Storage 单选按钮。
    2. 选择 JSONL 文件字段中,点击浏览,然后选择数据集文件。
    3. 数据集位置字段中,点击浏览并选择要存储数据集文件的 Cloud Storage 存储桶。
    4. 如果您的数据集文件已在 Cloud Storage 存储桶中,请选择 Cloud Storage 上的现有文件单选按钮。
    5. Cloud Storage 文件路径字段中,点击浏览,然后选择数据集文件所在的 Cloud Storage 存储桶。
  8. (可选)要在训练期间获取验证指标,请点击启用模型验证 切换开关。

    1. 验证数据集文件中,输入验证数据集的 Cloud Storage 路径。
  9. 点击开始调优

    您的新模型会显示在“调优和提炼”页面上的 Gemini Pro 调优模型部分下。模型调优完成后,状态会显示成功

下表显示了调优基础模型的建议配置,按任务列出:

任务 数据集中的示例数 周期数
分类 500+ 2-4
摘要 1000+ 2-4
抽样质量检查 500+ 2-4
聊天 1000+ 2-4

如需优化特定数据集的性能,请尝试使用更高的周期值。增加周期数可能会改进结果。不过,请谨防过拟合,尤其是在处理小型数据集时。如果发生过拟合,请考虑减少周期数。

对于分类任务,任务的复杂性会随着类别数量增加而提高。如果有大量类别,您可能需要较大的数据集。

查看调优作业列表

您可以使用 Google Cloud 控制台、Vertex AI SDK for Python 或使用 tuningJobs 方法发送 GET 请求来查看当前项目中的调优作业列表。

REST

如需查看模型调优作业列表,请使用 tuningJobs.list 方法发送 GET 请求。

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

  • 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 project_id and location
vertexai.init(project=PROJECT_ID, location="us-central1")

responses = sft.SupervisedTuningJob.list()

for response in responses:
    print(response)

控制台

如需在 Google Cloud 控制台中查看调优作业,请进入 Vertex AI Studio 页面。

进入 Vertex AI Studio

Gemini 调优作业列在 Gemini Pro 调优模型部分下的表格中。

获取调优作业的详细信息

如需获取当前项目中调优作业的详细信息,您可以使用 Google Cloud 控制台、Vertex AI SDK for Python 或使用 tuningJobs 方法发送 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 project_id and location
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)

控制台

  1. 如需在 Google Cloud 控制台中查看调优后模型的详细信息,请进入 Vertex AI Studio 页面。

    进入 Vertex AI Studio

  2. Gemini Pro 调优模型表中,找到您的模型,然后点击详细信息

    系统会显示模型的详细信息。

取消调优作业

您可以使用 Google Cloud 控制台、Vertex AI SDK for Python 或使用 tuningJobs 方法发送 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 project, location
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()

控制台

  1. 如需在 Google Cloud 控制台中取消调优作业,请进入 Vertex AI Studio 页面。

    进入 Vertex AI Studio

  2. Gemini Pro 调优模型表格中,点击 管理运行作业

  3. 点击取消

通过提示测试调优后的模型

您可以通过使用 Vertex AI SDK for Python 或使用 tuningJobs 方法发送 POST 请求,在当前项目中测试调优作业。

以下示例向模型提示“为什么天空是蓝色的?”这一问题。

REST

如需使用提示测试调优的模型,请发送 POST 请求并指定 TUNED_ENDPOINT_ID

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

  • PROJECT_ID:您的项目 ID
  • TUNING_JOB_REGION:运行调优作业的区域。这也是上传调优后模型的默认区域。
  • ENDPOINT_ID:来自 GET API 的调优模型端点 ID。
  • TEMPERATURE:温度 (temperature) 在生成回答期间用于采样,在应用 topPtopK 时会生成回答。温度可以控制词元选择的随机性。 较低的温度有利于需要更少开放性或创造性回复的提示,而较高的温度可以带来更具多样性或创造性的结果。温度为 0 表示始终选择概率最高的词元。在这种情况下,给定提示的回复大多是确定的,但可能仍然有少量变化。

    如果模型返回的回答过于笼统、过于简短,或者模型给出后备回答,请尝试提高温度。

  • TOP_P:Top-P 可更改模型选择输出词元的方式。系统会按照概率从最高(见 top-K)到最低的顺序选择词元,直到所选词元的概率总和等于 top-P 的值。例如,如果词元 A、B 和 C 的概率分别为 0.3、0.2 和 0.1,并且 top-P 值为 0.5,则模型将选择 A 或 B 作为下一个词元(通过温度确定),并会排除 C,将其作为候选词元。

    指定较低的值可获得随机程度较低的回答,指定较高的值可获得随机程度较高的回答。

  • TOP_K:Top-K 可更改模型选择输出词元的方式。如果 top-K 设为 1,表示所选词元是模型词汇表的所有词元中概率最高的词元(也称为贪心解码)。如果 top-K 设为 3,则表示系统将从 3 个概率最高的词元(通过温度确定)中选择下一个词元。

    在每个词元选择步骤中,系统都会对概率最高的 top-K 词元进行采样。然后,系统会根据 top-P 进一步过滤词元,并使用温度采样选择最终的词元。

    指定较低的值可获得随机程度较低的回答,指定较高的值可获得随机程度较高的回答。

  • MAX_OUTPUT_TOKENS:回答中可生成的词元数量上限。词元约为 4 个字符。100 个词元对应大约 60-80 个单词。

    指定较低的值可获得较短的回答,指定较高的值可获得可能较长的回答。

HTTP 方法和网址:

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

请求 JSON 正文:

{
    "contents": [
        {
            "role": "USER",
            "parts": {
                "text" : "Why is sky blue?"
            }
        }
    ],
    "generation_config": {
        "temperature":TEMPERATURE,
        "topP": TOP_P,
        "topK": TOP_K,
        "maxOutputTokens": MAX_OUTPUT_TOKENS
    }
}

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

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/endpoints/ENDPOINT_ID:generateContent"

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/endpoints/ENDPOINT_ID:generateContent" | Select-Object -Expand Content

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

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

控制台

  1. 如需在 Google Cloud 控制台中查看调优后模型的详细信息,请进入 Vertex AI Studio 页面。

    进入 Vertex AI Studio

  2. Gemini Pro 调优模型表中,选择测试

    此操作会打开一个页面,您可以在其中创建与调优后模型进行的对话。

调优和验证指标

您可以配置模型调优作业,以收集和报告模型调优和模型评估指标,然后在 Vertex AI Studio 中直观呈现这些指标。

  1. 如需在 Google Cloud 控制台中查看调优后模型的详细信息,请进入 Vertex AI Studio 页面。

    进入 Vertex AI Studio

  2. 调优和提炼表格中,点击要查看指标的调优模型的名称。

    调优指标会显示在监控标签页下。

模型调优指标

模型调优作业会自动为 gemini-1.0-pro-002 收集以下调优指标。

  • /train_total_loss:一个训练步长中调整数据集的损失。
  • /train_fraction_of_correct_next_step_preds:一个训练步长中的词元准确率。单个预测由一系列词元组成。该指标衡量预测词元的准确率(与调优数据集中的标准答案相比)。
  • /train_num_predictions::一个训练步长中的预测词元数。

模型验证指标:

您可以配置模型调优作业,以便为 gemini-1.0-pro-002 收集以下验证指标。

  • /eval_total_loss:验证数据集在验证步骤中的损失。
  • /eval_fraction_of_correct_next_step_preds:一个验证步长中的词元准确率。单个预测由一系列词元组成。该指标衡量评估词元的准确率(与验证数据集中的标准答案相比)。
  • /eval_num_predictions:一个验证步长中的预测词元数。

模型调优作业完成后将提供指标的可视化内容。 如果您在创建调优作业时未指定验证数据集,则系统只提供调优指标的可视化内容。

后续步骤