大型语言模型(LLM)在按需生成内容方面表现出色,但如果不受控制,你可能会在一天结束时发现账单很高。在我的文章《使用上下文缓存控制大模型成本》里,我讨论了如何通过这种技术来限制成本。批量生成内容是另一种可以节省时间和成本的方法。
判断什么是批量生成呢?Gemini中的批量生成允许您批量发送多个生成AI请求,而不是逐一发送,并且可以异步接收响应,响应可以存储在云存储桶或BigQuery表里。这不仅简化了大规模数据集的处理流程,还节省了时间和金钱,因为批量请求并行处理,享有标准请求50%的折扣。
想象一下一个在线书店,里面拥有数千本书。与其一本本生成每本书的描述,这将非常耗时,Gemini 批量生成工具可以并行生成所有描述。这不仅降低了成本,还缩短了整体处理时间。
让我们来看看如何使用批处理功能。
创建云存储空间(Bucket)你可以使用 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(大型语言模型)回复的输出文件。这里有几个例子:
- 例如:文本输出文件 batch_request_text_output.jsonl
- 比如:多模态输出文件 batch_request_multimodal_output.jsonl
真棒!
结论部分批处理生成方式是更稳健地使用生成AI处理大型数据集的一种方式,这可以节省时间和金钱。以下是一些进一步阅读的资源供参考。
共同学习,写下你的评论
评论加载中...
作者其他优质文章