You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过gcloud CLI向Vertex AI自定义训练任务传递列表参数

解决方案:Vertex AI自定义任务传递列表参数

在Vertex AI的gcloud ai custom-jobs create命令中,传递列表参数的核心是确保shell将整个列表字符串作为单个参数传递给训练脚本,避免逗号或特殊字符被shell拆分。以下是两种可行的解决方式:

方式1:调整命令的参数包裹方式

保持你现有trainer/task.py的解析逻辑不变,修改--args的写法,用单引号包裹整个--sample-columns参数项:

gcloud ai custom-jobs create \
    --region us-central1 \
    --display-name=[DISPLAY_NAME] \
    --project=[PROJECT] \
    --python-package-uris='[BUCKET_URI]/trainer-0.1.tar.gz' \
    --worker-pool-spec=machine-type=e2-standard-4,replica-count=1,executor-image-uri='us-docker.pkg.dev/vertex-ai/training/tf-cpu.2-11:latest',python-module=trainer.task \
    --args=--sample-int=100 \
    --args=--sample-string=12 \
    --args=--sample-bool=True \
    --args='--sample-columns=["column_01","column_02","column_03"]'

原理

bash中,单引号内的内容会被视为完整的字符串,不会被shell解析拆分,这样--sample-columns后面的列表字符串会完整传递到脚本中,ast.literal_eval可以正常解析双引号包裹的列表格式。如果偏好使用单引号的列表格式,也可以转义内部的单引号:

--args="--sample-columns=['column_01','column_02','column_03']"

方式2:修改argparse解析逻辑(更符合常规用法)

放弃ast.literal_eval的解析方式,直接用argparse的多值参数特性,修改trainer/task.py中的参数定义:

import argparse

def parse_arguments():
    def str2bool(v):
        if isinstance(v, bool):
            return v
        elif v.lower() in ('true', 't'):
            return True
        elif v.lower() in ('false', 'f'):
            return False
        raise argparse.ArgumentTypeError('Boolean value expected.')

    parser = argparse.ArgumentParser()
    parser.add_argument('--sample-int', type=int, default=5)
    parser.add_argument('--sample-string', type=str, required=False)
    parser.add_argument('--sample-bool', type=str2bool, required=False)
    # 用nargs='+'接受多个参数值,自动转为列表
    parser.add_argument('--sample-columns', type=str, nargs='+', default=['column_01', 'column_02'])
    args = parser.parse_args()
    return args

对应的命令写法可以选择两种形式:

  1. 多次传递--sample-columns:
gcloud ai custom-jobs create \
    # 其他参数不变
    --args=--sample-int=100 \
    --args=--sample-string=12 \
    --args=--sample-bool=True \
    --args=--sample-columns=column_01 \
    --args=--sample-columns=column_02 \
    --args=--sample-columns=column_03
  1. 单次传递所有列表项:
gcloud ai custom-jobs create \
    # 其他参数不变
    --args=--sample-int=100 \
    --args=--sample-string=12 \
    --args=--sample-bool=True \
    --args='--sample-columns column_01 column_02 column_03'

原理

argparse的nargs='+'会将同一参数后的所有值收集为列表,无需手动解析字符串,更符合Python命令行参数的常规写法,也避免了shell转义的问题。

内容的提问来源于stack exchange,提问作者Jiho Choi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 04:14:56