跨工作區共用功能資料表(舊版)
重要
- 此文件已淘汰,可能無法更新。
- Databricks 建議使用 Unity 目錄的功能工程,跨工作區共用功能資料表。 本文的方法已被取代。
Azure Databricks 支援跨多個工作區共用功能資料表。 例如,您可以從自己的工作區建立、寫入或讀取集中式功能存放區的功能資料表。 當多個團隊共用功能資料表的存取權,或當您的組織有多個工作區來處理不同開發階段時,這非常有用。
針對集中式功能存放區,Databricks 建議您指定單一工作區來儲存所有功能存放區中繼資料,並為需要存取功能存放區的每個使用者建立帳戶。
如果您的團隊也在跨工作區共用模型,您可以選擇為功能資料表及模型指定相同的集中式工作區,也可以為每個工作區指定不同的集中式工作區。
集中式功能存放區的存取是由權杖所控制。 每個需要存取權的使用者或指令碼都會在集中式功能存放區建立個人存取權杖,並將該權杖複製到其本機工作區的祕密管理員。 傳送至集中式功能存放區工作區的每個 API 要求都必須包含存取權杖;功能存放區用戶端提供簡單的機制,指定執行跨工作區作業時要使用的祕密。
注意
作為安全性最佳做法,當您使用自動化工具、系統、指令碼和應用程式進行驗證時,Databricks 建議您使用屬於服務主體的個人存取權杖,而不是工作區使用者。 若要建立服務主體權杖,請參閱管理服務主體的權杖。
需求
跨工作區使用功能存放區需要:
- Feature Store 用戶端 v0.3.6 和更新版本。
- 這兩個工作區都必須能夠存取原始功能資料。 它們必須共用相同的外部 Hive 中繼存放區,而且可以存取相同的 DBFS 記憶體。
- 如果已啟用 IP 存取清單,工作區 IP 位址必須位於存取清單。
設定遠端登錄的 API 權杖
在本節,「工作區 B」是指集中式或遠端功能存放區工作區。
- 在工作區 B,建立存取權杖。
- 在本機工作區,建立秘密來儲存存取權杖及工作區 B 的相關資訊:
- 建立祕密範圍:
databricks secrets create-scope --scope <scope>
。 - 為工作區 B 挑選唯一識別碼,如下所示
<prefix>
。 然後使用指定金鑰名稱建立三個秘密:databricks secrets put --scope <scope> --key <prefix>-host
:輸入工作區 B 的主機名稱。使用下列 Python 命令來取得工作區的主機名稱:import mlflow host_url = mlflow.utils.databricks_utils.get_webapp_url() host_url
databricks secrets put --scope <scope> --key <prefix>-token
:從工作區 B 輸入存取權杖。databricks secrets put --scope <scope> --key <prefix>-workspace-id
:輸入工作區 B 的工作區識別碼,可在任何頁面的 URL 找到。
- 建立祕密範圍:
注意
您可能想要與其他用戶共用秘密範圍,因為每個工作區的秘密範圍數目有所限制。
指定遠端功能存放區
根據您為遠端功能存放區工作區建立的秘密範圍及名稱前置詞,您可以建構表單的功能存放區 URI:
feature_store_uri = f'databricks://<scope>:<prefix>'
然後,當您具現化FeatureStoreClient
時明確指定 URI:
fs = FeatureStoreClient(feature_store_uri=feature_store_uri)
在共用 DBFS 位置建立功能資料表的資料庫
在遠端功能存放區建立功能資料表之前,您必須先建立資料庫來儲存它們。 資料庫必須存在於共用 DBFS 位置。
例如,若要在/mnt/shared
共用位置recommender
建立資料庫,請使用下列命令:
%sql CREATE DATABASE IF NOT EXISTS recommender LOCATION '/mnt/shared'
在遠端功能存放區建立功能資料表
在遠端功能存放區建立功能資料表的 API 取決於您所使用的 Databricks 執行階段版本。
V0.3.6 及以上
使用 FeatureStoreClient.create_table
API:
fs = FeatureStoreClient(feature_store_uri=f'databricks://<scope>:<prefix>')
fs.create_table(
name='recommender.customer_features',
primary_keys='customer_id',
schema=customer_features_df.schema,
description='Customer-keyed features'
)
V0.3.5 及以下
使用 FeatureStoreClient.create_feature_table
API:
fs = FeatureStoreClient(feature_store_uri=f'databricks://<scope>:<prefix>')
fs.create_feature_table(
name='recommender.customer_features',
keys='customer_id',
schema=customer_features_df.schema,
description='Customer-keyed features'
)
如需其他功能存放區方法的範例,請參閱筆記本範例:跨工作區共用功能資料表。
從遠端功能存放區使用功能資料表
您可以先設定 feature_store_uri
,以 FeatureStoreClient.read_table
方法讀取遠端功能存放區的功能資料表:
fs = FeatureStoreClient(feature_store_uri=f'databricks://<scope>:<prefix>')
customer_features_df = fs.read_table(
name='recommender.customer_features',
)
也支援存取功能資料表的其他輔助方法:
fs.read_table()
fs.get_feature_table() # in v0.3.5 and below
fs.get_table() # in v0.3.6 and above
fs.write_table()
fs.publish_table()
fs.create_training_set()
使用遠端模型登錄
除了指定遠端功能存放區 URI 之外,您也可以指定遠端模型登錄 URI,以 跨工作區共用模型。
若要指定用於模型記錄或評分的遠端模型登錄,您可以使用模型登錄 URI 來具現化 FeatureStoreClient。
fs = FeatureStoreClient(model_registry_uri=f'databricks://<scope>:<prefix>')
customer_features_df = fs.log_model(
model,
"recommendation_model",
flavor=mlflow.sklearn,
training_set=training_set,
registered_model_name="recommendation_model"
)
使用 feature_store_uri
及 model_registry_uri
,您可以使用任何本機或遠端功能資料表來訓練模型,然後在任何本機或遠端模型登錄註冊模型。
fs = FeatureStoreClient(
feature_store_uri=f'databricks://<scope>:<prefix>',
model_registry_uri=f'databricks://<scope>:<prefix>'
)
筆記本範例:跨工作區共用功能資料表
下列筆記本示範如何使用集中式功能存放區。