考虑具有三个 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()所以我取消了整个管道。
在运行时对步骤状态(和状态)管理有什么想法吗?尤其是在开始运行/准备之前取消选择运行的这种情况?