kubernetes 如何从组件中获取运行的id?

rbpvctlc  于 2023-03-12  发布在  Kubernetes
关注(0)|答案(6)|浏览(158)

我正在对Kubeflow Pipelines做一些实验,我对检索运行ID并将其与一些关于管道执行的元数据沿着保存很感兴趣。有没有什么方法可以从ContainerOp这样的组件中实现这一点?

rjee0c15

rjee0c151#

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

whlutmcx

whlutmcx2#

我试着用Python's DSL来做这件事,但现在似乎不可能。
我发现的唯一选择是使用他们在这个示例代码中使用的方法,基本上就是声明一个包含{{workflow.uid}}的字符串,在执行时它将被替换为实际值。
您也可以这样做以获取pod名称,它将是{{pod.name}}

4jb9z9bj

4jb9z9bj3#

由于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管道运行中的标签和注解中记录了什么,只需从k8s中获取相应的工作流。

kubectl get workflow/XXX -oyaml
tzcvj98z

tzcvj98z4#

create_run_from_pipeline_func,它返回RunPipelineResult,并具有run_id attribute

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

ccgok5k55#

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

jgwigjjp

jgwigjjp6#

对于V1:
看起来kfp.dsl.EXECUTION_ID_PLACEHOLDER(组件运行id)和kfp.dsl.RUN_ID_PLACEHOLDER(管道运行id)将完成您所要求的。

对于V2:
分别为kfp.v2.dsl.PIPELINE_JOB_ID_PLACEHOLDERkfp.v2.dsl.PIPELINE_TASK_ID_PLACEHOLDER
source

相关问题