大型语言模型(LLM)在按需生成内容方面表现出色,但如果不受控制,你可能会在一天结束时发现账单很高。在我的文章《使用上下文缓存控制大模型成本》里,我讨论了如何通过这种技术来限制成本。批量生成内容是另一种可以节省时间和成本的方法。
Gemini中的批量生成允许您批量发送多个生成AI请求,而不是逐一发送,并且可以异步接收响应,响应可以存储在云存储桶或BigQuery表里。这不仅简化了大规模数据集的处理流程,还节省了时间和金钱,因为批量请求并行处理,享有标准请求50%的折扣。
想象一下一个在线书店,里面拥有数千本书。与其一本本生成每本书的描述,这将非常耗时,Gemini 批量生成工具可以并行生成所有描述。这不仅降低了成本,还缩短了整体处理时间。
让我们来看看如何使用批处理功能。
你可以使用 Cloud Storage 或 BigQuery 来准备并保存批处理任务的结果。在这里,我们将用到 Cloud Storage。
首先,让我们创建一个存储桶来存放批处理请求的输入文件。
PROJECT_ID=your-project-id INPUT_BUCKET_URI=gs://$PROJECT_ID-批处理输入桶 gsutil mb $INPUT_BUCKET_URI
你也需要一个桶来存储批量请求的结果哦。
PROJECT_ID=你的项目ID(project ID) OUTPUT_BUCKET_URI=gs://$PROJECT_ID-输出存储桶URI # 使用gsutil创建存储桶,如果目标读者不熟悉gsutil,可以添加解释说明 gsutil mb $OUTPUT_BUCKET_URI
接下来,你需要准备一些用于批预测的jsonl文件。
比如说,看看 batch_request_text_input.jsonl,文本提示信息来生成各种蛋糕的食谱:
{ "request": { "contents": [ { "parts": { "text": "给我一个香蕉面包的食谱。" }, "role": "user" } ] } } { "request": { "contents": [ { "parts": { "text": "给我一个做巧克力蛋糕的食谱。" }, "role": "user" } ] } } ... { "request": { "contents": [ { "parts": { "text": "给我一个做磅蛋糕的食谱。" }, "role": "user" } ] } }
你也可以使用包含文本、图片和视频的多模态提示信息来批量生成内容,如下所示:batch_request_multimodal_input.jsonl
{ "request": { "contents": [ { "role": "user", "parts": [ { "text": "列出此图像中的对象。" }, { "file_data": { "file_uri": "gs://cloud-samples-data/generative-ai/image/office-desk.jpeg", "mime_type": "image/jpeg" } } ] } ] } }{ "request": { "contents": [ { "role": "user", "parts": [ { "text": "列出此图像中的对象。" }, { "file_data": { "file_uri": "gs://cloud-samples-data/generative-ai/image/gardening-tools.jpeg", "mime_type": "image/jpeg" } } ] } ] } }{ "request": { "contents": [ { "role": "user", "parts": [ { "text": "这视频和图片有什么联系吗?" }, { "file_data": { "file_uri": "gs://cloud-samples-data/generative-ai/video/animals.mp4", "mime_type": "video/mp4" } }, { "file_data": { "file_uri": "gs://cloud-samples-data/generative-ai/image/cricket.jpeg", "mime_type": "image/jpeg" } } ] } ] } }
将两个文件,上传到输入文件夹:
将批量请求的文本输入文件复制到输入存储桶中 gsutil cp batch_request_text_input.jsonl $INPUT_BUCKET_URI 将批量请求的多模态输入文件复制到输入存储桶URI: $INPUT_BUCKET_URI gsutil cp batch_request_multimodal_input.jsonl $INPUT_BUCKET_URI
要运行批处理预测任务,您需要提交一个 BatchPredictionJob
,并指定输入文件和输出存储桶
vertexai.init(project=args.project_id, location="us-central1") # 初始化vertexai,设置项目和位置 # 使用Gemini模型提交批量预测任务 batch_prediction_job = BatchPredictionJob.submit() # 或 BatchPredictionJob的submit方法 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, )
然后,你需要等批处理完成。
在批次预测任务结束之前: 打印当前任务状态: {batch_prediction_job.state.name} 等待10秒 刷新任务状态
运行文本提示的批量生成。
python main.py --project_id $PROJECT_ID \ --input_dataset_uri $INPUT_BUCKET_URI/batch_request_text_input.jsonl \ --output_bucket_uri $OUTPUT_BUCKET_URI
在运行过程中,你可以在云控制台上看到其状态:
运行多模态提示的批量生成:
python main.py --project_id $PROJECT_ID # 项目ID --input_dataset_uri $INPUT_BUCKET_URI/batch_request_multimodal_input.jsonl # 输入数据集URI --output_bucket_uri $OUTPUT_BUCKET_URI # 输出桶URI \ # 表示命令可以跨多行书写 \ # 表示命令可以跨多行书写 \ # 表示命令可以跨多行书写
最后,你会发现两个批处理任务都已经完成,
你将在桶里看到包含提示和LLM(大型语言模型)回复的输出文件。这里有几个例子:
真棒!
批处理生成方式是更稳健地使用生成AI处理大型数据集的一种方式,这可以节省时间和金钱。以下是一些进一步阅读的资源供参考。
批量预测的Python脚本示例
_发布在https://atamel.dev _.