注册表人砖MLflow模型
预览
这个特性是在公共预览。
人让你侦听模型注册事件所以你的集成可以自动触发动作。您可以使用人自动化和集成你的机器学习管道与现有CI / CD工具和工作流。例如,您可以触发CI构建当创建一个新的模型版本或通知你的团队成员通过松弛每次模型过渡到生产要求。
人可以通过砖REST API或Python客户机databricks-registry-webhooks
在PyPI。
请注意
人没有当你使用模型统一目录。一种替代方法,看到我可以在事件触发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取决于类型的工作,发送到工作/运行
端点在目标工作区。
例子有效载荷
事件: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。”}
安全
为了安全,砖包括X-Databricks-Signature头计算从有效负载和共享密钥与webhook使用有关HMAC sha - 256的算法。
此外,您可以包括一个标准的授权在即将离任的请求通过指定一个标题HttpUrlSpec
webhook。
客户端验证
如果设置了一个共享的秘密,载荷收件人应该验证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。新(秘密,身体,hashlib。sha256)computed_sig=h。hexdigest()如果不hmac。compare_digest(computed_sig,x_sig。编码()):提高异常(“X-Signature不匹配。Webhook不可信。”)
IP allowlisting注册表人的工作
使用webhook触发器工作运行在一个不同的工作空间,IP allowlisting启用,你必须allowlist该地区NAT IP webhook所在地接受传入的请求。
如果webhook和工作在同一个工作区,您不需要添加任何allowlist IPs。
请联系您的账户团队识别IPs需要allowlist。
例子
本部分包括:
两个例如笔记本电脑:一个说明REST API,说明一个Python客户机。
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”}})}