オンラインストアへの特徴量の公開
この記事では、リアルタイム配信のためにオンラインストアに特徴量を公開する方法について説明します。
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
として格納されることも前提としています。
次のコードは、この ONLINE にアクセスするための シークレットが作成され ていることを前提としています。
DynamoDB を使用している場合、 Databricks クラスターにアタッチされたインスタンスプロファイルを使用して書き込み認証を提供することをお勧めします。 インスタンスプロファイルは、機能の発行にのみ使用できます。機能値を検索するには、Databricks シークレットを使用する必要があります。
DynamoDB は、 Unity Catalogでの特徴量エンジニアリングのクライアントの全てのバージョン、および Feature Store クライアント v0.3.8 以降で使用できます。
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 に存在している必要があります。
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 の特徴量テーブルは削除されません。公開されたテーブルを削除する前に、そのテーブルがフィーチャの検索に使用されていないこと Model Serving 、他のダウンストリーム依存関係がないことを確認する必要があります。 削除は元に戻せないため、依存関係が失敗する可能性があります。
依存関係を確認するには、
drop_online_table
を実行する前に、削除する予定のパブリッシュされたテーブルのキーを 1 日ローテーションすることを検討してください。