Linux环境下MLflow sklearn log_model权限及协议配置报错排查
问题解决:MLflow log_model权限错误及跟踪URI异常
第一个问题:PermissionError: [Errno 13] Permission denied: '/D:'
原因
Linux系统下出现Windows风格的/D:路径,大概率是MLflow读取了残留的Windows环境变量(比如MLFLOW_TRACKING_URI或MLFLOW_ARTIFACT_URI)——这些变量被设置成了类似file:///D:/xxx的Windows路径,在Linux下解析时就变成了/D:,而你对这个路径没有操作权限。
解决步骤
- 检查并清除环境变量:在终端执行
echo $MLFLOW_TRACKING_URI和echo $MLFLOW_ARTIFACT_URI,如果输出是Windows路径,直接清除:
或者在Jupyter Notebook里用Python代码清除:unset MLFLOW_TRACKING_URI unset MLFLOW_ARTIFACT_URIimport os os.environ.pop("MLFLOW_TRACKING_URI", None) os.environ.pop("MLFLOW_ARTIFACT_URI", None) - 显式指定本地跟踪目录:在代码开头设置一个Linux下你有权限的路径,比如:
之后再执行import mlflow mlflow.set_tracking_uri("./mlruns") # 用当前目录下的mlruns文件夹存储跟踪数据mlflow.sklearn.log_model(lr, "model"),模型会被存储到./mlruns目录下,不会再出现/D:路径。
第二个问题:MlflowException: 跟踪URI scheme 'file'无效
原因
你设置了HTTP类型的tracking_uri,但artifact存储的scheme还是默认的file,MLflow的代理artifact机制要求tracking uri必须是HTTP/HTTPS,同时需要确保MLflow服务已正确启动并配置了artifact存储路径。
解决步骤
- 正确启动MLflow服务:在终端执行命令,指定服务端口和artifact存储目录(选一个你有权限的本地目录):
这里mlflow server --host 0.0.0.0 --port 4321 --default-artifact-root ./mlflow_artifacts--default-artifact-root指定了服务端存储artifact的路径,确保该目录已存在且你有权限读写。 - 在Notebook中配置正确的URI:
import mlflow from mlflow.tracking import MlflowClient # 设置tracking uri为MLflow服务地址 mlflow.set_tracking_uri("http://localhost:4321") # 无需单独设置artifact_uri,服务会自动使用--default-artifact-root指定的路径 client = MlflowClient(tracking_uri="http://localhost:4321") - 检查残留环境变量:确保
MLFLOW_ARTIFACT_URI没有被设置成file://开头的路径,按第一个问题里的方法清除即可。
内容的提问来源于stack exchange,提问作者KansaiRobot
相关产品推荐
相关产品推荐

