如何将环境变量传递给 gcloud beta ai custom-jobs create with custom container (Vertex AI)
How to pass environment variables to gcloud beta ai custom-jobs create with custom container (Vertex AI)
我在 google 的 Vertex AI 中从事 运行 自定义培训工作。执行自定义作业的简单 gcloud
命令将使用类似于以下语法的内容(可以查看该命令的完整文档 here):
gcloud beta ai custom-jobs create --region=us-central1 \
--display-name=test \
--config=config.yaml
在 config.yaml
文件中,可以指定机器和加速器 (GPU) 类型等,在我的例子中,指向生活在 Google 工件中的自定义容器执行训练代码的注册表(在 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}
我们 运行 的代码需要一些运行时环境变量(需要安全)传递给容器。在containerSpec
的API documentation里面说可以设置环境变量如下:
# 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 自定义作业中安全地设置运行时环境变量吗?
有两个版本的 REST API - “v1” and “v1beta1”,其中“v1beta1”在 ContainerSpec
中没有 env
选项,但“v1”有.不带 beta
参数的 gcloud ai custom-jobs create
命令不会抛出错误,因为它使用版本“v1”进行 API 调用。
yaml文件中的环境变量可以通过以下方式传递给自定义容器:
这是我用来测试需求的示例自定义培训应用程序的 docker 文件。有关培训申请的更多信息,请参阅此codelab。
FROM gcr.io/deeplearning-platform-release/tf2-cpu.2-3
WORKDIR /root
WORKDIR /
# Copies the trainer code to the docker image.
COPY trainer /trainer
# Copies the bash script to the docker image.
COPY commands.sh /scripts/commands.sh
# Bash command to make the script file an executable
RUN ["chmod", "+x", "/scripts/commands.sh"]
# Command to execute the file
ENTRYPOINT ["/scripts/commands.sh"]
# Sets up the entry point to invoke the trainer.
# ENTRYPOINT "python" "-m" $SECRET_TWO ⇒ To use the environment variable
# directly in the docker ENTRYPOINT. In case you are not using a bash script,
# the trainer can be invoked directly from the docker ENTRYPOINT.
下面是docker容器中使用的commands.sh
文件,用于测试环境变量是否传递给容器。
#!/bin/bash
mkdir /root/.ssh
echo $SECRET_ONE
python -m $SECRET_TWO
例子config.yaml
文件
# config.yaml
workerPoolSpecs:
machineSpec:
machineType: n1-highmem-2
replicaCount: 1
containerSpec:
imageUri: gcr.io/infosys-kabilan/mpg:v1
env:
- name: SECRET_ONE
value: "Passing the environment variables"
- name: SECRET_TWO
value: "trainer.train"
下一步,我构建容器并将其推送到 Google 容器存储库。现在,gcloud ai custom-jobs create --region=us-central1 --display-name=test --config=config.yaml
可以 运行 创建自定义训练作业,commands.sh
文件的输出可以在作业日志中看到,如下所示。
我在 google 的 Vertex AI 中从事 运行 自定义培训工作。执行自定义作业的简单 gcloud
命令将使用类似于以下语法的内容(可以查看该命令的完整文档 here):
gcloud beta ai custom-jobs create --region=us-central1 \
--display-name=test \
--config=config.yaml
在 config.yaml
文件中,可以指定机器和加速器 (GPU) 类型等,在我的例子中,指向生活在 Google 工件中的自定义容器执行训练代码的注册表(在 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}
我们 运行 的代码需要一些运行时环境变量(需要安全)传递给容器。在containerSpec
的API documentation里面说可以设置环境变量如下:
# 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 自定义作业中安全地设置运行时环境变量吗?
有两个版本的 REST API - “v1” and “v1beta1”,其中“v1beta1”在 ContainerSpec
中没有 env
选项,但“v1”有.不带 beta
参数的 gcloud ai custom-jobs create
命令不会抛出错误,因为它使用版本“v1”进行 API 调用。
yaml文件中的环境变量可以通过以下方式传递给自定义容器:
这是我用来测试需求的示例自定义培训应用程序的 docker 文件。有关培训申请的更多信息,请参阅此codelab。
FROM gcr.io/deeplearning-platform-release/tf2-cpu.2-3
WORKDIR /root
WORKDIR /
# Copies the trainer code to the docker image.
COPY trainer /trainer
# Copies the bash script to the docker image.
COPY commands.sh /scripts/commands.sh
# Bash command to make the script file an executable
RUN ["chmod", "+x", "/scripts/commands.sh"]
# Command to execute the file
ENTRYPOINT ["/scripts/commands.sh"]
# Sets up the entry point to invoke the trainer.
# ENTRYPOINT "python" "-m" $SECRET_TWO ⇒ To use the environment variable
# directly in the docker ENTRYPOINT. In case you are not using a bash script,
# the trainer can be invoked directly from the docker ENTRYPOINT.
下面是docker容器中使用的commands.sh
文件,用于测试环境变量是否传递给容器。
#!/bin/bash
mkdir /root/.ssh
echo $SECRET_ONE
python -m $SECRET_TWO
例子config.yaml
文件
# config.yaml
workerPoolSpecs:
machineSpec:
machineType: n1-highmem-2
replicaCount: 1
containerSpec:
imageUri: gcr.io/infosys-kabilan/mpg:v1
env:
- name: SECRET_ONE
value: "Passing the environment variables"
- name: SECRET_TWO
value: "trainer.train"
下一步,我构建容器并将其推送到 Google 容器存储库。现在,gcloud ai custom-jobs create --region=us-central1 --display-name=test --config=config.yaml
可以 运行 创建自定义训练作业,commands.sh
文件的输出可以在作业日志中看到,如下所示。