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 ユーザーインターフェース
- 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
に指定するテーブルは、オンライン テーブルまたはサード パーティのオンライン ストアに公開する必要があります。
リアルタイム機能の提供またはサードパーティのオンライン ストアでのオンライン テーブルの使用に関する記事を参照してください。
databricks-feature-engineering
を作成するには、FeatureSpec
パッケージを使用する必要があります。
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
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 の左側のサイドバーにある [ サービス ] をクリックします。 状態が Ready になると、エンドポイントはクエリに応答する準備が整います。 モザイク AI モデルサービスの詳細については、「 モザイク AI モデルサービス」を参照してください。
拡張データフレームを推論テーブルに保存する
2025 年 2 月以降に作成されたエンドポイントの場合は、検索された機能値と関数の戻り値を含む拡張 DataFrame をログに記録するようにモデル サービス エンドポイントを構成できます。 DataFrame は、提供されたモデルの推論テーブルに保存されます。
この構成を設定する手順については、「特徴量検索 DataFrame を推論テーブルにログする」をご覧ください。
推論テーブルの詳細については、 モデルの監視とデバッグのための推論テーブルを参照してください。
エンドポイントを取得する
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")
注
セキュリティのベスト プラクティスとして、自動化されたツール、システム、スクリプト、アプリを使用して認証する場合、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
重要
次の例では、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 ワークスペースの左側のサイドバーで、[ サービス] をクリックします。
クエリを実行するエンドポイントをクリックします。
画面の右上にある [ クエリ エンドポイント] をクリックします。
[ 要求 ] ボックスに、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、または 提供 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 ワークスペースの左側のサイドバーで、[ サービス] をクリックします。
- テーブルで、削除するエンドポイントの名前をクリックします。 エンドポイント画面が表示されます。
- 画面の右上にある Kebab メニューの
をクリックし、[削除] を選択 します。
エンドポイントの正常性の監視
Feature Serving エンドポイントで使用できるログとメトリックの詳細については、「モデルの 品質とエンドポイントの正常性の監視」を参照してください。
アクセス制御
Feature Serving エンドポイントに対するアクセス許可の詳細については、「モデル サービス エンドポイント に対するアクセス許可を管理する」を参照してください。
ノートブックの例
このノートブックには、Databricks SDK を使用して、Databricks オンライン テーブルを使用し、Feature Serving エンドポイントを作成する方法が示されています。