问题描述
我正在努力从 Google Cloud Platform 的 Vertex AI 训练自定义作业内部使用 Bigquery python 客户端执行查询。
我已经构建了一个包含此 python 代码的 Docker 镜像,然后我将它推送到容器注册表 (eu.gcr.io)
我正在使用此命令进行部署
gcloud beta ai custom-jobs create --region=europe-west1 --display-name="$job_name" \
--config=config_custom_container.yaml \
--worker-pool-spec=machine-type=n1-standard-4,replica-count=1,container-image-uri="$docker_img_path" \
--args="${model_type},${env},${Now}"
我什至尝试使用选项 --service-account 来指定具有 admin Bigquery 角色的服务帐户,但没有奏效。
根据这个链接 https://cloud.google.com/vertex-ai/docs/general/access-control?hl=th#granting_service_agents_access_to_other_resources
Google 管理的 AI Platform 自定义代码服务代理 (Vertex AI) 服务帐户已经有权访问 BigQuery,所以我不明白为什么我的工作失败并出现此错误
google.api_core.exceptions.Forbidden: 403 POST https://bigquery.googleapis.com/bigquery/v2/projects/*******/jobs?prettyPrint=false:
Access Denied: Project *******:
User does not have bigquery.jobs.create permission in project *******.
我已将 id 替换为 *******
编辑: 我已经尝试了几种配置,我最后的配置 YAML 文件只包含这个
baSEOutputDirectory:
outputUriPrefix:
与 --service-account 选项不同,使用字段 serviceAccount
似乎不会编辑实际配置
编辑 14-06-2021:快速修复
就像@Ricco.D 说的
尝试在您的 bigquery 代码中明确定义 project_id,如果您 还没有这样做。
bigquery.Client(project=[your-project])
解决了我的问题。我仍然不知道原因。
解决方法
要解决此问题,需要在 Bigquery 代码中明确指定项目 ID。
示例:
bigquery.Client(project=[your-project],credentials=credentials)