跨工作區共用模型
重要
Databricks 建議在 Unity
Azure Databricks 支援跨多個工作區共用模型。 例如,您可以在開發工作區中開發和記錄模型,然後存取該模型,並將其與不同生產工作區中的模型進行比較。 當多個團隊共用模型的存取權,或當您的組織有多個工作區來處理不同開發階段時,這非常有用。 針對跨工作區模型開發和部署,Databricks 建議 部署程式碼 方法,where 模型定型程式代碼部署到多個環境。
在多工作區的情況下,您可以使用遠端模型登錄來存取跨 Azure Databricks 工作區的模型。 例如,資料科學家可以使用唯讀存取來存取生產模型登錄,進而將其開發中模型與目前的生產模型進行比較。 範例多工作區 set-up 如下所示。
遠端登錄存取由權杖控制。 每個需要存取權的使用者或指令碼會在遠端登錄中建立個人存取權杖,並將該權杖複製到其本機工作區的祕密管理員中。 傳送至遠端登錄工作區的每個 API 要求都必須包含存取權杖;MLflow 會提供簡單的機制,以指定執行模型登錄作業時要使用的祕密。
注意
作為安全性最佳做法,當您使用自動化工具、系統、指令碼和應用程式進行驗證時,Databricks 建議您使用屬於服務主體的個人存取權杖,而不是工作區使用者。 若要建立服務主體的權杖,請參閱管理服務主體的權杖。
遠端工作區支援模型登錄的所有用戶端和 Fluent API 方法。
需求
跨工作區使用模型登錄需要 MLflow Python 用戶端 1.11.0 或更新版本。
注意
此工作流程是透過 MLflow 用戶端的邏輯實作的。 請確定執行用戶端的環境有存取權,可對包含遠端模型登錄的 Azure Databricks 工作區發出網路要求。 登錄工作區上放置的常見限制是IP允許 list,因此不允許在另一個工作區中叢集中執行的 MLflow 用戶端 connections。
Set 設定用於遠端註冊表的 API 令牌
- 在模型登錄工作區中,建立存取權杖。
- 在本機工作區中,建立祕密來儲存存取權杖和遠端工作區資訊:
- 建立祕密範圍:
databricks secrets create-scope <scope>
。 - 為目標工作區挑選唯一名稱,如
<prefix>
所示。 然後,建立三個祕密:-
databricks secrets put-secret <scope> <prefix>-host
:輸入模型登錄工作區的主機名稱。 例如,https://westus.azuredatabricks.net/
或https://adb-5555555555555555.19.azuredatabricks.net/
。 -
databricks secrets put-secret <scope> <prefix>-token
:從模型登錄工作區輸入存取權杖。 -
databricks secrets put-secret <scope> <prefix>-workspace-id
:輸入模型登錄工作區的工作區 ID,可在任何頁面的 URL 中找到。
-
- 建立祕密範圍:
注意
您可能會想要
指定遠端登錄
根據您為遠端登錄工作區建立的祕密範圍和名稱前置詞,您可以建構表單的登錄 URI:
registry_uri = f'databricks://<scope>:<prefix>'
您可以先呼叫下列命令,接著使用 URI 來指定 Fluent API 方法的遠端登錄:
mlflow.set_registry_uri(registry_uri)
或者,您可以在具現化 MlflowClient
時明確指定:
client = MlflowClient(registry_uri=registry_uri)
下列工作流程顯示了這兩種方法的範例。
在遠端登錄中註冊模型
註冊模型的方法之一是使用 mlflow.register_model
API:
mlflow.set_registry_uri(registry_uri)
mlflow.register_model(model_uri=f'runs:/<run-id>/<artifact-path>', name=model_name)
您可以在此頁面結尾的筆記本中找到其他模型註冊方法的範例。
注意
在遠端工作區中註冊模型,即會在遠端工作區的 DBFS 中複製模型成品的暫存複本。 一旦模型版本處於 READY
狀態,您可能會想要刪除此拷貝。 您可以在 /dbfs/databricks/mlflow/tmp-external-source/<run-id>
資料夾下找到暫存盤。
您也可以指定 tracking_uri
,以類似的方式 registry_uri
,指向另一個工作區中的 MLflow 追蹤服務。 這表示您可以在遠端工作區上執行,並在目前或另一個遠端工作區中註冊其模型。
從遠端登錄使用模型
您可以先設定登錄 URI,然後透過 mlflow.<flavor>.load_model
方法,在遠端登錄中載入和使用模型版本:
mlflow.set_registry_uri(registry_uri)
model = mlflow.pyfunc.load_model(f'models:/<model-name>/Staging')
model.predict(...)
或者,您可以在 models:/
URI 中明確指定遠端登錄:
model = mlflow.pyfunc.load_model(f'models://<scope>:<prefix>@databricks/<model-name>/Staging')
model.predict(...)
您也可以支援其他用來存取模型檔案的協助程式方法,例如:
client.get_latest_versions(model_name)
client.get_model_version_download_uri(model_name, version)
在遠端登錄中管理模型
只要您擁有必要權限,您就可以對遠端登錄中的模型執行任何動作。 例如,如果您有模型的 CAN MANAGE 權限,您可以使用 MlflowClient
方法來轉換模型版本階段或刪除模型:
client = MlflowClient(tracking_uri=None, registry_uri=registry_uri)
client.transition_model_version_stage(model_name, version, 'Archived')
client.delete_registered_model(model_name)
筆記本範例:遠端模型登錄
以下筆記本適用於未啟用 Unity Catalog的工作區。 其會示範如何從目前的工作區將模型記錄至 MLflow 追蹤伺服器,並將模型註冊到不同工作區中的模型登錄。 Databricks 建議在 Unity