如何让管道中独立的PythonScriptStep步骤按输入依赖并行运行
多独立PythonScriptStep并行运行异常解决方案
预期的流水线DAG结构如下:
3个上游步骤应并行执行,完成后两个finetune步骤并行执行,rgb_test步骤同理。针对步骤串行排队的问题,可按以下顺序排查解决:
1 检查计算集群配置
- 确认你使用的计算集群「最大节点数」参数大于预期的并行步骤数量,避免节点数不足导致步骤排队
- 核对订阅对应VM规格的可用配额,配额不足会强制限制并行作业数量
- 检查单步骤资源申请配置:在步骤的RunConfiguration中确认
cpu_cores、memory_gb的请求值未超出单节点可分配资源上限,避免单个步骤占用整节点导致并行度下降
2 检查管道运行的并发参数配置
部分Azure ML SDK版本默认最大并发步骤数为1,提交管道时需显式配置该参数,示例如下:
from azureml.core import Experiment # pipeline为已构建完成的管道对象 pipeline_run = Experiment(workspace, "你的实验名称").submit( pipeline, pipeline_parameters={"max_concurrent_steps": 5} # 数值按需调整为需要的最大并行数 )
3 排查步骤隐式依赖
若步骤间存在未显式定义的共享输入输出对象,会被流水线判定为存在依赖关系强制串行。可通过以下代码确认依赖关系是否符合预期:
for step in pipeline.steps: print(f"步骤{step.name}依赖:{[dep.name for dep in step.dependencies]}")
如果出现非预期的依赖项,检查是否存在不同步骤误用同一个PipelineData对象的情况。
4 其他排查项
- 升级Azure ML SDK到最新版本,旧版本存在并发调度相关的已知问题,升级命令:
pip install --upgrade azureml-pipeline-core azureml-core - 确认未启用集群排他调度规则,排他调度会强制单个节点同一时间仅运行一个作业
内容的提问来源于stack exchange,提问作者Francois
相关产品推荐
相关产品推荐

