批量获取响应是高效发送大量代码请求的方法,使用此方法时响应的延迟时间并不重要。与获取在线响应(一次只能有一个输入请求)不同,批量预测会在单个批量请求中发送大量代码生成模型请求。与针对 Vertex AI 中的表格数据的批量预测一样,您可以确定输出位置并添加输入,然后响应将异步填充到输出位置。
在提交批量请求并查看其结果后,您可以调优代码生成基础模型,以改善结果在特定任务中的表现。调优后,您可以提交经过调优的模型以进行批量生成。如需详细了解如何调优模型,请参阅调优语言基础模型。
支持批量预测的代码模型
code-bison
准备输入
批量请求的输入是可以存储在 BigQuery 表中或作为 JSON 行 (JSONL) 文件存储在 Cloud Storage 中的提示列表。每个请求最多可包含 30,000 项提示。
JSONL 示例
本部分展示了如何设置输入和输出 JSONL 文件格式的示例。
JSONL 输入示例
{"prefix":"Write a Python function that determines if a year is a leap year:"}
{"prefix":"Write a unit test for Python code that reverses a string:"}
JSONL 输出示例
{"instance":{"prefix":"Write..."},"predictions": [{"content":"def is_leap_year(year):...","safetyAttributes":{...}}],"status":""}
{"instance":{"prefix":"Write..."},"predictions": [{"content":"import unittest...", "safetyAttributes":{...}}],"status":""}
BigQuery 示例
本部分介绍如何设置 BigQuery 输入和输出的格式。
BigQuery 输入示例
此示例展示了一个单列 BigQuery 表。
前缀 |
---|
“编写 Python 函数以确定某一年是否为闰年” |
“为反转字符串的 Python 代码编写单元测试” |
BigQuery 输出示例
前缀 | 预测 | status |
---|---|---|
“编写 Python 函数以确定某一年是否为闰年” |
{ "predictions": [ { "safetyAttributes": { "scores": [], "blocked": false, "categories": [] }, "content": "```python\ndef is_leap_year(year):\n \"\"\"\n Determine if a year is a leap year.\n\n Args:\n year: The year to check.\n\n Returns:\n True if the year is a leap year, False otherwise.\n \"\"\"\n\n if year % 4 != 0:\n return False\n\n if year % 100 == 0 and year % 400 != 0:\n return False\n\n return True\n```", "citationMetadata": { "citations": [] }, "score": -1.5572503805160522 } ], } |
|
“为反转字符串的 Python 代码编写单元测试” |
{ "predictions": [ { "safetyAttributes": { "scores": [], "blocked": false, "categories": [] }, "score": -1.7523338794708252, "citationMetadata": { "citations": [] }, "content": "```python\nimport unittest\n\nclass TestReverseString(unittest.TestCase):\n\n def test_reverse_string(self):\n input_string = \"Hello World\"\n expected_output = \"dlroW olleH\"\n output = reverse_string(input_string)\n self.assertEqual(output, expected_output)\n\nif __name__ == '__main__':\n unittest.main()\n```" } ], } |
请求批量响应
您可以使用 Google Cloud 控制台或 Python 版 Vertex AI SDK 创建代码生成批量响应。提交的输入项越多,完成批量生成过程所需的时间就越长。
REST
如需使用 Vertex AI API 测试代码提示,请向发布者模型端点发送 POST 请求。
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:您的 Google Cloud 项目的名称。
- BP_JOB_NAME:作业名称。
- MODEL_PARAM:指定模型参数及其值的键值对列表。例如,您可以指定模型的
maxOutputTokens
和temperature
。如需了解详情,请参阅代码生成参数。 - INPUT_URI:输入源 URI。输入源是 BigQuery 表或 Cloud Storage 存储桶中的 JSONL 文件。
- OUTPUT_URI:输出目标 URI。
HTTP 方法和网址:
POST https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/batchPredictionJobs
请求 JSON 正文:
{ "name": "BP_JOB_NAME", "displayName": "BP_JOB_NAME", "model": "publishers/google/models/text-bison", "model_parameters": "MODEL_PARAM" "inputConfig": { "instancesFormat":"bigquery", "bigquerySource":{ "inputUri" : "INPUT_URI" } }, "outputConfig": { "predictionsFormat":"bigquery", "bigqueryDestination":{ "outputUri": "OUTPUT_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://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/batchPredictionJobs"
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://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/batchPredictionJobs" | Select-Object -Expand Content
您应该收到类似以下内容的 JSON 响应:
{ "name": "projects/{PROJECT_ID}/locations/us-central1/batchPredictionJobs/{BATCH_JOB_ID}", "displayName": "BP_sample_publisher_BQ_20230712_134650", "model": "projects/{PROJECT_ID}/locations/us-central1/models/text-bison", "inputConfig": { "instancesFormat": "bigquery", "bigquerySource": { "inputUri": "bq://sample.text_input" } }, "modelParameters": {}, "outputConfig": { "predictionsFormat": "bigquery", "bigqueryDestination": { "outputUri": "bq://sample.llm_dataset.embedding_out_BP_sample_publisher_BQ_20230712_134650" } }, "state": "JOB_STATE_PENDING", "createTime": "2023-07-12T20:46:52.148717Z", "updateTime": "2023-07-12T20:46:52.148717Z", "labels": { "owner": "sample_owner", "product": "llm" }, "modelVersionId": "1", "modelMonitoringStatus": {} }
响应包含批量作业的唯一标识符。您可以使用 BATCH_JOB_ID 轮询批量作业的状态,直到作业 state
为 JOB_STATE_SUCCEEDED
。 例如:
curl \ -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/batchPredictionJobs/BATCH_JOB_ID
Python
如需了解如何安装或更新 Vertex AI SDK for Python,请参阅安装 Vertex AI SDK for Python。 如需了解详情,请参阅 Python API 参考文档。
from vertexai.preview.language_models import CodeGenerationModel code_model = CodeGenerationModel.from_pretrained("code-bison") batch_prediction_job = code_model.batch_predict( dataset=["gs://BUCKET_NAME/test_table.jsonl"], destination_uri_prefix="gs://BUCKET_NAME/tmp/2023-05-25-vertex-LLM-Batch-Prediction/result3", # Optional: model_parameters={ "maxOutputTokens": "200", "temperature": "0.2", }, ) print(batch_prediction_job.display_name) print(batch_prediction_job.resource_name) print(batch_prediction_job.state)
检索批量输出
批量预测任务完成后,输出会存储在您在请求中指定的 Cloud Storage 存储桶或 BigQuery 表中。