调用mlflow.set_experiment()报Enum ErrorCode无403值错误,求原因
问题原因与解决方法
核心原因
这个报错的本质是请求被Databricks MLflow服务拒绝(HTTP 403状态码),但旧版本的MLflow SDK没有将403状态码纳入ErrorCode枚举类,导致无法解析错误,抛出了枚举值不存在的异常。具体触发场景通常有以下几种:
- 权限不足:你的Databricks账号没有目标实验的创建权限(实验不存在时)或读写权限(实验已存在时)。
- 版本不兼容:本地使用的MLflow SDK、Databricks Connect版本与Databricks集群上的MLflow服务版本不匹配,旧版本SDK不支持处理403错误码。
- 认证失效:Databricks Connect的配置信息(如token、集群ID)不正确或已过期,导致请求被拒绝。
解决步骤
1. 检查并修复权限
登录Databricks workspace,找到目标实验(或要创建的实验路径):
- 如果实验已存在:确认你的账号被赋予了编辑或管理权限。
- 如果实验不存在:确认你的账号有在对应路径下创建实验的权限(可联系Workspace管理员配置)。
2. 同步MLflow与Databricks Connect版本
确保本地安装的依赖版本与集群一致:
# 先查看集群上的MLflow版本,再安装对应版本 pip install mlflow==<集群MLflow版本> pip install databricks-connect==<集群Databricks Runtime版本>
3. 验证Databricks Connect认证
执行以下命令测试连接有效性,确保token和集群配置正确:
databricks-connect test
如果认证失败,重新配置Databricks Connect:
databricks-connect configure
4. 手动处理实验(替代方案)
如果mlflow.set_experiment()仍报错,可改用MlflowClient手动管理实验,更清晰地排查权限问题:
# 先尝试获取实验,不存在则创建 try: experiment = client.get_experiment_by_name(experiment_name) if experiment is None: # 创建实验(需要对应路径的创建权限) experiment_id = client.create_experiment(experiment_name) else: experiment_id = experiment.experiment_id # 设置实验ID mlflow.set_experiment(experiment_id=experiment_id) except Exception as e: print(f"实验操作失败: {str(e)}")
内容的提问来源于stack exchange,提问作者Minura Punchihewa
相关产品推荐
相关产品推荐

