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

Allocate resources for Kubeflow pipeline using pipeline params

我希望能够创建一个允许用户为 运行 设置分配资源的 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 容器中 运行 的参数或命令)。

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