开始
用户指南
管理指南
参考指南
资源
2023年1月6日更新
给我们反馈
预览
此功能已在公共预览.
重要的
本文中的指导是针对经典MLflow模型服务的。Databricks建议您将模型服务工作流迁移到无服务器实时推理,以增强模型端点部署和可伸缩性。有关更多信息,请参见使用无服务器实时推断的模型服务.
经典MLflow模型服务允许您将来自Model Registry的机器学习模型作为REST端点托管,这些REST端点根据模型版本及其阶段的可用性自动更新。
当您为给定的注册模型启用模型服务时,Databricks会自动为模型创建一个惟一的集群,并在该集群上部署模型的所有非存档版本。如果发生错误,Databricks将重新启动集群,并在为模型禁用模型服务时终止集群。模型服务自动与模型注册中心同步,并部署任何新注册的模型版本。可以使用标准REST API请求查询已部署的模型版本。Databricks使用其标准身份验证对模型的请求进行身份验证。
虽然该服务还处于预览阶段,但Databricks建议将其用于低吞吐量和非关键应用程序。目标吞吐量是200 qps,目标可用性是99.5%,尽管这两者都不作保证。此外,每个请求的有效负载大小限制为16 MB。
每个模型版本都使用MLflow进行部署模型部署并在由其依赖项指定的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与一个违约通道依赖关系可能是这样的:
通道
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模型服务可用于Python MLflow模型。必须在conda环境中声明所有模型依赖项。
要启用Model services,您必须具备创建集群权限.
模型服务可在模型注册中心的Databricks中使用。
您启用模型从其服务注册模型页面.
单击服务选项卡。如果模型尚未为服务启用,则支持服务按钮出现。
点击支持服务.显示“服务”选项卡状态显示为Pending。几分钟后,状态更改为“就绪”。
若要禁用服务模型,请单击停止.
从服务选项卡,您可以向服务模型发送请求并查看响应。
每个部署的模型版本都被分配了一个或几个惟一的uri。至少,每个模型版本都被分配了一个URI,构造如下:
< databricks-instance > /模型/ < registered-model-name > / <模型版本> /调用
例如,调用注册为的模型的版本1iris-classifier,使用这个URI:
iris-classifier
https:// < databricks-instance > /模型/ iris-classifier / 1 /调用
您还可以根据其阶段来调用模型版本。例如,如果版本1在生产阶段,它也可以使用这个URI进行评分:
https:// < databricks-instance > /模型/ iris-classifier /生产/调用
可用模型uri的列表出现在服务页面的model Versions选项卡的顶部。
所有活动(非存档)模型版本都已部署,您可以使用uri查询它们。Databricks在注册新模型版本时自动部署,并在存档时自动删除旧版本。
注册模型的所有已部署版本共享相同的集群。
模型访问权限继承自模型注册中心。启用或禁用服务特性需要注册模型上的“管理”权限。任何拥有阅读权限的人都可以对任何部署的版本进行评分。
要对已部署的模型进行评分,您可以使用UI或向模型URI发送REST API请求。
这是测试模型最简单、最快的方法。您可以插入JSON格式的模型输入数据,然后单击发送请求.如果模型已经记录了一个输入示例(如上图所示),单击负载的例子加载输入示例。
您可以通过使用REST API发送评分请求standard Databricks认证.下面的示例演示了使用个人访问令牌进行身份验证。
作为安全最佳实践,当使用自动化工具、系统、脚本和应用程序进行身份验证时,Databricks建议您使用属于的访问令牌服务主体而不是工作区用户。要为服务主体创建访问令牌,请参见管理服务主体的访问令牌.
给定一个MODEL_VERSION_URI就像https:// < databricks-instance > /模型/ iris-classifier /生产/调用(< databricks-instance >是Databricks实例的名称)和Databricks REST API令牌DATABRICKS_API_TOKEN,下面的例子展示了如何查询一个服务模型:
MODEL_VERSION_URI
< databricks-instance >
DATABRICKS_API_TOKEN
下面的示例反映MLflow 2.0中引入的评分格式。如果您更喜欢使用MLflow 1。X,你可以修改log_model ()类中包含所需MLflow版本依赖项的API调用extra_pip_requirements参数。这样做可以确保使用适当的评分格式。
extra_pip_requirements
mlflow.<味道>。log_model(...,extra_pip_requirements=[“mlflow = = 1 *”。])
片段查询接受pandas数据帧输入的模型。
curl -X POST -u令牌:DATABRICKS_API_TOKEN美元MODEL_VERSION_URI美元\- h“application / json内容类型:\- d”{"columns": ["sepal_length", "sepal_width", "petal_length", "petal_width"],“数据”:[(5.1,3.5,1.4,0.2),(4.2,5.0,0.8,0.5)]} '
片段查询接受张量输入的模型。张量输入应该按照TensorFlow services的API文档.
curl -X POST -u令牌:DATABRICKS_API_TOKEN美元MODEL_VERSION_URI美元\- h“application / json内容类型:\- d'{"inputs": [[5.1, 3.5, 1.4, 0.2]]]}'
进口numpy作为np进口熊猫作为pd进口请求defcreate_tf_serving_json(数据):返回{“输入”:{的名字:数据[的名字].tolist()为的名字在数据.键()}如果isinstance(数据,dict)其他的数据.tolist()}defscore_model(model_uri,databricks_token,数据):头={“授权”:f“不记名{databricks_token}",“内容类型”:“application / json”,}data_dict={“dataframe_split”:数据.to_dict(东方=“分裂”)}如果isinstance(数据,pd.DataFrame)其他的create_tf_serving_json(数据)data_json=json.转储(data_dict)响应=请求.请求(方法=“职位”,头=头,url=model_uri,json=data_json)如果响应.status_code! =200:提高异常(f"请求状态失败{响应.status_code},{响应.文本}")返回响应.json()#为接受熊猫数据框架的模型打分数据=pd.DataFrame([{“sepal_length”:5.1,“sepal_width”:3.5,“petal_length”:1.4,“petal_width”:0.2}))score_model(MODEL_VERSION_URI,DATABRICKS_API_TOKEN,数据)#对接受张量的模型进行评分数据=np.asarray([[5.1,3.5,1.4,0.2]])score_model(MODEL_VERSION_URI,DATABRICKS_API_TOKEN,数据)
您可以在Power BI Desktop中使用以下步骤对数据集进行评分:
你想要得分的开放数据集。
转到转换数据。
在左侧面板中右键单击并选择创建新查询.
去查看>高级编辑器.
在填写适当的后,用下面的代码片段替换查询主体DATABRICKS_API_TOKEN而且MODEL_VERSION_URI.
(数据集作为表格)作为表格= >让call_predict=(数据集作为表格)作为列表= >让apiToken=DATABRICKS_API_TOKEN,modelUri=MODEL_VERSION_URI,responseList=Json.文档(网络.内容(modelUri,[头=[#"Content-Type" = "application/json",#"授权" =文本。格式(" holder #{0}", {apiToken})),内容=Json.FromValue(数据集)]))在responseList,predictionList=列表.结合(列表.变换(表格.分裂(数据集,256),(x)= >call_predict(x))),predictionsTable=表格.FromList(predictionList,(x)= >{x},{“预测”}),datasetWithPrediction=表格.加入(表格.AddIndexColumn(predictionsTable,“指数”),“指数”,表格.AddIndexColumn(数据集,“指数”),“指数”)在datasetWithPrediction
用您想要的模型名称命名查询。
打开数据集的高级查询编辑器并应用模型函数。
有关服务器接受的输入数据格式的更多信息(例如,pandas面向分割的格式),请参见MLflow文档.
服务页面显示服务集群以及各个模型版本的状态指示器。
要检查服务集群的状态,请使用模型的事件选项卡,该选项卡显示此模型的所有服务事件的列表。
要检查单个模型版本的状态,请单击模型版本选项卡和滚动以查看日志或版本的事件选项卡。
如果需要自定义服务集群,请使用集群设置页上的服务选项卡。
如果需要修改业务集群的内存大小和核数,可以使用实例类型下拉菜单选择所需的集群配置。当你点击保存,将终止现有的集群,并使用指定的设置创建一个新的集群。
属性中的名称和值可添加标记添加标签字段,单击添加.
属性中的一个图标,可编辑或删除现有标记行动的列标签表格
ResolvePackageNotFound:pyspark = 3.1.0
如果模型依赖于pyspark使用Databricks Runtime 8.x进行日志记录。如果看到此错误,请指定pyspark时显式地记录模型,使用“conda_env”参数.
pyspark
未被认可的内容类型参数:格式
此错误可能是新的MLflow 2.0评分协议格式导致的。如果您看到这个错误,您可能使用了过时的评分请求格式。要解决错误,您可以:
更新您的评分请求格式到最新的协议.
如果您的评分请求使用MLflow客户端,例如mlflow.pyfunc.spark_udf (),将MLflow客户端升级到2.0或更高版本以使用最新格式。BOB低频彩了解更多关于更新MLflow 2.0中的MLflow模型评分协议.
mlflow.pyfunc.spark_udf ()
如果您更喜欢使用MLflow 1中的格式。x,adjust your MLflow model’s requirements file to specify an older version of MLflow. For example, change themlflow需求说明符mlflow = = 1.30.0或更低。
mlflow
mlflow = = 1.30.0