是否可在Databricks MLflow上传本地预训练模型并部署服务?
可行性结论
该操作完全具备可行性,是Databricks平台原生支持的标准工作流,不存在平台层面的功能限制,本地训练保存的pkl格式模型可以完整对接MLflow实验管理、模型注册、在线推理部署全链路能力。
具体操作步骤
- 第一步:上传本地模型文件到Databricks存储
你可以通过Databricks工作区UI的文件上传入口、或是Databricks CLI工具,将本地存储的model.pkl文件上传到DBFS(Databricks文件系统)的可访问路径下,比如常用的/dbfs/FileStore/custom_models/目录即可。 - 第二步:对接MLflow完成模型记录与注册
打开Databricks Notebook,关联你需要对接的MLflow实验后,通过对应代码加载上传好的pkl模型,将模型作为artifact记录到MLflow实验运行中,同时注册到MLflow模型注册表。
如果你的模型是scikit-learn、XGBoost、LightGBM等MLflow原生支持框架训练导出的pkl文件,可以直接调用对应框架的MLflow API完成记录;如果是自定义结构的模型,可以用mlflow.pyfunc通用模型格式做封装,参考代码如下:import mlflow import mlflow.pyfunc import pickle import pandas as pd # 替换为你上传pkl文件的实际DBFS路径 LOCAL_UPLOADED_MODEL_PATH = "/dbfs/FileStore/custom_models/model.pkl" class PklWrapperModel(mlflow.pyfunc.PythonModel): def load_context(self, context): # 加载挂载的pkl模型文件 with open(context.artifacts["pkl_model"], "rb") as f: self.model = pickle.load(f) def predict(self, context, input_df: pd.DataFrame): # 对齐你本地模型的推理逻辑 return self.model.predict(input_df) # 记录模型到MLflow实验并注册 with mlflow.start_run(run_name="upload_local_pretrained_model"): model_info = mlflow.pyfunc.log_model( artifact_path="trained_model", python_model=PklWrapperModel(), artifacts={"pkl_model": LOCAL_UPLOADED_MODEL_PATH}, registered_model_name="my_local_pkl_model" ) - 第三步:部署为在线推理端点
等模型成功注册到MLflow模型注册表后,将需要部署的模型版本标记为Production阶段,进入Databricks模型服务页面,选择该注册模型对应的生产版本,配置计算规格、扩缩容阈值、鉴权规则后即可一键创建端点。部署完成的端点会提供标准REST推理接口,和平台原生训练模型部署的端点能力完全一致,可以直接对外提供推理服务。
常见注意事项
- 版本兼容问题:本地训练模型时使用的Python版本、机器学习依赖库版本,需要和MLflow记录模型时指定的依赖版本、部署端点使用的Databricks运行时版本对齐,避免出现模型加载失败、推理结果异常的问题。你可以在调用
log_model时传入自定义的conda_env或requirements配置,指定精确的依赖版本,平台部署时会自动完成依赖安装。 - 路径权限问题:上传
model.pkl时不要将文件放在个人用户的私有隔离路径下,要确保MLflow服务、模型服务的运行身份有该路径的读权限,避免后续流程出现文件读取失败的报错。 - 简化操作提示:如果你的pkl模型是MLflow内置支持框架导出的,不需要手动编写pyfunc包装类,直接调用对应框架的
mlflow.<framework>.log_model接口即可完成模型记录,流程更简洁。
内容的提问来源于stack exchange,提问作者Sara
相关产品推荐
相关产品推荐

