Databricks Runtime 11.3搭配MLflow 2.1.8时出现创建临时目录‘permission denied’权限错误
Databricks Runtime 11.3搭配MLflow 2.1.8时出现创建临时目录‘permission denied’权限错误
我之前在DBR 11.3上用MLflow 2.1.8的时候也踩过完全一样的坑!这个问题的核心是DBR 11.3对本地/tmp目录做了严格的权限限制,普通用户根本写不了,而你尝试的MLFLOW_DFS_TMP环境变量在这个组合下确实没用——因为这个变量是MLflow后续版本配合DBR 13+才新增的适配配置,2.1.8还不支持它。
给你几个亲测有效的解决办法:
全局指定MLflow临时目录到DBFS可写路径
DBFS的/tmp目录是每个用户都有读写权限的,你可以把MLflow的临时目录指向这里的自定义子路径。有两种设置方式:- 用Notebook魔法命令在开头设置:
(记得把「你的用户名」换成你实际的Databricks用户名)%env MLFLOW_TEMP_DIR=/dbfs/tmp/你的用户名/mlflow-temp - 用Python代码动态设置(适合在脚本中使用):
import os from databricks import dbutils # 定义临时目录的DBFS路径 temp_dir = "/dbfs/tmp/你的用户名/mlflow-temp" # 设置环境变量 os.environ["MLFLOW_TEMP_DIR"] = temp_dir # 确保目录存在,不存在就创建 dbutils.fs.mkdirs(temp_dir.replace("/dbfs", ""))
这样MLflow所有需要写临时文件的操作都会自动用这个路径,不会再碰本地
/tmp了。- 用Notebook魔法命令在开头设置:
针对性设置Artifact存储路径
如果只是在日志记录模型或文件时出错,也可以在调用MLflow的日志方法时直接指定合法的DBFS路径,比如:mlflow.log_artifact("训练结果.csv", artifact_path="/dbfs/tmp/你的模型存储路径")不过这种方式是局部生效,不如全局设置临时目录省心。
验证权限和路径
设置完之后,可以先手动测试一下路径的可写性:with open("/dbfs/tmp/你的用户名/mlflow-temp/test.txt", "w") as f: f.write("test")如果能成功写入,说明路径和权限都没问题,MLflow也能正常使用这个目录。
备注:内容来源于stack exchange,提问作者Gordon
相关产品推荐
相关产品推荐

