【问题标题】:How to get the id of the run from within a component?如何从组件中获取运行的 id?
【发布时间】:2019-11-24 14:51:01
【问题描述】:

我正在对 Kubeflow Pipelines 进行一些实验,我有兴趣检索运行 ID 以保存有关管道执行的一些元数据。有什么方法可以通过ContainerOp 之类的组件来实现吗?

【问题讨论】:

    标签: kubernetes kubeflow kubeflow-pipelines


    【解决方案1】:

    我尝试使用Python's DSL 执行此操作,但现在似乎不可能。

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

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

    【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 谢谢。这两者有何不同?
    • RUN_ID 用于整个管道运行,而 EXECUTION_ID 用于单个组件任务执行。不过,最好只使用随机数生成组件。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      create_run_from_pipeline_func 返回RunPipelineResult,并具有run_id attribute

      client = kfp.Client(host)
      result = client.create_run_from_pipeline_func(…) 
      result.run_id
      

      【讨论】:

        【解决方案5】:

        由于 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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-02-09
          • 2020-12-07
          • 2015-03-19
          • 1970-01-01
          • 2018-10-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多