为了账号安全,请及时绑定邮箱和手机立即绑定

Gemini中的批量预测生成

大型语言模型(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(大型语言模型)回复的输出文件。这里有几个例子:

真棒!

结论部分

批处理生成方式是更稳健地使用生成AI处理大型数据集的一种方式,这可以节省时间和金钱。以下是一些进一步阅读的资源供参考。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消