本文档介绍如何使用监督式微调来调优 Gemini 模型。
准备工作
在开始之前,您必须准备一个监督式微调数据集。不同用例有不同的要求。
支持的模型
gemini-1.5-pro-002
(正式版)gemini-1.5-flash-002
(正式版)gemini-1.0-pro-002
(处于预览版阶段,仅支持文本调优)
创建调优作业
您可以使用 Google Cloud 控制台、API 或 Python 版 Vertex AI SDK 创建监督式微调作业。
REST
如需创建模型调优作业,请使用 tuningJobs.create
方法发送 POST 请求。某些参数只受部分模型支持。确保仅包含您要调优的模型的适用参数。
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:您的项目 ID。
- TUNING_JOB_REGION:运行调优作业的区域。这也是上传调优后模型的默认区域。
- BASE_MODEL:要调整的基础模型的名称。支持的值:
gemini-1.5-pro-002
、gemini-1.5-flash-002
和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.5-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
控制台
如需使用 Google Cloud 控制台通过监督式微调功能来调整文本模型,请执行以下步骤:
在 Google Cloud 控制台的 Vertex AI 部分中,进入 Vertex AI Studio 页面。
点击创建经调整的模型。
在调优方法下,选择监督式调优单选按钮。
在模型详细信息下,配置以下内容:
- 在已调优模型的名称字段中,输入新的调优后模型的名称,最多 128 个字符。
- 在基本模型字段中,选择
gemini-1.5-pro-002
。 - 在区域下拉字段中,选择运行流水线调优作业以及部署调优后模型的区域。
可选:展开高级选项下拉箭头,然后配置以下内容:
- 在周期数字段中,输入要为模型调优运行的步数。
- 在适配器大小字段中,输入要用于模型调优的适配器大小。
- 在学习速率调节系数字段中,输入每个迭代的步长。默认值为 1。
点击继续。
调优数据集页面随即会打开。
如需上传数据集文件,请选择以下选项之一:
- 如果您尚未上传数据集,请选中将文件上传到 Cloud Storage 单选按钮。
- 在选择 JSONL 文件字段中,点击浏览,然后选择数据集文件。
- 在数据集位置字段中,点击浏览并选择要存储数据集文件的 Cloud Storage 存储桶。
- 如果您的数据集文件已在 Cloud Storage 存储桶中,请选择 Cloud Storage 上的现有文件单选按钮。
- 在 Cloud Storage 文件路径字段中,点击浏览,然后选择数据集文件所在的 Cloud Storage 存储桶。
(可选)要在训练期间获取验证指标,请点击启用模型验证 切换开关。
- 在验证数据集文件中,输入验证数据集的 Cloud Storage 路径。
点击开始调优。
您的新模型会显示在“调优和提炼”页面上的 Gemini Pro 调优模型部分下。模型调优完成后,状态会显示成功。
调整超参数
建议您提交第一个调节作业,而无需更改超参数。默认值是根据我们的基准测试结果推荐的值,可实现最佳模型输出质量。
- 周期数:在训练期间,模型完整通过整个训练数据集的次数。
- 适配器大小:用于调优作业的适配器大小。适配器大小会影响调优作业的可训练参数数量。适配器越大,意味着模型可以学习更复杂的任务,但需要更大的训练数据集和更长的训练时间。
- 学习速率调节系数:输入要应用于建议的学习速率的调节系数。您可以增加该值以更快收敛,也可以减小该值以避免过度拟合。
查看调优作业列表
您可以使用 Google Cloud 控制台、Vertex AI SDK for Python 或使用 tuningJobs
方法发送 GET 请求来查看当前项目中的调优作业列表。
REST
如需查看模型调优作业列表,请使用 tuningJobs.list
方法发送 GET 请求。
在使用任何请求数据之前,请先进行以下替换:
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
控制台
如需在 Google Cloud 控制台中查看调优作业,请进入 Vertex AI Studio 页面。
Gemini 调优作业列在 Gemini Pro 调优模型部分下的表格中。
获取调优作业的详细信息
如需获取当前项目中调优作业的详细信息,您可以使用 Google Cloud 控制台、Vertex AI SDK for Python 或使用 tuningJobs
方法发送 GET 请求。
REST
如需查看模型调优作业列表,请使用 tuningJobs.get
方法发送 GET 请求并指定 TuningJob_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
控制台
如需在 Google Cloud 控制台中查看调优后模型的详细信息,请进入 Vertex AI Studio 页面。
在 Gemini Pro 调优模型表中,找到您的模型,然后点击详细信息。
系统会显示模型的详细信息。
取消调优作业
您可以使用 Google Cloud 控制台、Vertex AI SDK for Python 或使用 tuningJobs
方法发送 POST 请求来取消当前项目中的调优作业。
REST
如需查看模型调优作业列表,请使用 tuningJobs.cancel
方法发送 GET 请求并指定 TuningJob_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
控制台
如需在 Google Cloud 控制台中取消调优作业,请进入 Vertex AI Studio 页面。
在 Gemini Pro 调优模型表格中,点击
管理运行作业。点击取消。
通过提示测试调优后的模型
您可以通过使用 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) 在生成回答期间用于采样,在应用
topP
和topK
时会生成回答。温度可以控制词元选择的随机性。 较低的温度有利于需要更少开放性或创造性回复的提示,而较高的温度可以带来更具多样性或创造性的结果。温度为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.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))
控制台
如需在 Google Cloud 控制台中查看调优后模型的详细信息,请进入 Vertex AI Studio 页面。
在 Gemini Pro 调优模型表中,选择测试。
此操作会打开一个页面,您可以在其中创建与调优后模型进行的对话。
调优和验证指标
您可以配置模型调优作业,以收集和报告模型调优和模型评估指标,然后在 Vertex AI Studio 中直观呈现这些指标。
如需在 Google Cloud 控制台中查看调优后模型的详细信息,请进入 Vertex AI Studio 页面。
在调优和提炼表格中,点击要查看指标的调优模型的名称。
调优指标会显示在监控标签页下。
模型调优指标
模型调优作业会自动为 gemini-1.5-pro-002
收集以下调优指标。
/train_total_loss
:一个训练步长中调整数据集的损失。/train_fraction_of_correct_next_step_preds
:一个训练步长中的词元准确率。单个预测由一系列词元组成。该指标衡量预测词元的准确率(与调优数据集中的标准答案相比)。/train_num_predictions:
:一个训练步长中的预测词元数。
模型验证指标:
您可以配置模型调优作业,以便为 gemini-1.5-pro-002
收集以下验证指标。
/eval_total_loss
:验证数据集在验证步骤中的损失。/eval_fraction_of_correct_next_step_preds
:一个验证步长中的词元准确率。单个预测由一系列词元组成。该指标衡量评估词元的准确率(与验证数据集中的标准答案相比)。/eval_num_predictions
:一个验证步长中的预测词元数。
调优作业开始运行后,系统会提供指标可视化图表。 随着调优的进行,它会实时更新。 如果您在创建调优作业时未指定验证数据集,则系统只提供调优指标的可视化内容。
后续步骤
- 如需了解如何在构建生成式 AI 知识库的解决方案中使用监督式微调,请参阅快速起步解决方案:生成式 AI 知识库。