使用管道参数为Kubeflow管道分配资源

时间:2020-10-19 12:31:00

标签: kubeflow kubeflow-pipelines

我希望能够创建一个Kubeflow管道,该管道允许用户设置运行所分配的资源。最终结果将是这样的:

Example of Kubeflow "Create Run" UI with ability to set resource allocation

可以定义管道参数;但是,管道参数的语法与Kubeflow用于预处理其YAML定义的验证正则表达式不匹配。


例如,使用屏幕快照中的值参数,我可以通过将分配给管道的YAML定义添加到管道来对分配给管道的资源进行硬编码:

resources:
    limits: {nvidia.com/gpu: 1}
    requests: {cpu: 16, memory: 32G}

但是,我要做的是使用管道的参数为每次运行定义这些分配。像这样:

resources:
    limits: {nvidia.com/gpu: '{{inputs.parameters.gpu_limit}}'}
    requests: {cpu: '{{inputs.parameters.cpu_request}}', memory: '{{inputs.parameters.memory_request}}'}

当我使用管道资源的第二种定义时,管道的创建失败,因为Kubeflow无法解析这些资源参数,因为输入参数语法'{{input.parameters.parameter}}'与正则表达式^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$不匹配。

{
    "error_message":"Error creating pipeline: Create pipeline failed: Failed to get parameters from the workflow: InvalidInputError: Failed to parse the parameter.: error unmarshaling JSON: while decoding JSON: quantities must match the regular expression '^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$'",
    "error_details":"Error creating pipeline: Create pipeline failed: Failed to get parameters from the workflow: InvalidInputError: Failed to parse the parameter.: error unmarshaling JSON: while decoding JSON: quantities must match the regular expression '^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$'"
}

是否有人找到解决此问题的方法,或者我是否正在试图强迫Kubeflow进行并非为之准备的工作?像我在第二个示例中那样定义和使用管道参数可用于管道定义的其他部分(例如,在Docker容器中运行的args或命令)。

1 个答案:

答案 0 :(得分:0)

这只能在当前版本的 kubeflow 管道中完成。这是一个限制,但您不能从管道本身更改资源。