谷歌云平台提交训练作业,如何从训练代码中读取 USER_ARGS?

Posted

技术标签:

【中文标题】谷歌云平台提交训练作业,如何从训练代码中读取 USER_ARGS?【英文标题】:Google Cloud Platform submit training job, how to read USER_ARGS from training code? 【发布时间】:2019-11-27 11:12:31 【问题描述】:

我正在使用

在谷歌云平台上提交培训作业
gcloud ai-platform jobs submit training $JOB_NAME
               --scale-tier basic
               --package-path $TRAINING_PACKAGE_PATH
               --module-name $MAIN_TRAINER_MODULE
               --job-dir $JOB_DIR
               --runtime-version $RUNTIME_VERSION
               --python-version $PYTHON_VERSION
               --region $REGION

我的训练代码看起来有点像在线教程cloudml-samples 中的代码。 从Packaging a Training Application 指南中,我看到您可以通过添加将参数传递给训练作业

-- \
--user_first_arg=first_arg_value \
--user_second_arg=second_arg_value

但是我可以在任何地方找到如何从培训代码中读取参数。有什么建议?谢谢

【问题讨论】:

您需要在训练计划中相应地定义标志。该服务会将用户参数作为标志传递给您的培训计划。 是的,但是如何?有没有我可以看的代码示例?在训练计划中读取标志的程序是什么? 【参考方案1】:

请看看这个新的repo。

你有task.py,它从gcloud命令读取参数

将输入传递给存在于this 文件中的model.py

【讨论】:

太棒了,所以就像从脚本中读取普通标志一样,我认为这行不通。 就我而言,它实际上无法读取 cmd args。不知道为什么会这样。【参考方案2】:

我知道我可能错误地使用了我的 dockerfile,但是为了接受用户参数,我的 gcloud 查询如下所示:

gcloud ai-platform jobs submit training $JOB_NAME  /
--region $REGION   /
--master-image-uri $IMAGE_URI   /
--  /
app.py --user_first_arg=first_arg_value

Dockerfile

...
WORKDIR /app
COPY . /app

ENTRYPOINT ["python"]
CMD ["app.py"]

app.py

def get_args():
  parser = argparse.ArgumentParser()
  parser.add_argument(
      '--user_first_arg',
      default=0)
  args = parser.parse_args()
  return args

def main():
  args = get_args()
  print(args.user_first_arg)
...

【讨论】:

以上是关于谷歌云平台提交训练作业,如何从训练代码中读取 USER_ARGS?的主要内容,如果未能解决你的问题,请参考以下文章

将谷歌云存储文件夹挂载到谷歌人工智能平台作业

自动化谷歌云 AutoML 管道?

使用我的电脑中的火车和评估文件在谷歌云中训练神经网络

如何从谷歌云存储中读取子目录/前缀中的文件?

如何使用多个工作人员加快批量导入谷歌云数据存储的速度?

如何在谷歌云数据流中停止流式传输管道