我希望能够创建一个 Kubeflow 管道,允许用户为运行设置分配的资源。最终结果将是这样的:
具有设置资源分配能力的 Kubeflow “创建运行” UI 示例。
可以定义管道参数;但是,管道参数的语法与 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 容器中运行的参数或命令)。