Databricks の特徴量サービングとは何ですか?
Databricks Feature Serving は、Databricks プラットフォームのデータを Databricks の外部にデプロイされたモデルやアプリケーションで使用できるようにします。 Feature Serving エンドポイントは、リアルタイムのトラフィックに合わせて自動的にスケーリングし、機能を提供するための高可用性と低遅延のサービスを提供します。 このページでは、Feature Serving の設定方法と使用方法について説明します。 ステップ バイ ステップ チュートリアルについては、「Feature Serving エンドポイントのデプロイとクエリ」を参照してください。
Mosaic AI Model Serving を使用して、Databricks の機能を使用して構築されたモデルを提供する場合、モデルは推論リクエストの機能を自動的に検索して変換します。 Databricks Feature Serving を使用すると、検索拡張生成 (RAG) アプリケーション用の構造化データや、Databricks 外部で提供されるモデルや Unity Catalog のデータに基づく機能を必要とするその他のアプリケーションなど、他のアプリケーションに必要な機能を提供できます。
特徴量サービングを使用する理由
Databricks 特徴量サービングは、事前にマテリアライズされた機能とオンデマンドの機能を提供する単一のインターフェイスを提供します。 また、次の利点もあります。
シンプル。 Databricks がインフラストラクチャを処理します。 Databricks は、1 回の API 呼び出しで、本番運用に対応したサービス環境を作成します。
高可用性とスケーラビリティ。 特徴量サービングエンドポイントは、処理要求の量に合わせて自動的にスケールアップおよびスケールダウンします。
安全。 エンドポイントはセキュリティで保護されたネットワーク境界にデプロイされ、エンドポイントが削除されるかゼロにスケーリングされたときに終了する専用のコンピュートを使用します。
要件
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 Deployments SDK を使用するには、Databricks API トークンが必要です。
重要
オンプレミス運用シナリオのセキュリティのベスト プラクティスとして、 Databricksでは、オンプレミス運用中の認証にマシン間OAuthトークンを使用することをお勧めします。
テストと開発の場合、 Databricksでは、ワークスペース ユーザーではなく、サービスプリンシパルに属する個人用アクセストークンを使用することをお勧めします。 サービスプリンシパルのトークンを作成するには、 「サービスプリンシパルのトークンの管理」を参照してください。
特徴量サービングの認証
認証に関する情報については、「Databricksリソースへのアクセスを認証する」を参照してください。
FeatureSpec
を作成する
FeatureSpec
は、ユーザー定義の機能のセットです。FeatureSpec
で機能を組み合わせることができます。FeatureSpecs
は Unity Catalog に格納されて管理され、カタログ エクスプローラーに表示されます。
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 秒あたりのクエリ数が多いワークロードの場合、モデル サービングはカスタム モデル サービング エンドポイントでのルート最適化を提供します。 「サービス エンドポイントでのルート最適化の構成」を参照してください。
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 の左側のサイドバーにある[Serving] をクリックします。 状態が [準備完了] の場合、エンドポイントはクエリに応答する準備ができています。 Mosaic AI Model Servingの詳細については、 Mosaic AI Model Servingを参照してください。
エンドポイントを取得する
Databricks SDK または 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 Deployments SDK、または Serving 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 トークンを使用することをお勧めします。
個人のアクセス トークン認証を使用する場合、 Databricksでは、ワークスペース ユーザーではなく、サービスプリンシパルに属する個人のアクセス トークンを使用することをお勧めします。 サービスプリンシパルのトークンを作成するには、 「サービスプリンシパルのトークンの管理」を参照してください。
APIを使用してエンドポイントをクエリーする
このセクションには、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}
]}'
重要
次の例では、 MLflow Deployments 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 には、エンドポイントのクエリに使用できる生成コード例が含まれています。
Databricks ワークスペースの左側のサイドバーで、 [Serving]をクリックします。
クエリーするエンドポイントをクリックします。
画面右上の [クエリー endpoint] をクリックします。
[ 要求 ] ボックスに、要求本文を 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 を使用してエンドポイントを更新できます。
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
}
]'
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"
)
]
)
エンドポイントを削除する
警告
この操作は元に戻せません。
エンドポイントは、REST API、Databricks SDK、Python API、または Serving UI を使用して削除できます。
エンドポイントの正常性の監視
特徴量サービングエンドポイントで利用可能なログとメトリクスについては、 「モデルの品質とエンドポイントの健全性の監視」を参照してください。
アクセス制御
Feature Servingエンドポイントの権限に関する情報については、 「モデルサービング エンドポイントの権限を管理する」を参照してください。