注册表人砖MLflow模型

预览

这个特性是在公共预览

人让你侦听模型注册事件所以你的集成可以自动触发动作。您可以使用人自动化和集成你的机器学习管道与现有CI / CD工具和工作流。例如,您可以触发CI构建当创建一个新的模型版本或通知你的团队成员通过松弛每次模型过渡到生产要求。

人可以通过砖REST API或Python客户机databricks-registry-webhooksPyPI

请注意

人没有当你使用模型统一目录。一种替代方法,看到我可以在事件触发webhook-like操作吗?

Webhook事件

你可以指定一个webhook触发一个或多个事件:

  • MODEL_VERSION_CREATED:创建一个新的模型版本相关的模型。

  • MODEL_VERSION_TRANSITIONED_STAGE:一个模型版本的阶段了。

  • TRANSITION_REQUEST_CREATED:用户请求一个模型版本的阶段转变。

  • COMMENT_CREATED:用户写了评论注册模型。

  • REGISTERED_MODEL_CREATED:创建一个新的注册模型。这个事件类型只能为registry-wide webhook指定,可由不指定型号名称创建请求。

  • MODEL_VERSION_TAG_SET对模型:用户设置一个标记版本。

  • MODEL_VERSION_TRANSITIONED_TO_STAGING版本:一个模型转换到登台。

  • MODEL_VERSION_TRANSITIONED_TO_PRODUCTION版本:一个模型转换到生产。

  • MODEL_VERSION_TRANSITIONED_TO_ARCHIVED:一个模型版本存档。

  • TRANSITION_REQUEST_TO_STAGING_CREATED:一个用户请求被转换到分段模型版本。

  • TRANSITION_REQUEST_TO_PRODUCTION_CREATED:用户请求一个模型转换到生产版本。

  • TRANSITION_REQUEST_TO_ARCHIVED_CREATED:用户请求一个模型版本存档。

类型的人

有两种类型的人则基于触发目标:

  • 人与HTTP端点(HTTP注册表人):发送触发一个HTTP端点。

  • 人与工作触发器(注册表人)工作:触发一个工作在一个砖工作区。如果启用了IP allowlisting工作的工作空间,你必须allowlist工作区IPs模型的注册表。看到IP allowlisting注册表人的工作为更多的信息。

也有两种类型的人根据他们的范围,不同的访问控制要求:

  • 模型相关的人:webhook适用于特定的注册模型。你必须有可以管理注册的权限模型创建、修改、删除,或测试模型相关的人。

  • Registry-wide人:webhook引发任何事件注册模型在工作区中,包括创建一个新的注册模型。创建一个registry-wide webhook,省略了model_name字段创建。你必须有工作空间管理权限来创建、修改、删除,或测试registry-wide人。

Webhook载荷

每个事件触发在负载最小的领域包括了即将离任的请求webhook端点。

  • 敏感的信息,如工件路径位置排除在外。用户和主体以适当的acl可以使用客户端或REST api查询模型注册表信息。

  • 有效载荷不加密。看到安全信息如何验证砖webhook的来源。

  • 文本领域促进松弛集成。发出一个松弛的信息,提供一个松弛webhook webhook URL端点。

注册webhook工作负载

负载工作注册webhook取决于类型的工作,发送到工作/运行端点在目标工作区。

单一任务的工作

单一任务的工作有三个基于任务类型的有效载荷之一。

笔记本和Python轮工作

笔记本和Python字典轮工作有一个JSON载荷参数,其中包含一个字段event_message

{“job_id”:1234567890,“notebook_params”:{“event_message”:“< Webhook载荷>”}}
Python、JAR和火花提交工作

Python、JAR和火花提交工作一个JSON载荷参数列表。

{“job_id”:1234567890,“python_params”:(“< Webhook载荷>”]}
所有其他工作

所有其他类型的工作有一个JSON载荷不带参数。

{“job_id”:1234567890}

多任务工作

多任务工作有一个JSON载荷占所有参数填充不同的任务类型。

{“job_id”:1234567890,“notebook_params”:{“event_message”:“< Webhook载荷>”},“python_named_params”:{“event_message”:“< Webhook载荷>”},“jar_params”:(“< Webhook载荷>”),“python_params”:(“< Webhook载荷>”),“spark_submit_params”:(“< Webhook载荷>”]}

例子有效载荷

事件:MODEL_VERSION_TRANSITIONED_STAGE

响应

帖子/你的/端点//事件/模型- - - - - -版本/阶段- - - - - -过渡- - -数据{“事件”:“MODEL_VERSION_TRANSITIONED_STAGE”,“webhook_id”:“c5596721253c4b429368cf6f4341b88a”,“event_timestamp”:1589859029343,“model_name”:“Airline_Delay_SparkML”,“版本”:“8”,“to_stage”:“生产”,“from_stage”:“没有”,“文本”:“注册模型someModel version 8从没有生产。”}

事件:MODEL_VERSION_TAG_SET

响应

帖子/你的/端点//事件/模型- - - - - -版本/标签- - - - - -- - -数据{“事件”:“MODEL_VERSION_TAG_SET”,“webhook_id”:“8 d7fc634e624474f9bbfde960fdf354c”,“event_timestamp”:1589859029343,“model_name”:“Airline_Delay_SparkML”,“版本”:“8”,“标签”:[{“关键”:“key1”,“价值”:“value1”},{“关键”:“key2”,“价值”:“value2”}),“文本”:“example@yourdomain.com版本标记(s)“key1”= >“value1’,‘key2 = >“value2”注册模型someModel version 8。”}

事件:COMMENT_CREATED

响应

帖子/你的/端点//事件/评论/创建- - -数据{“事件”:“COMMENT_CREATED”,“webhook_id”:“8 d7fc634e624474f9bbfde960fdf354c”,“event_timestamp”:1589859029343,“model_name”:“Airline_Delay_SparkML”,“版本”:“8”,“评论”:“原始文本内容的评论”,“文本”:“注册用户评论模式someModel version 8。”}

安全

为了安全,砖包括X-Databricks-Signature头计算从有效负载和共享密钥与webhook使用有关HMAC sha - 256的算法

此外,您可以包括一个标准的授权在即将离任的请求通过指定一个标题HttpUrlSpecwebhook。

客户端验证

如果设置了一个共享的秘密,载荷收件人应该验证HTTP请求的来源通过使用共享密钥HMAC-encode负载,然后比较编码值X-Databricks-Signature的头。这是特别重要的,如果SSL证书验证是禁用的(也就是说,如果enable_ssl_verification字段被设置为)。

请注意

enable_ssl_verification真正的默认情况下。自签名证书,这一领域必须,目标服务器必须禁用验证证书。

为了安全目的,砖建议你执行秘密验证HMAC-encoded部分负载。如果你禁用主机名验证,增加的风险可以恶意请求路由到一个意想不到的主机。

进口hmac进口hashlib进口json秘密=shared_secret编码(“utf - 8”)signature_key=“X-Databricks-Signature”defvalidate_signature(请求):如果请求has_key(signature_key):提高异常(“没有X-Signature。Webhook不可信。”)x_sig=请求得到(signature_key)身体=请求身体编码(“utf - 8”)h=hmac(秘密,身体,hashlibsha256)computed_sig=hhexdigest()如果hmaccompare_digest(computed_sig,x_sig编码()):提高异常(“X-Signature不匹配。Webhook不可信。”)

授权为HTTP头注册表人

如果设置了一个授权头,客户应该验证HTTP请求的来源通过验证持票人牌或授权证书的授权头。

IP allowlisting注册表人的工作

使用webhook触发器工作运行在一个不同的工作空间,IP allowlisting启用,你必须allowlist该地区NAT IP webhook所在地接受传入的请求。

如果webhook和工作在同一个工作区,您不需要添加任何allowlist IPs。

请联系您的账户团队识别IPs需要allowlist。

审计日志记录

如果启用了审计日志记录对你的工作区,以下事件被包括在审计日志:

  • 创建webhook

  • 更新webhook

  • webhook列表

  • 删除webhook

  • 测试webhook

  • Webhook触发

Webhook引发审计日志记录

对于HTTP端点的人,HTTP请求发送到指定的URL webhook URL和enable_ssl_verification值记录。

人与工作引发的job_idworkspace_url值记录。

例子

本部分包括:

HTTP注册webhook工作流示例

1。创建一个webhook

当一个HTTPS端点准备接收webhook事件请求,您可以创建一个使用人数据砖webhook REST API。例如,webhook的URL可以松弛发布消息通道。

curl - x美元POST - h“授权:无记名<访问令牌>”- d\”{model_name”:“<模型名称>”,“事件”(“MODEL_VERSION_CREATED”):,“描述”:“松弛的通知”,“状态”:“TEST_MODE”," http_url_spec ": {“url”:“https://hooks.slack.com/services/..”。“秘密”:“anyRandomString”“授权”:“不记名AbcdEfg1294”}}’https:// < databricks-instance > / api / 2.0 / mlflow / registry-webhooks /创建
databricks_registry_webhooks进口RegistryWebhooksClient,HttpUrlSpechttp_url_spec=HttpUrlSpec(url=“https://hooks.slack.com/services/..”。,秘密=“secret_string”,授权=“不记名AbcdEfg1294”)http_webhook=RegistryWebhooksClient()create_webhook(model_name=“<模型名称>”,事件=(“MODEL_VERSION_CREATED”),http_url_spec=http_url_spec,描述=“松弛的通知”,状态=“TEST_MODE”)

响应

{“webhook”:{“id”:“1234567890”,“creation_timestamp”:1571440826026,“last_updated_timestamp”:1582768296651,“状态”:“TEST_MODE”,“事件”:【“MODEL_VERSION_CREATED”),“http_url_spec”:{“url”:“https://hooks.slack.com/services/..”。,“enable_ssl_verification”:真正的}}}

您还可以创建一个HTTP注册webhook与砖起程拓殖的提供者databricks_mlflow_webhook

2。测试webhook

前面的webhook成立于TEST_MODE,所以模拟事件可以触发发送一个请求到指定的URL。然而,webhook不触发一个真实事件。测试端点返回状态码和身体收到指定的URL。

curl - x美元POST - h“授权:无记名<访问令牌>”- d\”{" id ":“1234567890”}’\https:// < databricks-instance > / api / 2.0 / mlflow / registry-webhooks /测试
databricks_registry_webhooks进口RegistryWebhooksClienthttp_webhook=RegistryWebhooksClient()test_webhook(id=“1234567890”)

响应

{“状态”:200年,“身体”:“OK”}

3所示。更新webhook活跃状态

为真实事件使webhook,设置其地位活跃的通过一个更新调用,也可以用来改变它的任何其他属性。

curl - x美元补丁- h“授权:无记名<访问令牌>”- d\" {" id ":“1234567890”,“状态”:“活跃”}”\https:// < databricks-instance > / api / 2.0 / mlflow / registry-webhooks /更新
databricks_registry_webhooks进口RegistryWebhooksClienthttp_webhook=RegistryWebhooksClient()update_webhook(id=“1234567890”,状态=“活跃”)

响应

{“webhook”:{“id”:“1234567890”,“creation_timestamp”:1571440826026,“last_updated_timestamp”:1582768296651,“状态”:“活跃”,“事件”:【“MODEL_VERSION_CREATED”),“http_url_spec”:{“url”:“https://hooks.slack.com/services/..”。,“enable_ssl_verification”:真正的}}}

4所示。删除webhook

禁用webhook,设置它的地位禁用使用类似的更新命令(如上所述),或删除它。

curl - x美元删除- h“授权:无记名<访问令牌>”- d\”{" id ":“1234567890”}’\https:// < databricks-instance > / api / 2.0 / mlflow / registry-webhooks /删除
databricks_registry_webhooks进口RegistryWebhooksClienthttp_webhook=RegistryWebhooksClient()delete_webhook(id=“1234567890”)

响应

{}

工作注册webhook工作流示例

工作流管理的工作登记人则类似于HTTP注册表人,唯一不同的是job_spec领域取代了http_url_spec字段。

人,你可以触发工作在同一个工作区或在一个不同的工作空间。使用可选参数。指定的工作区workspace_url。如果没有workspace_url存在,默认行为是引发webhook工作在同一个工作区。

需求

请注意

安全最佳实践,当您使用自动化工具进行身份验证,系统中,脚本和应用程序,砖属于建议您使用个人访问令牌服务主体而不是用户工作区。为服务主体,创建令牌服务主体的管理令牌

注册表webhook创建一个工作

curl - x美元POST - h“授权:无记名<访问令牌>”- d\”{model_name”:“<模型名称>”,“事件”(“TRANSITION_REQUEST_CREATED”):,“描述”:“工作webhook触发”,“状态”:“TEST_MODE”," job_spec ": {“job_id”:“1”,“workspace_url”:“https://my-databricks-workspace.com”,:“access_token dapi12345…”}}’https:// < databricks-instance > / api / 2.0 / mlflow / registry-webhooks /创建
databricks_registry_webhooks进口RegistryWebhooksClient,JobSpecjob_spec=JobSpec(job_id=“1”,workspace_url=“https://my-databricks-workspace.com”,access_token=“dapi12345……”)job_webhook=RegistryWebhooksClient()create_webhook(model_name=“<模型名称>”,事件=(“TRANSITION_REQUEST_CREATED”),job_spec=job_spec,描述=“webhook触发工作”,状态=“TEST_MODE”)

响应

{“webhook”:{“id”:“1234567891”,“creation_timestamp”:1591440826026,“last_updated_timestamp”:1591440826026,“状态”:“TEST_MODE”,“事件”:【“TRANSITION_REQUEST_CREATED”),“job_spec”:{“job_id”:“1”,“workspace_url”:“https://my-databricks-workspace.com”}}}

您还可以创建注册表webhook与工作砖起程拓殖的提供者databricks_mlflow_webhook

列表中注册表人的例子

美元curl - x - h“授权:无记名<访问令牌>”- d\”{model_name”:“<模型名称>”}”https:// < databricks-instance > / api / 2.0 / mlflow / registry-webhooks /列表
databricks_registry_webhooks进口RegistryWebhooksClientwebhooks_list=RegistryWebhooksClient()list_webhooks(model_name=“<模型名称>”)

响应

{“人”:[{“id”:“1234567890”,“creation_timestamp”:1571440826026,“last_updated_timestamp”:1582768296651,“状态”:“活跃”,“事件”:【“MODEL_VERSION_CREATED”),“http_url_spec”:{“url”:“https://hooks.slack.com/services/..”。,“enable_ssl_verification”:真正的}},{“id”:“1234567891”,“creation_timestamp”:1591440826026,“last_updated_timestamp”:1591440826026,“状态”:“TEST_MODE”,“事件”:【“TRANSITION_REQUEST_CREATED”),“job_spec”:{“job_id”:“1”,“workspace_url”:“https://my-databricks-workspace.com”}})}

笔记本电脑

MLflow模型注册表人REST API示例笔记本

在新标签页打开笔记本

MLflow模型注册表人Python客户机示例笔记本

在新标签页打开笔记本