注冊表人磚MLflow模型

預覽

這個特性是在公共預覽

人讓你偵聽模型注冊事件所以你的集成可以自動觸發動作。您可以使用人自動化和集成你的機器學習管道與現有CI / CD工具和工作流。例如,您可以觸發CI構建當創建一個新的模型版本或通知你的團隊成員通過鬆弛每次模型過渡到生產要求。

人可以通過磚REST API或Python客戶機databricks-registry-webhooksPyPI

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客戶機示例筆記本

在新標簽頁打開筆記本