You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用submit_child创建Estimator子运行失败的问题咨询

解决Estimator创建子运行时的TrainingException问题

嘿,我之前遇到过完全一样的问题!这个报错的原因很清楚:submit_child()并不是设计用来直接接收Estimator对象的,它的定位是启动脚本类型的子运行,只支持script_params、inputs和source_directory_data_store这三类参数。当你直接传入Estimator时,底层代码会尝试传递它的所有内部参数(包括_parent_run_id),而这个参数是submit_child()不允许手动覆盖的,所以就触发了异常。

下面给你两种可行的替代方案,根据你的场景选择:

方案一:手动关联父运行ID,用Estimator的submit方法 (推荐)

如果你需要保留Estimator的所有配置(比如自定义环境、计算目标、依赖包管理等),同时让它成为父运行的子运行,最直接的方式是在调用Estimator的submit()方法时,手动指定父运行ID:

# 启动父运行
run = experiment.start_logging()
parent_run_id = run.id

# 创建你的TensorFlow Estimator(PyTorch/普通Estimator用法完全一致)
estimator = TensorFlow(
    source_directory='.', 
    compute_target=cpu_cluster, 
    entry_script='keras.py', 
    pip_packages=["keras"], 
    max_run_duration_seconds=1200,
)

# 提交Estimator时指定父运行ID,自动关联为子运行
child_run = estimator.submit(experiment=experiment, parent_run_id=parent_run_id)

# 可选:等待子运行完成并查看输出
child_run.wait_for_completion(show_output=True)

这种方式能完美保留Estimator的所有特性,同时父子运行的关联关系会在Azure ML的运行面板里正确显示,方便后续的实验追踪和结果管理。

方案二:用submit_child()的允许参数直接运行训练脚本

如果你的训练逻辑不需要Estimator的复杂配置(比如只是简单的单脚本运行,不需要自定义计算环境、分布式训练等),可以直接用submit_child()支持的参数来启动子运行:

run = experiment.start_logging()

# 使用submit_child创建子运行,传入脚本运行所需的参数
child_run = run.submit_child(
    source_directory='.',  # 你的训练代码所在目录
    script_params={
        # 这里可以传递脚本需要的自定义参数,比如依赖包、运行时长限制等
        "--pip-packages": "keras",
        "--max-run-duration": "1200"
    }
)

# 等待子运行完成
child_run.wait_for_completion(show_output=True)

需要注意的是,这种方式下你需要在keras.py脚本里自行处理传入的参数(比如手动安装依赖包、实现运行时长限制逻辑),因为不再依赖Estimator的自动配置能力。

最佳实践总结

  • 如果你需要使用Estimator的高级特性(分布式训练、自定义Docker镜像、自动化依赖管理等),优先选择方案一,手动指定parent_run_id是最稳妥且功能完整的方式。
  • 如果你只是需要快速启动一个简单的脚本子运行,且不需要Estimator的复杂配置,可以用方案二,简化代码流程。

内容的提问来源于stack exchange,提问作者Keita Onabuta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:54:02