如何参数化Kubeflow Pipelines环境变量



我正在探索用于运行机器学习培训工作的Vertex AI Pipelines。kubeflow管道文档清楚如何参数化容器的命令/参数。

是否也可以将输入传递给环境变量或组件的图像名称?这个组件的swagger模式表明这是可以做到的,但这个例子失败了:

implementation:
container:
image: {concat: ["us.gcr.io/vcm-ml/emulator", {inputValue: tag}]
# command is a list of strings (command-line arguments). 
# The YAML language has two syntaxes for lists and you can use either of them. 
# Here we use the "flow syntax" - comma-separated strings inside square brackets.
command: [
python3, 
# Path of the program inside the container
/pipelines/component/src/program.py,
--input1-path,
{inputPath: input_1},
--param1, 
--output1-path, 
]
env:
NAME: {inputValue: env}
inputs:
- {name: tag, type: String}
- {name: env, type: String}
- {name: input_1, type: String, description: 'Data for input_1'}

支持将{inputValue}传递给container.envcontainer.tag。或者,是否可以使用V2 python DSL添加环境变量或更改图像名称。

很抱歉造成混淆。

不幸的是,JsonSchema在这里是错误的(即它与实现不同(。与image相同。

env实现使用静态映射。CCD_ 5也是静态的。

在Kubeflow Pipelines(v1(中,您可能能够在创建组件实例后将环境变量设置为动态值。但这可能在顶点管道中不起作用。

my_task = my_op(...)
my_task.container.add_env_variable(V1EnvVar(name='MSG', value=task1.outputs["out1"]))

如果这不起作用,你可以在KFP回购中创建一个关于env支持的GitHub问题。

对于图像,我们通常建议为不同的图像提供单独的组件文件。

一个解决方法是使用一个小包装脚本来设置变量:

inputs:
- {name: tag, type: String}
- {name: env, type: String}
- {name: input_1, type: String, description: 'Data for input_1'}
implementation:
container:
image: "us.gcr.io/vcm-ml/emulator"
command:
- sh
- -ec
- 'NAME="$0" "$@"' # Set NAME to the first arg and execute the rest
- {inputValue: env}
- python3
# Path of the program inside the container
- /pipelines/component/src/program.py
- --input1-path
- {inputPath: input_1}
- --param1 
- --output1-path

相关内容

  • 没有找到相关文章

最新更新