如何获取Vertex AI批量预测任务的Job ID及相关问题排查
解决Google Cloud批量预测任务Job ID/Name获取及JSON序列化问题
问题说明
- 直接用
json.dump()把batch_prediction_job对象写入JSON文件失败,因为这是Google Cloud SDK生成的类实例,不是原生Python可序列化的字典/列表类型 - 要访问GCS里的批量预测结果,必须先拿到Job Name或ID,但不知道怎么从
batch_predict()返回的对象里提取
解决方案
1. 提取Job Name和ID
model.batch_predict()返回的batch_prediction_job是一个BatchPredictionJob实例,直接访问它的属性就能拿到需要的信息:
- Job Name:直接取
batch_prediction_job.name,格式类似projects/xxx/locations/xxx/batchPredictionJobs/xxx - Job ID:两种方式获取
- 优先用
batch_prediction_job.job_id(大部分SDK版本都支持) - 如果上面的属性不存在,就从Job Name里分割最后一段:
job_id = job_name.split("/")[-1]
- 优先用
代码示例:
# 获取Job Name job_name = batch_prediction_job.name print(f"任务名称:{job_name}") # 获取Job ID try: job_id = batch_prediction_job.job_id except AttributeError: job_id = job_name.split("/")[-1] print(f"任务ID:{job_id}")
2. 将Job对象写入JSON文件
SDK实例不能直接序列化,先调用to_dict()方法把它转成Python字典,再写入JSON:
import json # 把Job对象转成字典 job_info = batch_prediction_job.to_dict() # 写入JSON文件 with open('batch_prediction_job.json', 'w') as f: json.dump(job_info, f, indent=2)
3. 访问GCS中的预测结果
拿到Job ID后,预测结果的存储路径是你指定的gcs_destination_prefix加上Job ID,比如你设置的是gs://demo/batch/,那结果路径就是gs://demo/batch/{job_id}/,里面的predictions_*.jsonl就是预测结果文件。可以用GCS SDK列出或下载这些文件:
from google.cloud import storage # 初始化GCS客户端 storage_client = storage.Client() # 桶名和前缀 bucket_name = "demo" result_prefix = f"batch/{job_id}/" # 遍历所有结果文件 for blob in storage_client.list_blobs(bucket_name, prefix=result_prefix): if blob.name.endswith(".jsonl"): print(f"找到结果文件:gs://{bucket_name}/{blob.name}") # 下载到本地 blob.download_to_filename(f"本地保存文件名.jsonl")
内容的提问来源于stack exchange,提问作者krissy
相关产品推荐
相关产品推荐

