5

我正在对 Kubeflow Pipelines 进行一些实验,我有兴趣检索运行 ID 以保存有关管道执行的一些元数据。有什么办法可以从像这样的组件中做到这一点ContainerOp

4

5 回答 5

7

您可以使用kfp.dsl.EXECUTION_ID_PLACEHOLDERandkfp.dsl.RUN_ID_PLACEHOLDER作为组件的参数。在运行时,它们将被实际值替换。

于 2020-01-09T23:15:32.900 回答
4

我尝试使用Python 的 DSL来做到这一点,但现在似乎不可能。

我发现的唯一选择是使用他们在此示例代码中使用的方法。您基本上声明了一个包含{{workflow.uid}}. 它将在执行期间替换为实际值。

您也可以这样做以获取 pod 名称,它将是{{pod.name}}.

于 2019-07-15T21:55:53.573 回答
1

您的组件的容器应该有一个名为的环境变量HOSTNAME,该变量设置为其唯一的 pod 名称,您可以从中派生所有必要的元数据。

于 2020-06-26T22:04:16.577 回答
1

create_run_from_pipeline_func它返回RunPipelineResult,并且有run_id attribute

client = kfp.Client(host)
result = client.create_run_from_pipeline_func(…) 
result.run_id
于 2021-04-16T23:15:39.697 回答
1

由于 kubeflow 管道依赖于 argo,因此您可以使用 argo 变量来获得所需的内容。

例如,

@func_to_container_op
def dummy(run_id, run_name) -> str:
    return run_id, run_name

@dsl.pipeline(
    name='test_pipeline',
)
def test_pipeline():
  dummy('{{workflow.labels.pipeline/runid}}', '{{workflow.annotations.pipelines.kubeflow.org/run_name}}')

您会发现占位符将替换为正确的 run_id 和 run_name。

更多 argo 变量:https ://github.com/argoproj/argo-workflows/blob/master/docs/variables.md

要知道kubeflow流水线运行中的labels和annotation中记录了什么,只需从k8s获取相应的workflow即可。

kubectl get workflow/XXX -oyaml
于 2021-05-20T08:35:04.810 回答