【发布时间】:2021-11-17 00:01:41
【问题描述】:
我正在谷歌的 Vertex AI 中运行自定义训练作业。执行自定义作业的简单 gcloud 命令将使用类似于以下语法的内容(可以查看该命令的完整文档 here):
gcloud beta ai custom-jobs create --region=us-central1 \
--display-name=test \
--config=config.yaml
在config.yaml 文件中,可以指定机器和加速器 (GPU) 类型等,在我的例子中,指向一个位于 Google Artifact Registry 中的自定义容器,该容器执行训练代码(指定在containerSpec 的imageUri 部分)。示例配置文件可能如下所示:
# config.yaml
workerPoolSpecs:
machineSpec:
machineType: n1-highmem-2
acceleratorType: NVIDIA_TESLA_P100
acceleratorCount: 2
replicaCount: 1
containerSpec:
imageUri: {URI_FOR_CUSTOM_CONATINER}
args:
- {ARGS TO PASS TO CONTAINER ENTRYPOINT COMMAND}
我们正在运行的代码需要将一些运行时环境变量(需要安全)传递给容器。在API documentation 为containerSpec 中,它说可以设置环境变量如下:
# config.yaml
workerPoolSpecs:
machineSpec:
machineType: n1-highmem-2
acceleratorType: NVIDIA_TESLA_P100
acceleratorCount: 2
replicaCount: 1
containerSpec:
imageUri: {URI_FOR_CUSTOM_CONATINER}
args:
- {ARGS TO PASS TO CONTAINER ENTRYPOINT COMMAND}
env:
- name: SECRET_ONE
value: $SECRET_ONE
- name: SECRET_TWO
value: $SECRET_TWO
当我尝试将 env 标志添加到 containerSpec 时,我收到一条错误消息,指出它不是容器规范的一部分:
ERROR: (gcloud.beta.ai.custom-jobs.create) INVALID_ARGUMENT: Invalid JSON payload received. Unknown name "env" at 'custom_job.job_spec.worker_pool_specs[0].container_spec': Cannot find field.
- '@type': type.googleapis.com/google.rpc.BadRequest
fieldViolations:
- description: "Invalid JSON payload received. Unknown name \"env\" at 'custom_job.job_spec.worker_pool_specs[0].container_spec':\
\ Cannot find field."
field: custom_job.job_spec.worker_pool_specs[0].container_spec
知道如何使用自定义容器在 Vertex AI 自定义作业中安全地设置运行时环境变量吗?
【问题讨论】:
-
我认为这是ContainerSpec 文档或其实现中的错误。你的方法是正确的,你应该能够像你一样定义环境变量。我建议在 Google 的 Issue Tracker 上为 Cloud Machine Learning Engine 提交一个错误
-
谢谢,我会试一试
-
@KabilanMohanraj - 谢谢,我不知道 API 有非测试版。你是对的,“v1”规范不会引发错误!您是否知道是否可以从启动作业的机器中获取环境变量?我尝试在 yaml 中设置值,例如:${var},但它不起作用
标签: docker google-cloud-platform gcloud google-cloud-sdk google-cloud-vertex-ai