Skip to content

Commit 0bc4a13

Browse files
authored
[ML][Pipelines] Validate invalid scenario: control flow node as init/finalize (#26918)
* validate control flow node as init/finalize * fix if logic order * fix pylint issue for trailing whitespace * remove unused parameter for test
1 parent f3dc5d7 commit 0bc4a13

File tree

2 files changed

+14
-4
lines changed

2 files changed

+14
-4
lines changed

sdk/ml/azure-ai-ml/azure/ai/ml/entities/_job/pipeline/pipeline_job.py

+13-3
Original file line numberDiff line numberDiff line change
@@ -331,8 +331,8 @@ def _validate_init_finalize_job(self) -> MutableValidationResult:
331331
validation_result.append_error(yaml_path="jobs", message="No other job except for on_init/on_finalize job.")
332332

333333
def _is_isolated_job(_validate_job_name: str) -> bool:
334-
# no input to validate job
335334
_validate_job = self.jobs[_validate_job_name]
335+
# no input to validate job
336336
for _input_name in _validate_job.inputs:
337337
if not hasattr(_validate_job.inputs[_input_name]._data, "_data_binding"):
338338
continue
@@ -349,19 +349,29 @@ def _is_isolated_job(_validate_job_name: str) -> bool:
349349
return False
350350
return True
351351

352+
def _is_control_flow_node(_validate_job_name: str) -> bool:
353+
from azure.ai.ml.entities._builders.control_flow_node import ControlFlowNode
354+
355+
_validate_job = self.jobs[_validate_job_name]
356+
return issubclass(type(_validate_job), ControlFlowNode)
357+
352358
# validate on_init
353359
if on_init is not None:
354360
if on_init not in self.jobs:
355361
append_on_init_error(f"On_init job name {on_init} not exists in jobs.")
356362
else:
357-
if not _is_isolated_job(on_init):
363+
if _is_control_flow_node(on_init):
364+
append_on_init_error("On_init job should not be a control flow node.")
365+
elif not _is_isolated_job(on_init):
358366
append_on_init_error("On_init job should not have connection to other execution node.")
359367
# validate on_finalize
360368
if on_finalize is not None:
361369
if on_finalize not in self.jobs:
362370
append_on_finalize_error(f"On_finalize job name {on_finalize} not exists in jobs.")
363371
else:
364-
if not _is_isolated_job(on_finalize):
372+
if _is_control_flow_node(on_finalize):
373+
append_on_finalize_error("On_finalize job should not be a control flow node.")
374+
elif not _is_isolated_job(on_finalize):
365375
append_on_finalize_error("On_finalize job should not have connection to other execution node.")
366376
return validation_result
367377

sdk/ml/azure-ai-ml/tests/dsl/unittests/test_init_finalize_job.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ def subgraph_with_init_func():
144144
subgraph_with_init_func()
145145
assert str(e.value) == "On_init/on_finalize is not supported for pipeline component."
146146

147-
def test_init_finalize_job_with_subgraph(self, caplog) -> None:
147+
def test_init_finalize_job_with_subgraph(self) -> None:
148148
from azure.ai.ml._internal.dsl import set_pipeline_settings
149149

150150
# happy path

0 commit comments

Comments
 (0)