ワークスペース間で特徴テーブルを共有する (レガシ)

重要

  • このドキュメントは廃止され、更新されない可能性があります。
  • Databricks では、Unity Catalog で特徴エンジニアリングを使って、ワークスペース間で特徴量テーブルを共有することが推奨されています。 この記事へのアプローチは非推奨となっています。

Azure Databricks では、複数のワークスペース間でのモデルの共有がサポートされています。 たとえば、独自のワークスペースから、一元化された機能ストアの機能テーブルを作成、書き込み、または読み取ることができます。 これは、複数のチームが機能テーブルにアクセスする場合や、組織に複数のワークスペースがあり、開発のさまざまな段階を処理する場合に便利です。

一元化された機能ストアの場合、Databricks は、すべての機能ストア メタデータを格納するための 1 つのワークスペースを指定し、機能ストアへのアクセスを必要とするユーザーごとにアカウントを作成することをお勧めします。

チームがワークスペース間でモデルを共有している場合は、機能テーブルとモデルの両方に同じ一元化されたワークスペースを使用したり、それぞれに異なる集中ワークスペースを指定したりすることもできます。

複数の機能ストア ワークスペース

一元化された機能ストアへのアクセスは、トークンによって制御されます。 アクセスを必要とする各ユーザーまたはスクリプトは、一元化された機能ストアに個人用アクセストークンを作成し、そのトークンをローカルワークスペースのシークレット マネージャーにコピーします。 一元化された機能ストア ワークスペースに送信される各 API 要求には、アクセス トークンが含まれている必要があります。Feature Store クライアントには、ワークスペース間の操作を実行するときに使用するシークレットを指定するための単純なメカニズムが用意されています。

注意

セキュリティのベスト プラクティスとして、自動化ツール、システム、スクリプト、アプリを使用して認証する場合、Databricks では、ワークスペース ユーザーではなくサービス プリンシパルに属する個人用アクセス トークンを使用することを推奨しています。 サービス プリンシパルのトークンを作成するには、「サービス プリンシパルのトークンを管理する」をご覧ください。

必要条件

ワークスペース間で機能ストアを使用するには、次のものが必要です。

  • Feature Store クライアント v0.3.6 以降。
  • 両方のワークスペースには、生の機能データへのアクセス権が必要です。 同じ外部の Hive メタストアを共有し、同じ DBFS ストレージにアクセスできる必要があります。
  • IP アクセス リストが有効になっている場合は、ワークスペースの IP アドレスがアクセス リストに含まれている必要があります。

リモート レジストリの API トークンを設定する

このセクションでは、"ワークスペース B" は、一元化された、またはリモートの機能ストア ワークスペースを指します。

  1. ワークスペース B で、アクセス トークンを作成します。
  2. ローカル ワークスペースで、このアクセス トークンとワークスペース B の情報を格納するシークレットを作成します。
    1. シークレットのスコープ databricks secrets create-scope --scope <scope> を作成します。
    2. ワークスペース 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>'
)

ノートブックの例: ワークスペース間で機能テーブルを共有する

次のノートブックでは、一元化された機能ストアの操作方法を示します。

一元化された Feature Store のノートブックの例

ノートブックを入手