微调教程

本教程将帮助您开始使用 Python SDK 或 REST API(使用 curl)调优 Gemini API 服务。这些示例展示了如何调整 Gemini API 文本生成服务背后的文本模型。

在 ai.google.dev 上查看 试用 Colab 笔记本 在 GitHub 上查看笔记本

限制

在调整模型之前,您应了解以下限制:

微调数据集

针对 Gemini 1.5 Flash 微调数据集存在以下限制:

  • 每个示例的输入大小上限为 4 万个字符。
  • 每个示例的输出大小上限为 5,000 个字符。
  • 仅支持输入-输出对示例。不支持聊天式多轮对话。

已调参的模型

经过优化的模型具有以下限制:

  • 经过优化的 Gemini 1.5 Flash 模型的输入字符数上限为 4 万个字符。
  • 经过调优的模型不支持 JSON 模式。
  • 仅支持文本输入。

开始前须知:设置项目和 API 密钥

在调用 Gemini API 之前,您需要设置项目并配置 API 密钥。

列出已调参的模型

您可以使用 tunedModels.list 方法检查现有的优化模型。

import google.generativeai as genai

for model_info in genai.list_tuned_models():
    print(model_info.name)

创建已调参模型

如需创建经过调优的模型,您需要在 tunedModels.create 方法中将数据集传递给模型。

在此示例中,您将调整模型以生成序列中的下一个数字。例如,如果输入为 1,则模型应输出 2。如果输入为 one hundred,则输出应为 one hundred one

import google.generativeai as genai

import time

base_model = "models/gemini-1.5-flash-001-tuning"
training_data = [
    {"text_input": "1", "output": "2"},
    # ... more examples ...
    # ...
    {"text_input": "seven", "output": "eight"},
]
operation = genai.create_tuned_model(
    # You can use a tuned model here too. Set `source_model="tunedModels/..."`
    display_name="increment",
    source_model=base_model,
    epoch_count=20,
    batch_size=4,
    learning_rate=0.001,
    training_data=training_data,
)

for status in operation.wait_bar():
    time.sleep(10)

result = operation.result()
print(result)
# # You can plot the loss curve with:
# snapshots = pd.DataFrame(result.tuning_task.snapshots)
# sns.lineplot(data=snapshots, x='epoch', y='mean_loss')

model = genai.GenerativeModel(model_name=result.name)
result = model.generate_content("III")
print(result.text)  # IV

迭代次数、批处理大小和学习率的最佳值取决于您的数据集以及用例的其他约束条件。如需详细了解这些值,请参阅高级调优设置超参数

由于调整模型可能需要很长时间,因此此 API 不会等待调整完成。而是返回一个 google.api_core.operation.Operation 对象,以便您检查调优作业的状态,或等待其完成并检查结果。

已调参的模型会立即添加到已调参模型列表中,但在模型调优期间,其状态会设为“正在创建”。

查看调优进度

您可以使用 wait_bar() 方法检查调整操作的进度:

for status in operation.wait_bar():
    time.sleep(10)

您还可以使用 operation.metadata 检查调整步骤的总数,并使用 operation.update() 刷新操作的状态。

您可以随时使用 cancel() 方法取消调优作业。

operation.cancel()

试用模型

您可以使用 tunedModels.generateContent 方法并指定经过优化的模型的名称,以测试其性能。

import google.generativeai as genai

model = genai.GenerativeModel(model_name="tunedModels/my-increment-model")
result = model.generate_content("III")
print(result.text)  # "IV"

更新说明

您可以随时使用 genai.update_tuned_model 方法更新经过优化的模型的说明。

genai.update_tuned_model('tunedModels/my-increment-model', {"description":"This is my model."})

删除模型

您可以删除不再需要的模型,以清理经过调优的模型列表。 使用 tunedModels.delete 方法删除模型。如果您取消了任何优化作业,则可能需要将其删除,因为其效果可能无法预测。

genai.delete_tuned_model("tunedModels/my-increment-model")