オンラインストアへの機能の公開
この記事では、リアルタイム配信のためにオンラインストアに特徴量を公開する方法について説明します。
Databricks Feature Store は、次のオンライン ストアをサポートしています。
オンラインストアプロバイダー | Unity CatalogのFeature Engineeringを使用した公開 | レガシーワークスペース Feature Store で公開する | レガシーMLflow Model Servingでの特徴量検索 | Model Servingでの特徴量検索 |
---|---|---|---|---|
Amazon DynamoDB | X | X (Feature Store クライアント v0.3.8 以降) | X | X |
Amazon Aurora (MySQL 互換) | X | X | ||
Amazon RDS MySQL | X | X |
DynamoDB オンラインストアは、オフラインストアとは異なるスキーマを使用します。 具体的には、オンラインストアでは、プライマリキーは _feature_store_internal__primary_keys
列に結合キーとして格納されます。
Feature Store が DynamoDB オンラインストアにアクセスできるようにするには、 publish_table()
を使用してオンラインストアにテーブルを作成する必要があります。 DynamoDB 内にテーブルを手動で作成しないでください。 publish_table()
は自動的にそれを行います。
バッチ-コンピュート フィーチャーをオンラインストアに公開する
Databricks ジョブを作成してスケジュールし、更新された機能を定期的に発行できます。 このジョブには、更新された機能を計算するコードを含めることも、機能の更新を計算して公開するための別のジョブを作成して実行することもできます。
SQLストアの場合、次のコードは、"recommender_system" という名前のオンライン データベースがオンライン ストアに既に存在し、オフライン ストアの名前と一致することを前提としています。データベースに "顧客" という名前のテーブルがない場合、このコードで作成されます。 また、フィーチャが毎日コンピュートされ、パーティション分割された列 _dt
として格納されることも前提としています。
次のコードは、このオンラインストアにアクセスするための シークレットを作成した ことを前提としています。
DynamoDB を使用している場合は、DatabricksDatabricksクラスターにアタッチされたインスタンスプロファイルを使用して書き込み認証を行うことをお勧めします。インスタンスプロファイルは、機能の公開にのみ使用できます。機能値を検索するには、Databricks シークレットを使用する必要があります。
- DynamoDB
- SQL stores
DynamoDB support is available in all versions of Feature Engineering in Unity Catalog client, and Feature Store client v0.3.8 and above.
import datetime
from databricks.feature_engineering.online_store_spec import AmazonDynamoDBSpec
# or databricks.feature_store.online_store_spec for Workspace Feature Store
# do not pass `write_secret_prefix` if you intend to use the instance profile attached to the cluster.
online_store = AmazonDynamoDBSpec(
region='<region>',
read_secret_prefix='<read-scope>/<prefix>',
write_secret_prefix='<write-scope>/<prefix>'
)
fe.publish_table( # or fs.publish_table for Workspace Feature Store
name='ml.recommender_system.customer_features',
online_store=online_store,
filter_condition=f"_dt = '{str(datetime.date.today())}'",
mode='merge'
)
import datetime
from databricks.feature_store.online_store_spec import AmazonRdsMySqlSpec
online_store = AmazonRdsMySqlSpec(
hostname='<hostname>',
port='<port>',
read_secret_prefix='<read-scope>/<prefix>',
write_secret_prefix='<write-scope>/<prefix>'
)
fs.publish_table(
name='recommender_system.customer_features',
online_store=online_store,
filter_condition=f"_dt = '{str(datetime.date.today())}'",
mode='merge'
)
ストリーミング機能をオンラインストアに公開する
オンラインストアに機能を連続してストリームするには、 streaming=True
を設定します。
fe.publish_table( # or fs.publish_table for Workspace Feature Store
name='ml.recommender_system.customer_features',
online_store=online_store,
streaming=True
)
選択したフィーチャをオンラインストアに公開する
選択したフィーチャのみを オンラインストア に公開するには、 features
引数を使用して、公開するフィーチャ名を指定します。 主キーとタイムスタンプキーは常に公開されます。 引数 features
を指定しない場合、または値が None の場合は、オフライン特徴量テーブルのすべてのフィーチャが公開されます。
オフライン テーブル全体は、フィーチャの一部のみをオンライン ストアにパブリッシュする場合でも、有効なフィーチャ量テーブルである必要があります。 オフライン テーブルにサポートされていない データ タイプが含まれている場合、そのテーブルのフィーチャのサブセットをオンライン ストアに公開することはできません。
fe.publish_table( # or fs.publish_table for Workspace Feature Store
name='ml.recommender_system.customer_features',
online_store=online_store,
features=["total_purchases_30d"]
)
特徴量テーブルを特定のデータベースにパブリッシュする
オンラインストア仕様で、データベース名(database_name
)とテーブル名(table_name
)を指定します。これらのパラメーターを指定しない場合は、オフライン・データベース名と特徴量テーブル名が使用されます。 database_name
はオンラインストアにすでに存在している必要があります。
online_store = AmazonRdsMySqlSpec(
hostname='<hostname>',
port='<port>',
database_name='<database-name>',
table_name='<table-name>',
read_secret_prefix='<read-scope>/<prefix>',
write_secret_prefix='<write-scope>/<prefix>'
)
既存のオンライン特徴量テーブルまたは特定の行を上書きする
publish_table
通話でmode='overwrite'
を使用します。オンラインテーブルは、オフラインテーブルのデータによって完全に上書きされます。
Amazon DynamoDB は上書きモードをサポートしていません。
fs.publish_table(
name='recommender_system.customer_features',
online_store=online_store,
mode='overwrite'
)
特定の行のみを上書きするには、 filter_condition
引数を使用します。
fs.publish_table(
name='recommender_system.customer_features',
online_store=online_store,
filter_condition=f"_dt = '{str(datetime.date.today())}'",
mode='merge'
)
公開されたテーブルをオンラインストアから削除
Feature Store クライアント v0.12.0 以降では、 drop_online_table
を使用して、公開されたテーブルをオンラインストアから削除できます。 drop_online_table
で公開されたテーブルを削除すると、テーブルはオンラインストア プロバイダーから削除され、オンラインストアのメタデータは Databricksから削除されます。
fe.drop_online_table( # or fs.drop_online_table for Workspace Feature Store
name='recommender_system.customer_features',
online_store = online_store
)
drop_online_table
パブリッシュされたテーブルを Uオンラインストア から削除します。 Databricks の特徴量テーブルは削除されません。- パブリッシュされたテーブルを削除する前に、そのテーブルがモデルサービング機能の検索に使用されていないこと、および他のダウンストリーム依存関係がないことを確認する必要があります。 この削除は元に戻せないため、依存関係が失敗する可能性があります。
- 依存関係を確認するには、
drop_online_table
を実行する前に、削除する予定のパブリッシュ済みテーブルのキーをローテーションすることを検討してください。