ワークスペース間で特徴テーブルを共有する (レガシ)
重要
- このドキュメントは廃止され、更新されない可能性があります。
- Databricks では、Unity Catalog で特徴エンジニアリングを使って、ワークスペース間で特徴量テーブルを共有することが推奨されています。 この記事へのアプローチは非推奨となっています。
Azure Databricks では、複数のワークスペース間でのモデルの共有がサポートされています。 たとえば、独自のワークスペースから、一元化された機能ストアの機能テーブルを作成、書き込み、または読み取ることができます。 これは、複数のチームが機能テーブルにアクセスする場合や、組織に複数のワークスペースがあり、開発のさまざまな段階を処理する場合に便利です。
一元化された機能ストアの場合、Databricks は、すべての機能ストア メタデータを格納するための 1 つのワークスペースを指定し、機能ストアへのアクセスを必要とするユーザーごとにアカウントを作成することをお勧めします。
チームがワークスペース間でモデルを共有している場合は、機能テーブルとモデルの両方に同じ一元化されたワークスペースを使用したり、それぞれに異なる集中ワークスペースを指定したりすることもできます。
一元化された機能ストアへのアクセスは、トークンによって制御されます。 アクセスを必要とする各ユーザーまたはスクリプトは、一元化された機能ストアに個人用アクセストークンを作成し、そのトークンをローカルワークスペースのシークレット マネージャーにコピーします。 一元化された機能ストア ワークスペースに送信される各 API 要求には、アクセス トークンが含まれている必要があります。Feature Store クライアントには、ワークスペース間の操作を実行するときに使用するシークレットを指定するための単純なメカニズムが用意されています。
注意
セキュリティのベスト プラクティスとして、自動化ツール、システム、スクリプト、アプリを使用して認証する場合、Databricks では、ワークスペース ユーザーではなくサービス プリンシパルに属する個人用アクセス トークンを使用することを推奨しています。 サービス プリンシパルのトークンを作成するには、「サービス プリンシパルのトークンを管理する」をご覧ください。
必要条件
ワークスペース間で機能ストアを使用するには、次のものが必要です。
- Feature Store クライアント v0.3.6 以降。
- 両方のワークスペースには、生の機能データへのアクセス権が必要です。 同じ外部の Hive メタストアを共有し、同じ 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 コマンドを使用して、ワークスペースのホスト名を取得します。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 のワークスペース ID を入力します。これは、すべてのページの 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 メソッドの例については、「ノートブックの例: ワークスペース間で特徴テーブルを共有する」をご覧ください。
リモート機能ストアの機能テーブルを使用する
FeatureStoreClient.read_table
メソッドを使用してリモート機能ストアの機能テーブルを読み取るには、まず feature_store_uri
を設定します。
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>'
)
ノートブックの例: ワークスペース間で機能テーブルを共有する
次のノートブックでは、一元化された機能ストアの操作方法を示します。