Databricks Feature Serving とは
Databricks Feature Serving は、Databricks プラットフォーム内のデータを、Azure Databricks の外部にデプロイされたモデルまたはアプリケーションで使用できるようにします。 Feature Serving エンドポイントは、リアルタイム トラフィックに合わせて自動的にスケーリングし、特徴量を提供するための高可用性で低遅延のサービスを提供します。 このページでは、Feature Serving を設定して使用する方法について説明します。 詳しいチュートリアルについては、「特徴量提供エンドポイントをデプロイしてクエリを実行する」を参照してください。
Databricks からの特徴量を使用して構築されたモデルを提供するために Mosaic AI Model Serving を使用すると、モデルは推論要求用の特徴量を自動的に検索し、変換します。 Databricks Feature Serving を使うと、取得拡張生成 (RAG) アプリケーション用の構造化データと、他のアプリケーション (Databricks の外部で提供されるモデルや Unity Catalog のデータに基づく特徴を必要とする他のアプリケーションなど) に必要な特徴量を提供できます。
Feature Serving を使用する理由
Databricks Feature Serving は、事前に具体化されたオンデマンド特徴量を提供する単一のインターフェイスを備えています。 これには、次のベネフィットもあります。
- 簡潔さ。 Databricks がインフラストラクチャを処理します。 1 回の API 呼び出しで、Databricks が運用環境に対応したサービス環境を作成します。
- 高可用性とスケーラビリティ。 Feature Serving エンドポイントは、サービス要求の量に合わせて自動的にスケールアップおよびスケールダウンします。
- セキュリティ。 エンドポイントはセキュリティで保護されたネットワーク境界にデプロイされ、エンドポイントが削除されるか、ゼロにスケーリングされたときに終了する専用コンピューティングを使用します。
要件
- Databricks Runtime 14.2 ML 以上。
- Python API を使用するために、Feature Serving には、Databricks Runtime 14.2 ML に組み込まれている
databricks-feature-engineering
バージョン 0.1.2 以上が必要です。 それ以前のバージョンの Databricks Runtime ML の場合は、%pip install databricks-feature-engineering>=0.1.2
を使用して必要なバージョンを手動でインストールしてください。 Databricks ノートブックを使用する場合は、新しいセルでコマンドdbutils.library.restartPython()
を実行して Python カーネルを再起動する必要があります。 - Databricks SDK を使用するために、Feature Serving には、
databricks-sdk
バージョン 0.18.0 以降が必要です。 必要なバージョンを手動でインストールするには、%pip install databricks-sdk>=0.18.0
を使用します。 Databricks ノートブックを使用する場合は、新しいセルでコマンドdbutils.library.restartPython()
を実行して Python カーネルを再起動する必要があります。
Databricks Feature Serving では、エンドポイントの作成、更新、クエリ、および削除のための UI と複数のプログラム オプションが提供されます。 この記事には、次の各オプションの手順が含まれています。
- Databricks UI
- REST API
- Python API
- Databricks SDK
REST API または MLflow Deployments SDK を使用するには、Databricks API トークンが必要です。
重要
運用シナリオのセキュリティのベスト プラクティスとして、Databricks では、運用時の認証にコンピューター間 OAuth トークンを使用することをお勧めします。
テストおよび開発の場合は、Databricks では、ワークスペース ユーザーではなく、サービス プリンシパルに属する個人用アクセス トークンを使用することをお勧めします。 サービス プリンシパルのトークンを作成するには、「サービス プリンシパルのトークンを管理する」をご覧ください。
Feature Serving の認証
認証の詳細については、「Azure Databricks リソースの認証」を参照してください。
認証要求の処理に使用する FeatureSpec
FeatureSpec
は、特徴量と関数のユーザー定義セットです。 FeatureSpec
内で、特徴量と関数を組み合わせることができます。 FeatureSpecs
は Unity カタログで保存および管理され、カタログ エクスプローラーに表示されます。
FeatureSpec
に指定するテーブルは、オンライン テーブルまたはサード パーティのオンライン ストアに公開する必要があります。 「オンライン テーブルを使用してリアルタイムで特徴量を提供する」または「サード パーティのオンライン ストア」を参照してください。
FeatureSpec
を作成するには、databricks-feature-engineering
パッケージを使用する必要があります。
from databricks.feature_engineering import (
FeatureFunction,
FeatureLookup,
FeatureEngineeringClient,
)
fe = FeatureEngineeringClient()
features = [
# Lookup column `average_yearly_spend` and `country` from a table in UC by the input `user_id`.
FeatureLookup(
table_name="main.default.customer_profile",
lookup_key="user_id",
feature_names=["average_yearly_spend", "country"]
),
# Calculate a new feature called `spending_gap` - the difference between `ytd_spend` and `average_yearly_spend`.
FeatureFunction(
udf_name="main.default.difference",
output_name="spending_gap",
# Bind the function parameter with input from other features or from request.
# The function calculates a - b.
input_bindings={"a": "ytd_spend", "b": "average_yearly_spend"},
),
]
# Create a `FeatureSpec` with the features defined above.
# The `FeatureSpec` can be accessed in Unity Catalog as a function.
fe.create_feature_spec(
name="main.default.customer_features",
features=features,
)
エンドポイントの作成
FeatureSpec
はエンドポイントを定義します。 詳細については、「カスタム モデル提供エンドポイントを作成する」、Python API のドキュメント、または Databricks SDK のドキュメントを参照してください。
Note
待機時間の影響を受けやすいワークロードや、1 秒あたり多くのクエリを必要とするワークロードについては、Model Serving は、エンドポイントを提供するカスタム モデルでルート最適化を提供します。エンドポイントを提供する際のルート最適化の構成に関するページを参照してください。
REST API
curl -X POST -u token:$DATABRICKS_API_TOKEN ${WORKSPACE_URL}/api/2.0/serving-endpoints \
-H 'Content-Type: application/json' \
-d '"name": "customer-features",
"config": {
"served_entities": [
{
"entity_name": "main.default.customer_features",
"workload_size": "Small",
"scale_to_zero_enabled": true
}
]
}'
Databricks SDK - Python
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.serving import EndpointCoreConfigInput, ServedEntityInput
workspace = WorkspaceClient()
# Create endpoint
workspace.serving_endpoints.create(
name="my-serving-endpoint",
config = EndpointCoreConfigInput(
served_entities=[
ServedEntityInput(
entity_name="main.default.customer_features",
scale_to_zero_enabled=True,
workload_size="Small"
)
]
)
)
Python API
from databricks.feature_engineering.entities.feature_serving_endpoint import (
ServedEntity,
EndpointCoreConfig,
)
fe.create_feature_serving_endpoint(
name="customer-features",
config=EndpointCoreConfig(
served_entities=ServedEntity(
feature_spec_name="main.default.customer_features",
workload_size="Small",
scale_to_zero_enabled=True,
instance_profile_arn=None,
)
)
)
エンドポイントを表示するには、Databricks UI の左側のサイドバーにある [Serving] (サービス) をクリックします。 状態が [準備完了] のとき、エンドポイントはクエリに応答する準備ができています。 Mosaic AI Model Serving の詳細については、「Mosaic AI Model Serving」を参照してください。
エンドポイントを取得する
Databricks SDK または Python API を使用して、エンドポイントのメタデータと状態を取得できます。
Databricks SDK - Python
endpoint = workspace.serving_endpoints.get(name="customer-features")
# print(endpoint)
Python API
endpoint = fe.get_feature_serving_endpoint(name="customer-features")
# print(endpoint)
エンドポイントのスキーマを取得する
REST API を使用して、エンドポイントのスキーマを取得できます。 エンドポイント スキーマの詳細については、「エンドポイント スキーマを提供するモデルを取得する」を参照してください。
ACCESS_TOKEN=<token>
ENDPOINT_NAME=<endpoint name>
curl "https://example.databricks.com/api/2.0/serving-endpoints/$ENDPOINT_NAME/openapi" -H "Authorization: Bearer $ACCESS_TOKEN" -H "Content-Type: application/json"
エンドポイントのクエリを実行する
エンドポイントのクエリを実行するには、REST API、MLflow デプロイ SDK、または提供 UI を使用できます。
次のコードは、MLflow Deployments SDK を使うときに資格情報を設定し、クライアントを作成する方法を示しています。
# Set up credentials
export DATABRICKS_HOST=...
export DATABRICKS_TOKEN=...
# Set up the client
import mlflow.deployments
client = mlflow.deployments.get_deploy_client("databricks")
Note
セキュリティのベスト プラクティスとして、自動化ツール、システム、スクリプト、アプリを使用して認証する場合、Databricks では、ワークスペース ユーザーではなくサービス プリンシパルに属する個人用アクセス トークンを使用することを推奨しています。 サービス プリンシパルのトークンを作成するには、「サービス プリンシパルのトークンを管理する」をご覧ください。
API を使用してエンドポイントのクエリを実行する
このセクションには、REST API または MLflow デプロイ SDK を使用したエンドポイントへのクエリの実行の例が含まれます。
REST API
curl -X POST -u token:$DATABRICKS_API_TOKEN $ENDPOINT_INVOCATION_URL \
-H 'Content-Type: application/json' \
-d '{"dataframe_records": [
{"user_id": 1, "ytd_spend": 598},
{"user_id": 2, "ytd_spend": 280}
]}'
MLflow デプロイ SDK
重要
次の例では、MLflow デプロイ SDK の predict()
API を使用します。 この API は試験段階であり、API 定義は変更される可能性があります。
import mlflow.deployments
client = mlflow.deployments.get_deploy_client("databricks")
response = client.predict(
endpoint="test-feature-endpoint",
inputs={
"dataframe_records": [
{"user_id": 1, "ytd_spend": 598},
{"user_id": 2, "ytd_spend": 280},
]
},
)
UI を使用してエンドポイントのクエリを実行する
提供 UI から提供エンドポイントに直接クエリを実行できます。 UI には、エンドポイントのクエリの実行に使用できる、生成されたコード例が含まれます。
Azure Databricks ワークスペースの左側のサイドバーで、[提供] をクリックします。
クエリを実行するエンドポイントをクリックします。
画面の右上にある [Query endpoint] (クエリ エンドポイント) をクリックします。
[要求] ボックスに、JSON 形式で要求本文を入力します。
[Send request](要求を送信する) をクリックします。
// Example of a request body.
{
"dataframe_records": [
{"user_id": 1, "ytd_spend": 598},
{"user_id": 2, "ytd_spend": 280}
]
}
[Query endpoint] (クエリ エンドポイント) ダイアログに、curl、Python、SQL で生成されたコード例が表示されます。 タブをクリックして、コード例を表示およびコピーします。
コードをコピーするには、テキスト ボックスの右上にあるコピー アイコンをクリックします。
エンドポイントを更新する
REST API、Databricks SDK、または 提供 UI を使用してエンドポイントを更新できます。
API を使用してエンドポイントを更新する
REST API
curl -X PUT -u token:$DATABRICKS_API_TOKEN ${WORKSPACE_URL}/api/2.0/serving-endpoints/<endpoint_name>/config \
-H 'Content-Type: application/json' \
-d '"served_entities": [
{
"name": "customer-features",
"entity_name": "main.default.customer_features_new",
"workload_size": "Small",
"scale_to_zero_enabled": True
}
]'
Databricks SDK - Python
workspace.serving_endpoints.update_config(
name="my-serving-endpoint",
served_entities=[
ServedEntityInput(
entity_name="main.default.customer_features",
scale_to_zero_enabled=True,
workload_size="Small"
)
]
)
UI を使用してエンドポイントを更新する
提供 UI を使用するには、次の手順に従ってください。
- Azure Databricks ワークスペースの左側のサイドバーで、[提供] をクリックします。
- テーブルで、更新するエンドポイントの名前をクリックします。 エンドポイント画面が表示されます。
- 画面の右上にある [エンドポイントの編集] をクリックします。
- [提供エンドポイントの編集]] ダイアログで、必要に応じてエンドポイント設定を編集します。
- [更新] をクリックして変更を保存します。
エンドポイントの削除
警告
この操作は、元に戻すことはできません。
REST API、Databricks SDK、Python API、または 提供 UI を使用してエンドポイントを削除できます。
API を使用してエンドポイントを削除する
REST API
curl -X DELETE -u token:$DATABRICKS_API_TOKEN ${WORKSPACE_URL}/api/2.0/serving-endpoints/<endpoint_name>
Databricks SDK - Python
workspace.serving_endpoints.delete(name="customer-features")
Python API
fe.delete_feature_serving_endpoint(name="customer-features")
UI を使用してエンドポイントを削除する
提供 UI を使用してエンドポイントを削除するには、次の手順に従ってください。
- Azure Databricks ワークスペースの左側のサイドバーで、[提供] をクリックします。
- テーブルで、削除するエンドポイントの名前をクリックします。 エンドポイント画面が表示されます。
- 画面右上のケバブ メニュー をクリックし、[削除] を選択します。
エンドポイントの正常性の監視
Feature Serving エンドポイントで利用可能なログとメトリックの詳細については、「モデルの品質とエンドポイントの正常性を監視する」を参照してください。
アクセス制御
Feature Serving エンドポイントに対するアクセス許可の詳細については、「モデル提供エンドポイントに対するアクセス許可を管理する」を参照してください。
ノートブックの例
このノートブックには、Databricks SDK を使用して、Databricks オンライン テーブルを使用し、Feature Serving エンドポイントを作成する方法が示されています。