MLflow Projects保存run到指定experiment id/名称时报错如何解决
错误根因
mlflow.run()方法默认会查找名为main的项目入口点执行,你在MLproject配置文件中仅定义了generate、train、complete三个入口,没有main入口,因此直接抛出找不到入口的报错。- 逻辑存在递归调用风险:你本身是通过
generate入口启动的generate_data.py脚本,又在该脚本内部调用mlflow.run执行当前项目,会无限触发新的运行任务,属于完全不必要的冗余逻辑。
解决方法
根据你的实际需求选择对应方案即可:
方案一:仅需将当前运行记录归到指定experiment
直接删除mlflow.run(uri=os.getcwd(), experiment_name=experiment_name)这行代码即可,仅保留mlflow.set_experiment(experiment_name),后续你在脚本中调用的所有mlflow记录接口(比如mlflow.log_param、mlflow.log_metric等),都会自动归属到你设置的experiment下。
如果需要显式控制运行上下文,可补充mlflow.start_run逻辑:
# 先设置目标experiment mlflow.set_experiment(experiment_name=experiment_name) # 启动运行上下文 with mlflow.start_run() as current_run: # 你的业务逻辑、mlflow记录逻辑都放在这里 ...
方案二:确实需要在脚本内调用MLflow Project的其他入口
如果你的业务逻辑需要在当前脚本中触发项目的其他入口(比如训练入口train),需要显式指定entry_point参数,同时注意不要调用当前正在运行的generate入口,避免递归死循环:
mlflow.run( uri=os.getcwd(), entry_point="train", # 显式指定要调用的入口名称 experiment_name=experiment_name, parameters={ # 对应入口需要传入的参数 "param1": value1, "param2": value2 } )
内容的提问来源于stack exchange,提问作者Farrandi
相关产品推荐
相关产品推荐

