开始
用户指南
管理指南
参考指南
资源
2023年1月12日更新
给我们反馈
预览
此功能已在公共预览.
本文描述如何创建和管理利用Databricks无服务器实时推断的端点。BOB低频彩了解更多无服务器实时推理.
重要的
API定义和工作流程可能会在公开预览期间发生变化。
如果你依赖水蟒,请查看服务条款附加信息通知。
无服务器实时推断仅适用于MLflow模型注册表中注册的基于python的MLflow模型。您必须在conda环境或需求文件中声明所有模型依赖项。
如果没有已注册的模型,请参阅笔记本的例子用于预打包模型,您可以使用无服务器实时推断端点启动和运行。
您的工作空间必须启用无服务器实时推断。要启用Model services,您必须具备创建集群权限.
如果对模型使用自定义库或来自私有镜像的库,请参见使用无服务器实时推理的自定义Python库在创建模型端点之前。
您可以使用Databricks Machine Learning API或Databricks Machine Learning UI为模型创建无服务器实时推断端点。端点可以为任何在模型注册表中注册的Python MLflow模型提供服务。
您可以使用启用服务API为模型服务创建端点。在下面的例子中,ElasticNet已注册模型的名称。
ElasticNet
文章https:// < databricks-instance > / api / 2.0 /预览/ mlflow / endpoints-v2 /启用{“registered_model_name”:“ElasticNet”}
您启用模型从其服务注册模型页面在Databricks机器学习界面。
单击服务选项卡。如果模型尚未为服务启用,则启用无服务器实时推断按钮出现。
点击启用无服务器实时推断.显示“服务”选项卡状态显示为Pending。几分钟后,状态更改为“就绪”。
启用模型端点后,您可以使用API或UI按需要设置计算配置。如果您需要为您的模型提供额外的资源,则此配置特别有用。工作负载大小和计算配置在为您的模型分配哪些资源方面起着关键作用。BOB低频彩了解更多WorkloadConfigSpec对象.
配置更新的状态可以在config_update_status字段版本状态.
config_update_status
把/预览/ model-serving-api / endpoints-v2 / update-compute-config
在下面的代码中,填充desired_workload_config_spec与WorkloadConfigSpec属性。
desired_workload_config_spec
WorkloadConfigSpec
{“registered_model_name”:“ElasticNet”,“舞台”:“登台|生产”,“desired_workload_config_spec”:{“WorkloadConfigSpec”}}
启用模型端点后,可以在上设置所需的计算配置计算设置选项卡。您可以为登台和生产模型版本设置单独的配置。
您可以从一些工作负载大小中进行选择,自动伸缩将在工作负载大小中自动配置。如果您希望将端点缩小到零,可以选中标题为“缩小到零”的复选框。
要对已部署的模型进行评分,您可以向模型URL发送REST API请求或使用UI。
您应该通过调用其阶段的API来调用模型。例如,如果版本1在生产阶段,它可以使用这个UR得分:
https:// < databricks-instance > / model-endpoint iris-classifier /生产/调用
控件的顶部显示可用模型uri的列表模型版本页上的服务选项卡。
请求应该通过构造一个JSON和一个与输入格式相对应的JSON对象来发送。
根据你的用例,输入JSON有四种格式:
dataframe_splitjson序列化的熊猫数据框架在分裂取向。
dataframe_split
分裂
{“dataframe_split”:{“指数”:[0,1),“列”:[“萼片长度(厘米)”,“萼片宽度(厘米)”,“花瓣长度(厘米)”,花瓣宽度(厘米)),“数据”:[[5.1,3.5,1.4,0.2),[4.9,3.0,1.4,0.2]]}}
dataframe_recordsjson序列化的熊猫数据框架在记录取向。
dataframe_records
记录
请注意
此格式不保证保留列的顺序,并且分裂格式优于记录格式。
{“dataframe_records”:[{“萼片长度(厘米)”:5.1,“萼片宽度(厘米)”:3.5,“花瓣长度(厘米)”:1.4,花瓣宽度(厘米):0.2},{“萼片长度(厘米)”:4.9,“萼片宽度(厘米)”:3.,“花瓣长度(厘米)”:1.4,花瓣宽度(厘米):0.2},{“萼片长度(厘米)”:4.7,“萼片宽度(厘米)”:3.2,“花瓣长度(厘米)”:1.3,花瓣宽度(厘米):0.2}]}
实例是一种基于张量的格式,接受行格式的张量。如果所有输入张量都具有相同的0维,则使用这种格式。从概念上讲,实例列表中的每个张量都可以与列表其余部分中同名的其他张量连接起来,以构造模型的完整输入张量,这只有在所有张量都具有相同的0维时才有可能。
实例
{“实例”:[“一个”,“b”,“c”]}
或
在下面的例子中,有三个维度,所以每个输入张量正好有三个。
{“实例”:[{“t1”:“一个”,“t2”:[1,2,3.,4,5),“t3”:[[1,2),[3.,4),[5,6]]},{“t1”:“b”,“t2”:[6,7,8,9,10),“t3”:[[7,8),[9,10),[11,12]]}]}
输入以柱状格式发送张量查询。这个请求是不同的,因为实际上有不同数量的张量实例t2(3)比t1而且t3,因此不能将此输入表示为实例格式。
输入
t2
t1
t3
{“输入”:{“t1”:[“一个”,“b”),“t2”:[[1,2,3.,4,5),[6,7,8,9,10),[11,12,13,14,15]],“t3”:[[[1,2),[3.,4),[5,6]],[[7,8),[9,10),[11,12]]]}}
来自端点的响应格式如下。模型的输出被包装在一个“预测”键中。
{“预测”:<来自模型>的JSON输出"}
使用UI发送请求是测试模型最简单、最快速的方法。您可以插入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
https:// < databricks-instance > /模型/ iris-classifier /生产/调用
< databricks-instance >
DATABRICKS_API_TOKEN
得分模型接受数据帧记录输入格式。
curl -X POST -u令牌:DATABRICKS_API_TOKEN美元MODEL_VERSION_URI美元\- h“application / json内容类型:\- d{“dataframe_records”:({“sepal_length”:5.1,“sepal_width”:3.5,“petal_length”:1.4,“petal_width”:0.2}]}’
为一个接受张量输入的模型打分。张量输入应该按照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_json=json.转储({“dataframe_records”:数据.to_dict(东方=“记录”)})如果isinstance(数据,pd.DataFrame)其他的create_tf_serving_json(数据)响应=请求.请求(方法=“职位”,头=头,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})),内容={“dataframe_records”:Json.FromValue(数据集)}]))在responseList,predictionList=列表.结合(列表.变换(表格.分裂(数据集,256),(x)= >call_predict(x))),predictionsTable=表格.FromList(predictionList,(x)= >{x},{“预测”}),datasetWithPrediction=表格.加入(表格.AddIndexColumn(predictionsTable,“指数”),“指数”,表格.AddIndexColumn(数据集,“指数”),“指数”)在datasetWithPrediction
用您想要的模型名称命名查询。
打开数据集的高级查询编辑器并应用模型函数。
关于如何用Python模型测试无服务器实时推断端点的示例,请参阅下面的笔记本:
在新标签页打开笔记本
模型版本必须在模型注册表中的Staging或Production中才能提供给端点。
要将一个新的模型版本转换为服务,您可以使用model Registry将您想要服务的模型版本转换到相应的阶段。
下面的代码示例转换了模型的版本2ElasticNet暂存。通过设置archive_existing_versions来真正的,任何现有的模型版本都被存档,这导致Staging URL在准备好提供服务后指向新的模型版本。在新版本准备好之前,Staging端点为旧模型版本提供服务,因此完成转换时没有停机时间。
archive_existing_versions
真正的
POST / mlflow /砖/模型版本/过渡阶段{“名称”:“ElasticNet”,“版本”:“2”,“舞台”:“暂存”,“archive_existing_versions”:真的,“评论”:“将版本1部署到登台端点!”}
您还可以选择在Staging中保留以前的Staging版本。一个模型的多个版本可以处于同一阶段。在此场景中,提供了两个版本,但是Staging URL仅指向最新的的版本。旧版本仍然可以通过其版本URL访问。
如果您想在登台端点后面尝试一个新版本,您可以执行与上面相同的操作,但需要设置archive_existing_versions来假以确保之前的Staging版本不会被存档。
假
POST / mlflow /砖/模型版本/过渡阶段{...“archive_existing_versions”: false,…}
使用Databricks机器学习UI将模型版本转换为登台或生产:
选择模型在侧栏中。
识别并选择要更新的已注册模型。
选择要转换到的模型版本暂存或生产.该链接打开该模型版本的详细信息页面。
使用阶段右上方的下拉菜单,将模型版本转换为登台或生产。
Databricks提供了以下方法来检查端点的状态。BOB低频彩了解更多EndpointStatus对象.
/ / mlflow / endpoints-v2预览/获得状态
{“registered_model_name”:“ElasticNet”}
这将返回EndpointStatus对象属性:
EndpointStatus
{“endpoint_status”:{“EndpointStatus”}}
在用户界面中,您可以从状态指示灯在顶部服务选项卡。
您可以获得已部署的特定端点版本的状态。这让你:
跟踪正在提供的版本。
跟踪这些版本的状态。
验证特定的模型版本是否可以使用。
Databricks提供了两个api来检查端点版本的状态。要检查特定已注册模型的所有端点版本的状态,可以使用ListVersions.BOB低频彩了解更多EndpointVersionStatus对象.
ListVersions
/ / mlflow / endpoints-v2预览/ list-versions
这将返回EndpointVersionStatus对象属性:
EndpointVersionStatus
{“endpoint_statuses”:[“EndpointVersionStatus”]}
或者,如果您已经知道想要了解其状态的特定版本,则可以使用GetVersions.
GetVersions
/ / mlflow / endpoints-v2预览/ get-version-status
{“registered_model_name”:“ElasticNet”,“endpoint_version_name”:“1”}
{“endpoint_status”:{“EndpointVersionStatus”}}
您还可以获取特定阶段的状态。为此,首先需要确定当前服务的端点版本是哪个阶段.要检索该信息,可以使用ListVersionAliases.
ListVersionAliases
/ / mlflow / endpoints-v2预览/ list-version-aliases
这将返回:
{“别名”:[{“别名”:“暂存”,“endpoint_version_name”:“2”},{“别名”:“生产”,“endpoint_version_name”:“1”}]}
从那里,您可以使用上面的方法获得特定端点版本的状态。
在服务选项卡,你可以看到每个端点版本在左边有自己的选项卡。选择每个选项卡时,将显示有关特定版本的详细信息。目前服务于一个阶段的版本可以从暂存或生产在端点版本上标记。
您可以使用API禁用模型服务于model Registry中任何已注册的模型。
要禁用模型服务,请使用禁用服务API:
POST /预览/ mlflow / endpoints-v2 /禁用{“registered_model_name”:“ElasticNet”}
您可以禁用从其服务的模型注册模型页面.
点击禁用服务.
您只能通过UI调试模型端点。
您可以通过在Databricks Machine Learning UI中的端点版本选项卡上查看模型日志来调试和排除端点故障。模型的所有副本的日志合并到所有副本选项卡。
中,除了模型的日志外,还可以查看与模型相关的重要服务事件模型的事件选项卡。
本节包含无服务器实时推理的核心API对象的设计模式和语法。
API定义可能会在公开预览期间发生更改。
WorkloadConfigSpec描述用于为特定阶段扩展计算的配置。
“WorkloadConfigSpec”:{“workload_size_id”:“小|中|大”,“scale_to_zero_enabled”:假}
ComputeConfig表示用于为特定阶段扩展计算的配置以及伴随的元数据。
ComputeConfig
在下面的代码中,填充workload_spec通过替换“WorkloadConfigSpec”属性的前面定义的属性WorkloadConfigSpec对象。
workload_spec
“WorkloadConfigSpec”
“ComputeConfig”:{“舞台”:“登台|生产”,“creation_timestamp”:12345678,“user_id”:“first.last@www.neidfyre.com”,“workload_spec”:{“WorkloadConfigSpec”}}
端点的健康状况反映了是否可以对任何阶段进行评分,或者是否为模型的特定版本生成了资源。
在下面EndpointStatus对象,填充compute_config对象的先前定义的属性ComputeConfig对象和任何其他属性作为数组。
compute_config
“EndpointStatus”:{“registered_model_name”:“ElasticNet”,“状态”:“待准备好| |失败”,“state_message”:“国家信息”,“compute_config”:["作为数组的computecconfig和其他属性"]}
端点版本有一个可以查询的特定URI。URI表示正在提供服务的单一模型版本,其计算由其阶段的计算配置集配置。
在下面EndpointVersionStatus对象,填充两者配置字段,service_status而且config_update_status-通过替换“ComputeConfig”属性的前面定义的属性ComputeConfig对象。
配置
service_status
“ComputeConfig”
“EndpointVersionStatus”:{“registered_model_name”:“ElasticNet”,“endpoint_version_name”:“1”,“service_status”:{“状态”:“SERVICE_STATE_UNKNOWN | SERVICE_STATE_PENDING | SERVICE_STATE_READY | SERVICE_STATE_UNKNOWN”,“消息”:“准备好了”,“配置”:{“ComputeConfig”}},“config_update_status”:{“状态”:“SERVICE_STATE_UNKNOWN | SERVICE_STATE_PENDING | SERVICE_STATE_READY | SERVICE_STATE_UNKNOWN”,“消息”:“等待”,“配置”:{“ComputeConfig”}}}
以下笔记本包括不同的模型,您可以使用它们来启动和运行无服务器实时推断端点。中的说明可以将模型示例导入工作空间导入笔记本电脑.从其中一个示例中选择并创建模型之后,在MLflow模型注册表中注册它,然后跟着UI工作流模型服务步骤。
以下通知适用于使用Anaconda的客户。
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文档.