Automated ML数据触发调度流水线未自动触发问题求助
问题描述
我配置了两条Azure ML流水线:
- 流水线1:将数据从Blob存储上传至数据存储(更新数据资产)
- 流水线2:模型训练
同时设置了两个调度:
- 调度1:每10分钟触发一次流水线1
- 调度2:数据存储路径
dstore/DATASET_NAME下有新数据时触发流水线2
调度1代码:
schedule = Schedule.create( workspace=ws, name="data_ingestion_schedule", description="Schedule that updates the Dataset", pipeline_parameters={"ds_name": DATASET_NAME}, pipeline_id=published_pipeline.id, # id of the published data upload pipeline experiment_name=EXPERIMENT_NAME, recurrence=ScheduleRecurrence(frequency="Minute", interval=10), wait_for_provisioning=True )
调度2代码:
schedule = Schedule.create( workspace=ws, name="retraining_schedule", description="Schedule that triggers training pipeline", pipeline_parameters={"ds_name": DATASET_NAME, "model_name": MODEL_NAME}, pipeline_id=published_pipeline.id, # id of the published training pipeline experiment_name=EXPERIMENT_NAME, datastore=dstor, path_on_datastore=DATASET_NAME, wait_for_provisioning=True, polling_interval=5 )
目前的问题是:即使目标数据存储路径下的数据发生变更,调度2始终无法触发流水线2。我已尝试更换工作区、数据存储及存储路径,均未解决问题。
理想流程:上传新数据至Blob存储→调度1触发流水线1更新数据存储→调度2触发流水线2基于新数据重新训练模型
排查与解决方案
1. 确认路径配置准确性
检查path_on_datastore参数是否指向数据存储内的正确相对路径:
- 代码中
path_on_datastore=DATASET_NAME,需确保该值对应数据存储内的实际文件夹路径(而非数据集名称) - 通过
datastore.path(path_on_datastore).exists()代码或Azure ML工作室验证路径是否真实存在
2. 检查数据变更触发条件
Azure ML数据存储调度仅对文件最后写入时间变更敏感,以下情况不会触发:
- 仅修改文件元数据(如权限)
- 上传文件的最后写入时间早于调度创建时间
- 文件上传后被快速删除(调度未完成检测)
上传新文件后,需等待至少设置的polling_interval时长(当前为5分钟)再查看触发记录。
3. 验证调度权限与状态
- 确认创建调度的账号/服务主体拥有数据存储的读取权限和流水线的触发权限
- 在Azure ML工作室的「流水线→调度」页面,检查目标调度的状态是否为「已启用」,并查看是否有权限相关报错日志
4. 修正流水线ID赋值错误
调度2代码中pipeline_id=published_pipeline.id需确保对应已发布的训练流水线,而非数据上传流水线。建议分别存储两个流水线的发布ID:
# 发布数据上传流水线 published_upload_pipeline = pipeline_upload.publish(name="data_upload_pipeline", version="1.0") # 发布训练流水线 published_training_pipeline = pipeline_train.publish(name="training_pipeline", version="1.0") # 调度1绑定上传流水线 schedule1 = Schedule.create( workspace=ws, name="data_ingestion_schedule", # 其他参数 pipeline_id=published_upload_pipeline.id, # 其他参数 ) # 调度2绑定训练流水线 schedule2 = Schedule.create( workspace=ws, name="retraining_schedule", # 其他参数 pipeline_id=published_training_pipeline.id, # 其他参数 )
5. 查看调度运行日志
在Azure ML工作室进入对应工作区,依次点击:「流水线→调度→选中目标调度→运行历史记录」,查看是否有数据变更检测失败的具体错误信息。
6. 替代触发方案
若以上方法无效,可绕过数据存储调度逻辑:
- 在流水线1的最后一步添加代码,直接调用训练流水线的REST API触发运行
- 使用Azure Logic Apps或Azure Functions监听Blob存储的文件变更事件,再触发Azure ML流水线
内容的提问来源于stack exchange,提问作者Ashyam
相关产品推荐
相关产品推荐

