如何通过Google Cloud Function并行运行带不同自定义参数的同个训练任务
并行提交多产品训练任务方案
无需修改你现有的MYMODULE训练代码,有两种低成本的一键触发方案,所有任务提交后会自动并行运行:
方案1:Shell脚本实现(最简单,无需额外依赖)
- 核心逻辑:遍历所有产品ID,每个产品单独提交一个独立的训练任务,gcloud任务提交是异步操作,因此所有任务会自动并行调度。
- 新建
submit_train_jobs.sh脚本,内容如下:
#!/bin/bash # 配置需要训练的所有产品列表 PRODUCT_LIST=("product_1" "product_2" "product_3") # 公共参数统一配置,避免重复书写 STAGING_BUCKET="gs://MYBUCKET" PACKAGE_PATH="MYPATH" MODULE_NAME="MYMODULE" REGION="MYREGION" RUNTIME_VERSION="2.1" PYTHON_VERSION="3.7" SCALE_TIER="BASIC" MODEL_BUCKET="MYBUCKET" OUTPUT_ROOT_DIR="MYDIR" # 遍历提交每个产品的训练任务 for product in "${PRODUCT_LIST[@]}" do # 任务名加上产品标识和时间戳,避免重复 JOB_NAME="demo_training_${product}_$(date +"%Y%m%d_%H%M%S")" gcloud ai-platform jobs submit training ${JOB_NAME} \ --staging-bucket ${STAGING_BUCKET} \ --package-path ${PACKAGE_PATH} \ --module-name ${MODULE_NAME} \ --region ${REGION} \ --runtime-version=${RUNTIME_VERSION} \ --python-version=${PYTHON_VERSION} \ --scale-tier ${SCALE_TIER} \ -- \ --model-bucket ${MODEL_BUCKET} \ # 输出目录按产品拆分,避免结果互相覆盖 --output-dir ${OUTPUT_ROOT_DIR}/${product} \ --user_arg ${product} echo "已提交【${product}】的训练任务,任务ID:${JOB_NAME}" done
- 运行方式:
- 给脚本加执行权限:
chmod +x submit_train_jobs.sh - 执行脚本即可一键提交所有并行任务:
./submit_train_jobs.sh
- 给脚本加执行权限:
提示:如果不需要拆分输出目录,删除
--output-dir行的/${product}后缀即可。
方案2:Python脚本实现(适合和现有Python工作流集成)
- 核心逻辑:用Python异步子进程提交每个产品的训练任务,无需等待单个任务完成即可提交下一个,实现并行触发。
- 新建
submit_train_jobs.py脚本,内容如下:
import subprocess from datetime import datetime # 配置需要训练的产品列表 PRODUCT_LIST = ["product_1", "product_2", "product_3"] # 公共参数配置 COMMON_ARGS = [ "--staging-bucket", "gs://MYBUCKET", "--package-path", "MYPATH", "--module-name", "MYMODULE", "--region", "MYREGION", "--runtime-version=2.1", "--python-version=3.7", "--scale-tier", "BASIC", "--", "--model-bucket", "MYBUCKET" ] if __name__ == "__main__": for product in PRODUCT_LIST: time_suffix = datetime.now().strftime("%Y%m%d_%H%M%S") job_name = f"demo_training_{product}_{time_suffix}" # 拼接单个任务的提交命令 cmd = [ "gcloud", "ai-platform", "jobs", "submit", "training", job_name, *COMMON_ARGS, "--output-dir", f"MYDIR/{product}", "--user_arg", product ] # 异步提交任务,不阻塞后续任务提交 subprocess.Popen(cmd) print(f"已提交【{product}】的训练任务,任务ID:{job_name}")
- 运行方式:直接执行
python submit_train_jobs.py即可一键提交所有并行任务。
两种方案都可以直接复用你现有的训练代码,不需要修改train_and_evaluate的逻辑,每个任务运行时args.user_arg会自动读取到对应单个产品的参数值。
内容的提问来源于stack exchange,提问作者gregoriandate
相关产品推荐
相关产品推荐

