Databricksオンライン特徴量ストア
Databricks Online Feature Store は、オンライン アプリケーションや機械学習モデルに特徴データを提供するための高性能でスケーラブルなソリューションです。 Databricks Lakebase を利用したオンライン フィーチャ ストアは、オフラインの特徴量テーブルとの一貫性を維持しながら、高スケールでのフィーチャ データへの低遅延アクセスを提供します。
Online Feature Store の主な使用例は次のとおりです。
- 特徴量サービングエンドポイントを使用して、レコメンデーション システム、不正検出、パーソナライゼーション エンジンなどのリアルタイム アプリケーションに特徴量を提供します。
- モデルサービング エンドポイントでのリアルタイム推論のための自動特徴検索。
オンライン機能ストアは、Lakebase プロビジョニングインスタンスのみをサポートします。 リージョンの可用性と容量オプションについては、 「Lakebase プロビジョニングされたインスタンス」を参照してください。
必要条件
Databricksオンライン特徴量ストアには、Databricks Runtime 16.4 LTS ML 以降が必要です。サーバレス コンピュートを使用することもできます。
Databricksオンライン特徴量ストアを使用するには、まずパッケージをインストールする必要があります。次のコード行は、ノートブックが実行されるたびに実行する必要があります。
%pip install databricks-feature-engineering>=0.13.0
dbutils.library.restartPython()
オンラインストアを作成する
create_online_store API は、 Lakebase プロビジョニングされたデータベース インスタンスの作成のみをサポートします。
オンライン ストアを作成すると、 Feature Servingことになります。 create_online_store API 、指定された容量を持つ Lakebase プロビジョニング インスタンスを作成します。 コストを管理するために、開発やテストに使用していないオンライン ストアを削除します。
新しいオンライン特徴量ストアを作成するには:
from databricks.feature_engineering import FeatureEngineeringClient
# Initialize the client
fe = FeatureEngineeringClient()
# Create an online store with specified capacity
fe.create_online_store(
name="my-online-store",
capacity="CU_2" # Valid options: "CU_1", "CU_2", "CU_4", "CU_8"
)
容量オプションは、プロビジョニングされたさまざまなインスタンス パフォーマンス レベルに対応します: 「CU_1」、「CU_2」、「CU_4」、および「CU_8」。各容量ユニットは、プロビジョニングされたデータベース インスタンスに約 16 GB の RAM と、関連するすべての CPU およびローカル SSD リソースを割り当てます。スケールアップすると、これらのリソースは直線的に増加します。Lakebase プロビジョニングされたインスタンスの詳細については、 「インスタンス容量の管理」を参照してください。
オンラインストアを管理する
次のコードは、オンライン ストアを取得および更新する方法を示しています。
# List all accessible online stores
stores = fe.list_online_stores()
for store in stores:
print(f"Store: {store.name}, State: {store.state}, Capacity: {store.capacity}")
# Get information about an existing online store
store = fe.get_online_store(name="my-online-store")
if store:
print(f"Store: {store.name}, State: {store.state}, Capacity: {store.capacity}")
# Update the capacity of an online store
updated_store = fe.update_online_store(
name="my-online-store",
capacity="CU_4" # Upgrade to higher capacity
)
すべてのオンラインストアAPIsでは、Lakebase プロビジョニングインスタンスのみがサポートされています。 create_online_store APIを使用して適切なオンライン ストアをプロビジョニングします。
オンラインストアへのリードレプリカの追加
オンラインストアを作成または更新するときに、 read_replica_count パラメーターを指定することで、リードレプリカをオンラインストアに追加できます。 読み取りトラフィックはリードレプリカ全体に自動的に分散されるため、レイテンシーが短縮され、同時実行性の高いワークロードのパフォーマンスとスケーラビリティが向上します。
特徴量テーブルをオンラインストアに公開する
publish_table API 、 Lakebase プロビジョニングデータベース インスタンスへの機能の公開のみをサポートします。
オンラインストアが AVAILABLE 状態になったら、特徴量テーブルを公開して、低遅延のアクセスができるようにすることができます。 publish_table API 、オフライン特徴量テーブルのデータを、 create_online_store APIを使用して作成されたオンライン ストアに同期します。 以下の表を参照して、ソース オフライン テーブルがリアルタイムの使用ケースに合わせて正しく作成されていることを確認してください。
ユースケース | この方法を使用してオフライン特徴量テーブルを作成する |
|---|---|
各エンティティIDの 最新の 機能値のみが、リアルタイムアプリケーション用のオンラインストアで利用できます。 同じ主キー値を持つ複数の行がオフラインデータソースに存在する可能性があり、publish パイプラインで重複排除されます。 このケースは、オンライン モデルまたは Feature Serving エンドポイントで最も頻繁に使用されます。 | |
オフラインテーブルの最新および以前のすべての時系列特徴値は、リアルタイムアプリケーションからアクセスできるようにオンラインストアで入手できます。 ソース (オフライン) テーブルのすべての行は、重複排除なしで公開されます。これは使用頻度は低いですが、エンドポイントがデータ検証またはバックテストのためにエンティティ ID と正確な日付/タイムスタンプで特徴を照会する場合に必要になる場合があります。 |
オンラインストアに公開するための前提条件
すべての特徴量テーブル (時系列の有無にかかわらず) は、公開する前に次の要件を満たす必要があります。
- 主キー制約 : オンラインストアの公開に必要
- null 非許容の主キー: 主キー列に NULL 値を含めることはできません
- 変更データフィードが有効 :
CONTINUOUSおよびTRIGGERED公開モードに必要です。 Deltaテーブル変更データフィードを有効にする方法については「変更データフィードを有効にする」を参照し、公開モードについては「公開モード」を参照してください。
-- Enable CDF if not already enabled
ALTER TABLE catalog.schema.your_feature_table
SET TBLPROPERTIES ('delta.enableChangeDataFeed' = 'true');
-- Ensure primary key columns are not nullable
ALTER TABLE catalog.schema.your_feature_table
ALTER COLUMN user_id SET NOT NULL;
特徴量表を公開する
特徴量テーブルをオンラインストアに公開するには:
from databricks.ml_features.entities.online_store import DatabricksOnlineStore
# Get the online store instance
online_store = fe.get_online_store(name="my-online-store")
# Publish the feature table to the online store
fe.publish_table(
online_store=online_store,
source_table_name="catalog_name.schema_name.feature_table_name",
online_table_name="catalog_name.schema_name.online_feature_table_name",
# `publish_mode` argument is optional and defaults to "TRIGGERED" mode if not specified
)
publish_table操作では、次の処理が行われます。
- オンラインストアにテーブルが存在しない場合は、作成します。
- オフライン特徴量テーブルからオンラインストアに特徴量データを同期します。
- オンラインストアとオフラインテーブルを同期させるために必要なインフラストラクチャを設定します。
公開モード
Databricks Online Feature Storeのpublish_modeは、オフラインの特徴量テーブルからの変更によってオンライン テーブルがいつどのように更新されるかを決定します。 サポートされているモードの詳細については、以下にまとめられている同期モードの説明を参照してください。
モード | 説明 |
|---|---|
| デフォルト。API を使用するかスケジュールに従って、オフライン テーブルの変更をオンライン テーブルに段階的に更新します。定期的にデータ同期をトリガーするオプション:
このモードでは、オフライン テーブルで変更データフィードが有効になっている必要があります。 オンライン ストアに公開するための前提条件を参照してください。 |
| オンライン テーブルにはストリーミング パイプラインが設定されており、オフライン特徴量テーブルに書き込まれる新しいデータとしてオンライン ストアがすぐに更新されます。 |
| すべてのデータをソース テーブルからオンライン ストアにコピーする 1 回限りの同期を実行します。 このモードは、2 つの同期操作の間に既存の行に多数の更新がある場合に効率的です。 |
v0.13.0.1 以前のバージョンでは、 publish_mode問題がstreaming問題に置き換わります。 下位互換性のため、 streaming=Trueが渡された場合はpublish_mode="CONTINUOUS"を設定するのと同等になります。
オンラインテーブルを削除する
オンライン テーブルを削除するには、Databricks SDK を使用します。
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
w.feature_store.delete_online_table(online_table_name="catalog_name.schema_name.online_feature_table_name")
これは、オンライン テーブルを削除する場合に推奨される 唯一の 方法です。Unity Catalogとデータベースの両方からテーブルを削除します。 同期されたテーブルを削除する Databricks SQL コマンドDROP TABLEや Python SDK コマンドなどの他の方法では、基礎となるデータベース ストレージからテーブルは削除さ れません 。
オンライン特徴量の探索とクエリ
公開されたテーブルのステータスが "AVAILABLE" と表示されたら、いくつかの方法で特徴量データを探索し、クエリを実行できます。
Unity Catalog UI : Unity Catalog のオンライン テーブルに移動して、サンプル データを表示し、UI で直接スキーマを探索します。これにより、フィーチャ データを検査し、公開プロセスが正常に完了したことを確認するのに便利です。
SQLエディター :より高度なクエリとデータ探索のために、SQLエディターを使用して、オンラインの特徴量テーブルに対してPostgreSQLクエリを実行できます。これにより、フィーチャ データに対して複雑なクエリ、結合、および解析を実行できます。オンライン・ストアで SQL エディターを使用する手順について詳しくは、 SQL エディターからのデータベース・インスタンスへのアクセスを参照してください。
リアルタイムアプリケーションでのオンライン特徴量の使用
リアルタイム アプリケーションやサービスに特徴量を提供するには、 特徴量サービングエンドポイントを作成します。 特徴量サービング エンドポイントを参照してください。
Databricksの特徴量を使用して学習されたモデルは、学習した特徴量に自動的にリネージを追跡します。エンドポイントとしてデプロイすると、これらのモデルは Unity Catalog を使用して、オンライン ストアで適切な特徴量を見つけます。詳細については、オンライン ワークフローで特徴量を使用するを参照してください。
オンラインストアを削除する
オンラインストアを削除するには:
fe.delete_online_store(name="my-online-store")
オンラインで公開されたテーブルを削除すると、ダウンストリームの依存関係で予期しないエラーが発生する可能性があります。テーブルを削除する前に、そのオンライン特徴量がモデルサービングまたは 特徴量サービングエンドポイントで使用されなくなったことを確認する必要があります。
コスト最適化のベストプラクティス
- オンライン ストアの再利用 : 複数の特徴量テーブルを 1 つのオンライン ストアに公開できます。 開発、テスト、トレーニングのシナリオでは、個別のストアを作成するのではなく、複数のプロジェクトまたはユーザー間で 1 つのオンライン ストアを共有することをお勧めします。
- 適切なサイズの容量 : テスト用に CU_1 から開始し、パフォーマンス要件が必要になった場合にのみスケールアップします。
- 使用されていないオンライン ストアを削除する : オンライン ストアでは継続的にコストが発生します。不要になったオンラインストアを削除します。
制限
- 特定のオンライン テーブルの指定はサポートされていません。特徴量テーブルが複数のオンライン テーブルに公開される場合、モデルサービングおよびFeature Servingエンドポイントは常に、作成タイムスタンプに基づいて最も古いオンライン テーブルに解決されます。
- Databricks オンライン特徴量ストアの読み取りレプリカの最大数は 2 です。Databricks アカウント チームに連絡して、制限を引き上げてください。
- Databricks オンライン特徴量ストアにパブリッシュする場合、
filter_condition、checkpoint_location、mode、trigger、およびfeaturesのパラメーターはサポートされていません。 - Unity Catalogの特徴量テーブルのみがサポートされています。
- サポートされているパブリッシュモードは「マージ」のみです。
- オンライン ストアではゼロへのスケーリングはサポートされていません。
ノートブックの例
次のノートブックは、Databricks Lakebase を使用して Databricks オンライン特徴量ストアを設定してアクセスする方法の例を示しています。
オンライン特徴量ストアとLakebaseのノートブック
追加のリソース
-
Databricks の特徴量エンジニアリングの詳細をご覧ください。
-
Unity Catalog でのデータガバナンスとリネージについて調べます。
-
Lakebaseのアーキテクチャと機能を理解します。