Share feature tables across workspaces | Databricks on AWS [2021/12/6時点]の翻訳です。
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
Databricksでは、複数のワークスペースでの特徴量テーブルの共有をサポートしています。例えば、お使いのワークスペースから、集中管理された特徴量ストアの特徴量テーブルに対して特徴量の作成、書き込み、読み込みを行うことができます。これは、異なる開発ステージを取り扱う複数のワークスペースをお持ちのケース、あるいは複数のチームで特徴量テーブルへのアクセスを共有する際に有用です。
集中管理された特徴量ストアに関しては、全ての特徴量ストアのメタデータを格納する単一の専用のワークスペースを作成し、特徴量ストアへのアクセスを必要とするユーザーそれぞれにアカウントを作成することをお勧めします。
チームがワークスペース間でモデルを共有している場合には、特徴量とモデルの両方に対して同じ集中管理の専用ワークスペースを選択することも可能です。
集中管理された特徴量ストアへのアクセスはトークンによって制御されます。アクセスを必要とするユーザー、スクリプトは、集中管理されている特徴量ストアでパーソナルアクセストークンを作成し、ローカルのワークスペースのシークレットマネージャにトークンをコピーします。集中管理された特徴量ストアのワークスペースに送信されるAPIリクエストにはアクセストークンを含める必要があります。Feature Storeクライアントは、ワークスペース間のオペレーションを実行する際に簡単にシークレットを指定することができるシンプルなメカニズムを提供しています。
要件
ワークスペースにまたがる特徴量ストアを使用する際には、以下の要件が必要となります。
- Databricksランタイム10.2 ML以降
- 両方のワークスペースは生の特徴量データへアクセスできる必要があります。両者は同じHiveメタストアを共有し、同じDBFSストレージにアクセスできる必要があります。
- IPアクセスリストが有効化されている場合には、ワークスペースのIPアドレスはアクセスリストに記載されている必要があります。
リモートレジストリに対するAPIトークンのセットアップ
- 特徴量ストアのワークスペースにおいてアクセストークンを作成します。
- ローカルのワークスペースで、アクセストークンとリモートワークスペース情報を格納するためのシークレットを作成します。
- シークレットのスコープを作成します:
databricks secrets create-scope --scope <scope>
- ターゲットのワークスペースのユニークな名称を指定します。ここでは
<prefix>
となります。そして、指定したキー名を用いて3つのシークレットを作成します。-
databricks secrets put --scope <scope> --key <prefix>-host
: 特徴量ストアのワークスペースのホスト名を指定します。例えば、https://cust-success.cloud.databricks.com/
-
databricks secrets put --scope <scope> --key <prefix>-token
: 特徴量ストアワークスペースのアクセストークンを入力します。 -
databricks secrets put --scope <scope> --key <prefix>-workspace-id
: 任意のページで取得可能な特徴量ストアのワークスペースIDを入力します。
-
- シークレットのスコープを作成します:
注意
ワークスペースごとのシークレットスコープの数の制限が存在するので、別のユーザーとシークレットスコープを共有することも可能です。
リモート特徴量ストアの指定
リモート特徴量ストアワークスペース用に作成したシークレットスコープと名前のプレフィクスに基づき、以下のフォーマットで特徴量ストアのURIを構築することができます。
feature_store_uri = f'databricks://<scope>:<prefix>'
そして、FeatureStoreClient
のインスタンスを作成する際に明示的にURIを指定します。
fs = FeatureStoreClient(feature_store_uri=feature_store_uri)
リモート特徴量ストアに特徴量ストアを作成
リモート特徴量ストアの特徴量テーブルを作成するAPIは、使用するDatabricksランタイムバージョンに依存します。
Databricksランタイム10.2 ML以降
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'
)
Databricksランタイム10.1 ML以前
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メソッドに関しては、サンプルノートブックを参照ください。
リモート特徴量ストアから特徴量テーブルを利用
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 Databricks Runtime 10.1 ML and below
fs.get_table() # in Databricks Runtime 10.2 ML and above
fs.write_table()
fs.publish_table()
fs.create_training_set()
リモートモデルレジストリの利用
リモート特徴量ストアのURIを指定することに加え、ワークスペース間でモデルを共有するためにモデルレジストリのURIを指定することも可能です。
モデルのロギングやスコアリングのためにリモートレジストリを指定するために、FeatureStoreClientのインスタンスを作成する際にモデルレジストリのURIを使用することができます。
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>'
)
サンプルノートブック