开始
用户指南
管理指南
参考指南
资源
2023年1月12日更新
给我们反馈
一个MLflow模型是一种包装机器学习模型的标准格式,可以在各种下游工具中使用——例如,Apache Spark上的批处理推理或通过REST API进行实时服务。格式定义了一种约定,允许您以不同的格式保存模型口味(python-function, pytorch, sklearn,等等),可以被不同的模型理解服务和推理平台bob体育客户端下载.
使用Databricks Runtime 8.4 ML及以上版本,当您记录一个模型时,MLflow会自动记录让和conda.yaml文件。您可以使用这些文件重新创建模型开发环境并使用virtualenv(推荐)或conda.
让
conda.yaml
virtualenv
conda
重要的
Anaconda公司更新了他们的服务条款用于anaconda.org频道。根据新的服务条款,如果您依赖Anaconda的包装和分销,您可能需要商业许可证。看到水蟒商业版常见问题解答获取更多信息。您使用任何水蟒频道是受他们的服务条款。
MLflow模型之前记录过v1.18(Databricks Runtime 8.3 ML或更早版本)默认使用conda进行日志记录违约通道(https://repo.anaconda.com/pkgs/)作为依赖项。由于此许可证变更,Databricks已停止使用违约通道,用于使用MLflow v1.18及以上版本记录的模型。缺省记录的通道为nowconda-forge,其中指向社区管理https://conda-forge.org/.
违约
conda-forge
如果您在MLflow v1.18之前记录模型,并且不排除违约通道从conda环境中获取模型时,该模型可能依赖于违约你可能不想要的通道。要手动确认模型是否具有此依赖项,您可以进行检查通道的价值conda.yaml与日志模型一起打包的文件。例如,一个模型的conda.yaml与一个违约通道依赖关系可能是这样的:
通道
渠道:-违约依赖关系:-python = 3.8.8-皮普-皮普:-mlflow-scikit-learn = = 0.23.2-cloudpickle = = 1.6.0名字:mlflow-env
因为Databricks不能确定在您与Anaconda的关系下,是否允许您使用Anaconda存储库与模型进行交互,因此Databricks不会强迫其客户进行任何更改。如果Anaconda的条款允许您通过使用Databricks使用Anaconda.com回购,则不需要采取任何行动。
如果您想要更改模型环境中使用的通道,您可以使用一个新的模型注册表重新注册模型conda.yaml.方法中指定通道来实现此功能conda_env参数的log_model ().
conda_env
log_model ()
有关的更多信息log_model ()API,请参阅MLflow文档以了解您正在使用的模型风格,例如,Log_model用于scikit-learn.
欲知更多有关conda.yaml文件,请参阅MLflow文档.
将模型记录到MLflow跟踪服务器,使用mlflow。<模型类型> .log_model(模型,…).
mlflow。<模型类型> .log_model(模型,…)
要加载先前记录的模型以进行推断或进一步开发,请使用mlflow。<模型类型> .load_model (modelpath),在那里modelpath是下列之一:
mlflow。<模型类型> .load_model (modelpath)
modelpath
运行相对路径(例如运行:/ {run_id} / {model-path})
运行:/ {run_id} / {model-path}
DBFS路径
一个注册模式路径(例如模型:/ {model_name} / {model_stage}).
模型:/ {model_name} / {model_stage}
有关加载MLflow模型的选项的完整列表,请参见在MLflow文档中引用工件.
对于Python MLflow模型,另一个选项是使用mlflow.pyfunc.load_model ()将模型作为通用Python函数加载。您可以使用下面的代码片段加载模型并对数据点进行评分。
mlflow.pyfunc.load_model ()
模型=mlflow.pyfunc.load_model(model_path)模型.预测(model_input)
作为另一种选择,您可以将模型导出为Apache Spark UDF,用于在Spark集群上进行评分,可以作为批处理作业,也可以作为实时作业火花流的工作。
#将输入数据表加载为Spark DataFrameinput_data=火花.表格(input_table_name)model_udf=mlflow.pyfunc.spark_udf(model_path)df=input_data.withColumn(“预测”,model_udf())
为了准确地加载模型,您应该确保将模型依赖项以正确的版本加载到notebook环境中。在Databricks Runtime 10.5 ML及以上版本中,如果在当前环境和模型依赖项之间检测到不匹配,MLflow会警告您。
Databricks Runtime 11.0 ML及以上版本中包含了简化恢复模型依赖关系的附加功能。在Databricks运行时11.0 ML及以上,用于pyfunc口味模型,你可以叫mlflow.pyfunc.get_model_dependencies检索和下载模型依赖项。此函数返回依赖项文件的路径,然后使用该路径进行安装%皮普安装<文件路径>.当您将模型作为PySpark UDF加载时,指定env_manager = " virtualenv "在mlflow.pyfunc.spark_udf调用。这将恢复PySpark UDF上下文中的模型依赖关系,并且不会影响外部环境。
pyfunc
mlflow.pyfunc.get_model_dependencies
%皮普安装<文件路径>
env_manager = " virtualenv "
mlflow.pyfunc.spark_udf
您也可以通过手动安装在Databricks Runtime 10.5或以下版本中使用此功能MLflow 1.25.0或以上版本:
%皮普安装“mlflow > = 1.25.0”
有关如何记录模型依赖关系(Python和非Python)和工件的其他信息,请参见日志模型依赖关系.
了解如何为模型服务记录模型依赖关系和自定义工件:
使用依赖项部署模型
使用无服务器实时推理的自定义Python库
打包无服务器实时推理的自定义工件和文件
当您在Databricks笔记本中记录模型时,Databricks会自动生成代码片段,您可以复制这些代码片段并使用它们来加载和运行模型。查看这些代码片段:
导航到生成模型的运行的Runs屏幕。(见查看笔记本实验查看如何显示“运行”界面。)
滚动到工件部分。
单击记录模型的名称。右边会打开一个面板,显示可以用来加载日志模型并在Spark或pandas DataFrames上进行预测的代码。
有关日志记录模型的示例,请参见中的示例跟踪机器学习训练运行实例.有关加载日志模型进行推断的示例,请参阅下面的示例。
中注册模型MLflow模型注册表,一个集中的模型存储,它提供了一个UI和一组api来管理MLflow模型的完整生命周期。有关模型注册中心的一般信息,请参见MLflow模型注册表上的数据.有关如何使用模型注册表管理Databricks中的模型的说明,请参见管理模型生命周期.
要使用API注册模型,请使用mlflow.register_model(“运行:/ {run_id} / {model-path}”,“{registered-model-name}”).
mlflow.register_model(“运行:/ {run_id} / {model-path}”,“{registered-model-name}”)
要在本地保存模型,请使用mlflow。<模型类型> .save_model(模型,modelpath).modelpath一定是DBFS路径。例如,如果使用DBFS位置dbfs: / my_project_models为了存储您的项目工作,您必须使用模型路径/ dbfs my_project_models:
mlflow。<模型类型> .save_model(模型,modelpath)
dbfs: / my_project_models
/ dbfs my_project_models
modelpath=“- / dbfs / my_project_models /模型% f-% f"%(α,l1_ratio)mlflow.sklearn.save_model(lr,modelpath)
对于MLlib模型,使用毫升管道.
您可以下载带有各种api的已注册模型的日志模型构件(例如模型文件、图表和度量)。
Python API例子:
从mlflow.store.artifact.models_artifact_repo进口ModelsArtifactRepositorymodel_uri=MlflowClient.get_model_version_download_uri(model_name,model_version)ModelsArtifactRepository(model_uri).download_artifacts(artifact_path="")
Java API例子:
MlflowClientmlflowClient=新MlflowClient();//获取已注册模型版本的模型URI。字符串modelURI=mlflowClient.getModelVersionDownloadUri(modelName,modelVersion);//或直接下载模型工件。文件modelFile=mlflowClient.downloadModelVersion(modelName,modelVersion);
CLI命令例子:
mlflow工件下载--工件-uri模型:/<名字>/<版本|阶段>
你可以使用无服务器实时推理或经典MLflow模型服务于数据库将模型注册表中的机器学习模型作为REST端点托管。这些端点根据模型版本及其阶段的可用性自动更新。
您还可以使用将模型部署到第三方服务框架MLflow的内置部署工具.
请看以下例子: