Identify 特徴量テーブル across workspace (legacy)
- このドキュメントは廃止されており、更新されない可能性があります。
- Databricks では、Unity Catalogでの特徴量エンジニアリングを使用して、ワークスペース間で特徴量テーブルを共有することをお勧めします。この記事のアプローチは非推奨です。
Databricks では、複数のワークスペース間での特徴量テーブルの共有がサポートされています。 たとえば、独自のワークスペースから、一元化された Feature Storeの特徴量テーブルを作成、書き込み、または読み取ることができます。 これは、複数のチームが特徴量テーブルへのアクセスを共有する場合や、組織に開発のさまざまな段階を処理するための複数のワークスペースがある場合に便利です。
一元化された機能ストアの場合、Databricks では、すべての機能ストアのメタデータを格納する 1 つのワークスペースを指定し、機能ストアにアクセスする必要があるユーザーごとにアカウントを作成することをお勧めします。
チームが ワークスペース間でモデルを共有している場合は、特徴量テーブルとモデルの両方に同じ集中ワークスペースを割り当てるか、それぞれに異なる集中ワークスペースを指定することもできます。
一元化された機能ストアへのアクセスは、トークンによって制御されます。 アクセスが必要な各ユーザーまたはスクリプトは、一元化された機能ストアに 個人用アクセス トークンを作成し 、そのトークンをローカル ワークスペースのシークレット マネージャーにコピーします。 一元化されたフィーチャーストアワークスペースに送信される各APIリクエストには、アクセストークンが含まれている必要があります。Feature Store クライアントは、クロスワークスペース操作を実行するときに使用するシークレットを指定する簡単なメカニズムを提供します。
自動化されたツール、システム、スクリプト、アプリで認証する際のセキュリティのベストプラクティスとして、Databricks では OAuth トークンを使用することをお勧めします。
personal access token authentication を使用する場合、 Databricks では、ワークスペース ユーザーではなく 、サービスプリンシパル に属する personal access token を使用することをお勧めします。 サービスプリンシパルのトークンを作成するには、「 サービスプリンシパルのトークンの管理」を参照してください。
必要条件
ワークスペース間でフィーチャーストアを使用するには、次のものが必要です。
- Feature Store クライアント v0.3.6 以降。
- 両方のワークスペースが生の特徴データにアクセスできる必要があります。 同じ 外部 Hive metastore を共有し、同じ DBFS ストレージにアクセスできる必要があります。
- IP アクセスリストが有効になっている場合は、ワークスペースの IP アドレスがアクセスリストに含まれている必要があります。
リモートレジストリの API トークンを設定する
このセクションでは、「ワークスペース B」は、集中型またはリモートのフィーチャー ストア ワークスペースを指します。
-
ワークスペース B で、 アクセス トークンを作成します。
-
ローカル ワークスペースで、アクセス トークンを格納するシークレットとワークスペース B に関する情報 を作成します 。
-
シークレットスコープを作成します:
databricks secrets create-scope --scope <scope>
。 -
ワークスペース B の一意の識別子を選択します(ここでは
<prefix>
と表示されています)。 次に、指定したキー名で 3 つのシークレット を作成します 。databricks secrets put --scope <scope> --key <prefix>-host
: ワークスペース B のホスト名を入力します。次の Python コマンドを使用して、ワークスペースのホスト名を取得します。
Pythonimport 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
: 任意のページの URL にある ワークスペース B のワークスペース ID を入力します。
-
ワークスペースあたりのシークレットスコープの数には制限 があるため、シークレットスコープ を他のユーザーと共有したい場合があります。
リモート フィーチャ ストアの指定
リモート機能ストアワークスペース用に作成したシークレットスコープと名前プレフィックスに基づいて、次の形式の機能ストアURIを構築できます。
feature_store_uri = f'databricks://<scope>:<prefix>'
次に、 FeatureStoreClient
をインスタンス化するときに URI を明示的に指定します。
fs = FeatureStoreClient(feature_store_uri=feature_store_uri)
共有 DBFS 場所に特徴量テーブルのデータベースを作成します
リモート Feature Storeに特徴量テーブルを作成する前に、特徴量テーブルを格納するデータベースを作成する必要があります。 データベースは、共有 DBFS の場所に存在している必要があります。
たとえば、共有ロケーション/mnt/shared
にデータベースrecommender
を作成するには、次のコマンドを使用します。
%sql CREATE DATABASE IF NOT EXISTS recommender LOCATION '/mnt/shared'
リモート特徴量テーブルをリモート特徴量ストアに作成する
リモート Feature Store に特徴量テーブルを作成する API は、使用している Databricks ランタイムのバージョンによって異なります。
- V0.3.6 and above
- V0.3.5 and below
Use the 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'
)
Use the 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 の特徴量テーブルを読み取るには、最初に 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>'
)
ノートブック example: Share 特徴量テーブル across ワークスペース
次のノートブックは、一元化された機能ストアを操作する方法を示しています。