Gemini 批量生成
LLM 非常适合按需生成内容,但如果不加以控制,你最终可能会收到一大笔账单。在我的“使用上下文缓存控制 LLM 成本”帖子中,我谈到了如何使用上下文缓存来限制成本。批量生成是另一种可用于以折扣价节省时间的技术。
1、什么是批量生成?
Gemini 中的批量生成允许你批量发送多个生成 AI 请求,而不是逐个发送,并在 Cloud Storage 存储桶或 BigQuery 表中异步获取响应。这不仅简化了大型数据集的处理,而且还节省了时间和金钱,因为批量请求是并行处理的,并且比标准请求便宜 50%。
考虑一家拥有数千本书的在线书店。Gemini 批量生成可以并行生成所有描述,而不是逐个生成每本书的描述,这会很耗时。这以折扣价减少了总体处理时间。
让我们看看如何使用批量生成。
2、创建 Cloud Storage 存储桶
你可以使用 Cloud Storage 或 BigQuery 来准备和保存批处理作业结果。在这里,我们将使用 Cloud Storage。
首先,让我们创建一个存储桶来保存批处理请求输入文件:
PROJECT_ID=your-project-id
INPUT_BUCKET_URI=gs://$PROJECT_ID-batch-processing-input
gsutil mb $INPUT_BUCKET_URI
你还需要一个存储桶来保存批处理请求结果:
PROJECT_ID=your-project-id
OUTPUT_BUCKET_URI=gs://$PROJECT_ID-batch-processing-output
gsutil mb $OUTPUT_BUCKET_URI
3、准备批处理生成输入文件
接下来,你需要在 jsonl 文件中准备批处理预测输入文件。
例如,查看 batch_request_text_input.jsonl
,其中包含用于生成不同蛋糕食谱的文本提示:
{
"request": {
"contents": [
{
"parts": {
"text": "Give me a recipe for banana bread."
},
"role": "user"
}
]
}
}{
"request": {
"contents": [
{
"parts": {
"text": "Give me a recipe for chocolate cake."
},
"role": "user"
}
]
}
}
...
{
"request": {
"contents": [
{
"parts": {
"text": "Give me a recipe for pound cake."
},
"role": "user"
}
]
}
}
你还可以使用带有文本、图像和视频的多模式提示来批量生成内容,如 batch_request_multimodal_input.jsonl 中所示:
{
"request": {
"contents": [
{
"role": "user",
"parts": [
{
"text": "List objects in this image."
},
{
"file_data": {
"file_uri": "gs://cloud-samples-data/generative-ai/image/office-desk.jpeg",
"mime_type": "image/jpeg"
}
}
]
}
]
}
}{
"request": {
"contents": [
{
"role": "user",
"parts": [
{
"text": "List objects in this image."
},
{
"file_data": {
"file_uri": "gs://cloud-samples-data/generative-ai/image/gardening-tools.jpeg",
"mime_type": "image/jpeg"
}
}
]
}
]
}
}{
"request": {
"contents": [
{
"role": "user",
"parts": [
{
"text": "What is the relation between the following video and image samples?"
},
{
"fileData": {
"fileUri": "gs://cloud-samples-data/generative-ai/video/animals.mp4",
"mimeType": "video/mp4"
}
},
{
"fileData": {
"fileUri": "gs://cloud-samples-data/generative-ai/image/cricket.jpeg",
"mimeType": "image/jpeg"
}
}
]
}
]
}
}
将两个文件上传到输入存储桶:
gsutil cp batch_request_text_input.jsonl $INPUT_BUCKET_URI
gsutil cp batch_request_multimodal_input.jsonl $INPUT_BUCKET_URI
4、运行批量生成
要运行批量生成作业,你需要提交一个包含输入文件和输出的 BatchPredictionJob
bucket:
vertexai.init(project=args.project_id, location="us-central1")
# Submit a batch prediction job with Gemini model
batch_prediction_job = BatchPredictionJob.submit(
source_model="gemini-1.5-flash-002",
input_dataset=args.input_dataset_uri,
output_uri_prefix=args.output_bucket_uri,
)
然后,你需要等待批量生成完成:
while not batch_prediction_job.has_ended:
print(f"Job state: {batch_prediction_job.state.name}")
time.sleep(10)
batch_prediction_job.refresh()
运行批量生成文本提示:
python main.py --project_id $PROJECT_ID \
--input_dataset_uri $INPUT_BUCKET_URI/batch_request_text_input.jsonl \
--output_bucket_uri $OUTPUT_BUCKET_URI
运行时,你可以在 Cloud Console 上查看其状态:
运行多模式提示的批量生成:
python main.py --project_id $PROJECT_ID \
--input_dataset_uri $INPUT_BUCKET_URI/batch_request_multimodal_input.jsonl \
--output_bucket_uri $OUTPUT_BUCKET_URI
最后,你将看到两个批处理作业都已完成:
你将在存储桶中看到带有提示和 LLM 响应的输出文件。以下是几个示例:
很好!
5、结束语
批量生成是一种更强大的利用 AI 生成大型数据集的方法,可以节省时间和金钱。
原文链接:Batch prediction in Gemini
汇智网翻译整理,转载请标明出处