Azure Databricks中MLFlow Recipes训练时临时文件缺失错误
解决Azure Databricks中MLFlow Recipes训练LGBM时的临时文件找不到错误
问题背景
在Azure Databricks环境首次使用MLFlow Recipes,此前数据摄入到预测流程正常,训练LGBMClassifier模型时触发FileNotFoundError,提示无法找到临时目录/tmp/repl_tmp_data/ReplId-xxx/tmpxxx,更换MLFlow 2.7.0及其他版本均无法解决。
解决方法
1. 预创建临时目录父路径
报错显示MLFlow尝试创建子目录时,父目录/tmp/repl_tmp_data可能不存在,手动提前创建该目录:
import os # 创建父目录,exist_ok=True避免重复创建报错 os.makedirs("/tmp/repl_tmp_data", exist_ok=True) # 之后再执行MLFlow Recipes代码 experiment_name = "experiment_name" if not mlflow.get_experiment_by_name(experiment_name): mlflow.create_experiment(name=experiment_name ) else: mlflow.set_experiment(experiment_name) experiment = mlflow.get_experiment_by_name(experiment_name) r = Recipe(profile="databricks") r.clean() r.inspect() r.run("ingest") r.run("split") r.run("transform") r.run("train")
2. 自定义MLFlow临时目录
通过设置环境变量指定一个稳定的、有读写权限的临时目录,比如Databricks本地磁盘路径:
import os # 指定自定义临时目录 os.environ["MLFLOW_TMPDIR"] = "/local_disk0/tmp/mlflow_temp" # 确保目录存在 os.makedirs(os.environ["MLFLOW_TMPDIR"], exist_ok=True) # 后续执行MLFlow Recipes流程...
3. 检查集群权限与临时目录配置
- 确认集群对
/tmp或自定义临时目录有读写权限,可通过!ls -ld /tmp命令查看权限设置。 - 检查集群Spark配置中的
spark.local.dir参数,确保该配置指向的目录存在且权限正常,MLFlow可能会使用该目录作为临时文件存储路径。
4. 切换至作业模式运行
交互式Repl环境的临时目录可能存在自动清理或权限问题,将代码封装为Databricks Job运行,作业环境的临时目录管理更稳定,可避免此类路径问题。
5. 匹配兼容的依赖版本
确保MLFlow、lightgbm、scikit-learn版本与Databricks Runtime版本兼容:
- 例如Databricks Runtime 13.x推荐使用MLFlow 2.9及以上版本。
- 执行
%pip install mlflow==2.9.0 lightgbm==3.3.5安装兼容版本后重试。
内容的提问来源于stack exchange,提问作者J.Hoeffer
相关产品推荐
相关产品推荐

