Databricks Feature Serving とは?
Databricks Feature Serving は、Databricks プラットフォームのデータを Databricks の外部にデプロイされたモデルやアプリケーションで使用できるようにします。 Feature Serving エンドポイントは、リアルタイムのトラフィックに合わせて自動的にスケーリングし、機能を提供するための高可用性と低遅延のサービスを提供します。 このページでは、Feature Serving の設定方法と使用方法について説明します。 ステップ バイ ステップ チュートリアルについては、「Feature Serving エンドポイントのデプロイとクエリ」を参照してください。
Mosaic AI Model Serving を使用して、Databricks の特徴を使用して構築されたモデルを提供すると、モデルは推論要求の特徴を自動的に検索して変換します。 Databricks Feature Serving を使用すると、Retrieval Augmented Generation (RAG) アプリケーション用の構造化データだけでなく、Databricks の外部で提供されるモデルや Unity Catalog のデータに基づく機能を必要とするその他のアプリケーションなど、他のアプリケーションに必要な機能も提供できます。
Feature Serving を使用する理由
Databricks 特徴量サービングは、事前にマテリアライズされた機能とオンデマンドの機能を提供する単一のインターフェイスを提供します。 また、次の利点もあります。
- シンプル。 Databricks がインフラストラクチャを処理します。 Databricks は、1 回の API 呼び出しで、本番運用に対応したサービス環境を作成します。
- 高可用性とスケーラビリティ。 特徴量サービングエンドポイントは、処理要求の量に合わせて自動的にスケールアップおよびスケールダウンします。
- 安全。 エンドポイントは、セキュリティで保護されたネットワーク境界にデプロイされ、エンドポイントが削除されるか 0 にスケーリングされたときに終了する専用のコンピュートを使用します。
必要条件
- Databricks Runtime 14.2 ML以上。
- Python API を使用するには、特徴量サービングには
databricks-feature-engineering
バージョン 0.1.2 が必要です 以降。Databricks Runtime 14.2 MLに組み込まれています。 以前の Databricks Runtime MLバージョンの場合は、%pip install databricks-feature-engineering>=0.1.2
を使用して必要なバージョンを手動でインストールします。 Databricks ノートブックを使用している場合は、新しいセルdbutils.library.restartPython()
でこのコマンドを実行して、Python カーネルを再起動する必要があります。 - Databricks SDK を使用するには、特徴量サービングに
databricks-sdk
バージョン 0.18.0 以降が必要です。 必要なバージョンを手動でインストールするには、%pip install databricks-sdk>=0.18.0
を使用します。 Databricks ノートブックを使用している場合は、新しいセルdbutils.library.restartPython()
でこのコマンドを実行して、Python カーネルを再起動する必要があります。
Databricks 特徴量サービングは、エンドポイントを作成、更新、クエリ、削除するための UI といくつかのプログラム オプションを提供します。 この記事では、次の各オプションについて説明します。
- Databricks UI
- REST API
- Python API
- Databricks SDK
REST API または MLflow デプロイ SDK を使用するには、Databricks API トークンが必要です。
本番運用シナリオのセキュリティのベスト プラクティスとして、 Databricks では、本番運用中の認証に マシン間 OAuth トークン を使用することをお勧めします。
テストと開発のために、 Databricks ワークスペース ユーザーではなく 、サービスプリンシパル に属する個人用アクセス トークンを使用することをお勧めします。 サービスプリンシパルのトークンを作成するには、「 サービスプリンシパルのトークンの管理」を参照してください。
Feature Servingの認証
認証に関する情報については、「Databricks リソースへのアクセスの承認」を参照してください。
を作成します。 FeatureSpec
FeatureSpec
は、ユーザー定義の機能のセットです。FeatureSpec
で機能を組み合わせることができます。FeatureSpecs
は Unity Catalog に保存され、Unity Catalog によって管理され、Catalog Explorer に表示されます。
FeatureSpec
で指定されたテーブルは、オンライン テーブルまたはサードパーティのオンライン ストアに公開する必要があります。「リアルタイム Feature Servingオンライン ストアまたは サードパーティのオンライン ストアにオンライン テーブルを使用する」を参照してください。
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のドキュメンテーションを参照してください。
レイテンシーの影響を受けやすいワークロードや、1 秒あたりのクエリ数が多いワークロードの場合、モデルサービングはカスタムモデルサービングエンドポイントでルート最適化を提供します ( 「サービスエンドポイントでのルート最適化の設定」を参照してください)。
- REST API
- Databricks SDK - Python
- Python 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
}
]
}'
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"
)
]
)
)
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 の左側のサイドバーで [サービス ] をクリックします。 状態が [Ready] の場合、エンドポイントはクエリに応答する準備ができています。 Mosaic AI Model Servingの詳細については、 Mosaic AI Model Servingを参照してください。
拡張された データフレーム を推論テーブルに保存します
2025 年 2 月以降に作成されたエンドポイントでは、検索された機能値と関数の戻り値を含む拡張 データフレーム をログに記録するようにモデルサービングエンドポイントを設定できます。 データフレーム は、提供されたモデルの推論テーブルに保存されます。
この構成の設定手順については、「 推論テーブルへのフィーチャルックアップ データフレーム のログ記録」を参照してください。
推論テーブルに関する情報については、「 モニタリング モデルとデバッグ モデルの推論テーブル」を参照してください。
エンドポイントを取得する
Databricks SDK または Python API を使用して、エンドポイントのメタデータとステータスを取得できます。
- Databricks SDK - Python
- Python API
endpoint = workspace.serving_endpoints.get(name="customer-features")
# print(endpoint)
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")
自動化されたツール、システム、スクリプト、アプリで認証する際のセキュリティのベストプラクティスとして、Databricks では OAuth トークンを使用することをお勧めします。
personal access token authentication を使用する場合、 Databricks では、ワークスペース ユーザーではなく 、サービスプリンシパル に属する personal access token を使用することをお勧めします。 サービスプリンシパルのトークンを作成するには、「 サービスプリンシパルのトークンの管理」を参照してください。
APIs を使用してエンドポイントをクエリする
このセクションには、REST API または MLflow デプロイ SDK を使用してエンドポイントをクエリする例が含まれています。
- REST API
- MLflow Deployments SDK
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}
]}'
The following example uses the predict()
API from the MLflow Deployments SDK. This API is Experimental and the API definition might change.
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 には、エンドポイントのクエリに使用できる生成されたコード例が含まれています。
-
Databricks ワークスペースの左側のサイドバーで、[ サービス提供 ] をクリックします。
-
クエリを実行するエンドポイントをクリックします。
-
画面の右上にある [ クエリ エンドポイント ] をクリックします。
-
[要求 ] ボックスに、要求本文を JSON 形式で入力します。
-
「 リクエストを送る 」をクリックします。
// Example of a request body.
{
"dataframe_records": [
{ "user_id": 1, "ytd_spend": 598 },
{ "user_id": 2, "ytd_spend": 280 }
]
}
[クエリ エンドポイント ] ダイアログには、curl、Python、および SQL で生成されたサンプル コードが含まれています。タブをクリックして、サンプルコードを表示およびコピーします。
コードをコピーするには、テキストボックスの右上にあるコピーアイコンをクリックします。
エンドポイントを更新してください
エンドポイントは、REST API、Databricks SDK、または Serving UI を使用して更新できます。
APIs を使用してエンドポイントを更新する
- REST API
- Databricks SDK - Python
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
}
]'
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を使用するには、次の手順に従います。
- Databricks ワークスペースの左側のサイドバーで、[ サービス提供 ] をクリックします。
- テーブルで、更新するエンドポイントの名前をクリックします。 エンドポイント画面が表示されます。
- 画面の右上にある [ エンドポイントの編集 ] をクリックします。
- 「 配信エンドポイントの編集 」ダイアログで、必要に応じてエンドポイント設定を編集します。
- [更新 ] をクリックして、変更を保存します。
エンドポイントの削除
このアクションは元に戻せません。
エンドポイントは、REST API、Databricks SDK、Python API、または Serving UI を使用して削除できます。
APIs を使用してエンドポイントを削除する
- REST API
- Databricks SDK - Python
- Python API
curl -X DELETE -u token:$DATABRICKS_API_TOKEN ${WORKSPACE_URL}/api/2.0/serving-endpoints/<endpoint_name>
workspace.serving_endpoints.delete(name="customer-features")
fe.delete_feature_serving_endpoint(name="customer-features")
UI を使用したエンドポイントの削除
次の手順に従って、Serving UI を使用してエンドポイントを削除します。
- Databricks ワークスペースの左側のサイドバーで、[ サービス提供 ] をクリックします。
- テーブルで、削除するエンドポイントの名前をクリックします。 エンドポイント画面が表示されます。
- 画面の右上にあるケバブメニュー
をクリックし、[ 削除 ]を選択します。
エンドポイントの正常性を監視する
Feature Servingエンドポイントで使用できるログとメトリクスに関する情報については、「モデルの品質とエンドポイントの正常性のモニタリング」を参照してください。
アクセス制御
Feature Servingエンドポイントのアクセス許可に関する情報については、「モデルサービングエンドポイントのアクセス許可を管理する」を参照してください。
ノートブックの例
このノートブックは、DatabricksSDK Feature ServingDatabricksを使用して、 Online Tables を使用して エンドポイントを作成する方法を示しています。