GCP Vertex AI训练的文本分类模型千级批量预测相关疑问
Vertex AI 文本批量预测常见疑问解答
是否必须为每条待预测文本单独生成TXT文件?
不需要,教程里的方案只是其中一种输入实现,仅适合待分类文本本身已经是独立存储的TXT文件的场景。针对批量短文本预测的需求,你可以直接将文本内容写入JSONL输入文件,无需额外生成单个小文件,Vertex AI 完全支持该输入格式,每一行的格式如下:{"content": "待预测的文本内容", "mimeType": "text/plain"}
数千个小文件上传是否会影响性能?
会产生明显的额外开销:
- 上传阶段:数千次独立的GCS文件写入请求会大幅拉长数据准备耗时,也会产生不必要的请求费用
- 预测阶段:批量预测任务需要逐个拉取小文件读取内容,IO开销远高于读取单个整合的JSONL文件
- 存储阶段:大量小文件会增加GCS的元数据存储开销,后续清理也更麻烦
所以非必要场景完全不推荐使用教程里的单文本存文件的方案。
Vertex AI 模型是否支持批量向量化推理?
支持。Vertex AI 的批量预测服务本身就是为大规模推理场景设计的,底层会自动将输入数据拆分到合适的批次喂给模型,充分利用模型的向量化推理能力提升效率,不需要用户自己实现批处理逻辑。如果是低延迟需求的场景,你也可以调用在线预测接口一次性传入多条样本,同样可以获得批量推理的性能收益。
优化后的批量输入代码示例(无需生成单文本小文件)
from google.cloud import storage from google.cloud import aiplatform # 待预测文本列表 instances = [ "我们徒步穿过树林,爬上山丘到达冰洞", "我的小猫太可爱了" ] input_file_name = "batch-prediction-input.jsonl" BUCKET_NAME = "你的存储桶名称" BUCKET_URI = f"gs://{BUCKET_NAME}" model_name = "你的模型资源ID" # 直接构造JSONL内容,注意转义文本中的双引号避免JSON格式错误 input_lines = [] for text in instances: escaped_text = text.replace('"', '\\"') input_lines.append(f'{{"content": "{escaped_text}", "mimeType": "text/plain"}}') input_str = "\n".join(input_lines) # 仅上传单个JSONL文件到GCS storage_client = storage.Client() bucket = storage_client.bucket(BUCKET_NAME) file_blob = bucket.blob(input_file_name) file_blob.upload_from_string(input_str) # 提交批量预测任务逻辑和原有逻辑完全一致 job_display_name = "e2e-text-classification-batch-prediction-job" model = aiplatform.Model(model_name=model_name) batch_prediction_job = model.batch_predict( job_display_name=job_display_name, gcs_source=f"{BUCKET_URI}/{input_file_name}", gcs_destination_prefix=f"{BUCKET_URI}/output", sync=True, )
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

