在Databricks无服务器集群记录模型时偶现Mlflow多云URL错误求助
问题原因
这个错误是非AWS环境(Azure/GCP)的Databricks无服务器集群特有的兼容性问题:当训练的scikit-learn模型文件大小超过MLFlow默认的分段上传阈值时,MLFlow会尝试用S3风格的分段上传API上传模型到DBFS,但Azure/GCP的DBFS不支持该API,因此触发报错。小文件会走普通上传流程,不会触发这个问题,所以才会出现“偶尔成功”的情况。
解决方案
调整MLFlow上传阈值,避免分段上传
在训练代码开头添加环境变量配置,把上传分块大小设为足够大的值(比如200MB),确保模型文件以单块方式上传:import os # 设置上传分块大小为200MB(单位:字节) os.environ["MLFLOW_ARTIFACT_UPLOAD_CHUNK_SIZE"] = "209715200"使用Databricks专属的模型日志API
替换mlflow.sklearn.log_model为Databricks优化后的mlflow.databricks.log_model,该API更适配无服务器集群环境:mlflow.databricks.log_model( sk_model=model, artifact_path="model", registered_model_name=model_name, signature=infer_signature(X_train, y_train), input_example=X_train.head(), )显式指定实验的artifact存储路径
在代码开头指定实验的artifact存储为DBFS路径,避免MLFlow自动生成多云URL:mlflow.set_experiment("/your-experiment-path") # 或直接设置artifact根路径 mlflow.set_tracking_uri("databricks") os.environ["MLFLOW_ARTIFACT_ROOT"] = "dbfs:/databricks/mlflow-tracking/your-experiment-id/artifacts"
内容的提问来源于stack exchange,提问作者Jaroslav Bezděk
相关产品推荐
相关产品推荐

