0

考虑具有三个 PythonScriptStep [step_1, step_a, step_b] 和边缘的 python azureml-sdk 管道:

step_a.run_after(step_1)  
step_b.run_after(step_1)

在 step_1 运行时“一个条件”是基于我们想要取消运行 step_b 但想要继续运行管道(即 step_b)检查的。请找到附加的图表。我尝试以两种方式实现它:

from azureml.core import Run
from azureml.pipeline.core.run import PipelineRun

1 删除图中的节点(此 API 是否仅在此管道运行的 Graph 对象实例上执行?)

if a_condition:
    run = Run.get_context()
    pipeline_run = PipelineRun(run.experiment, run.id)
    graph=pipeline_run.get_graph()
    for n in graph.nodes:
        if n.name =='step_1_name':
            graph.delete_node(n.node_id)

问题: delete_node(self, node_id) 中的 azureml/pipeline/core/graph.py
引发 NotImplementedError

2 但更有用的是在图片中的一些更高级别的 API 上使用它:

if a_condition:  
     run = Run.get_context()  
    pipeline_run = PipelineRun(run.experiment, run.id)  
    step_a_run=pipeline_run.find_step_run(step_a_name)  
    step_a_run.cancel() #alternatively .fail()  

问题step_a_run是一个空列表,因为step_a尚未开始运行。除了StepRun在Run之后继承cancel()所以我取消了整个管道。

在运行时对步骤状态(和状态)管理有什么想法吗?尤其是在开始运行/准备之前取消选择运行的这种情况?

4

0 回答 0