次の方法で共有


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 を使うのか

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 には、エンドポイントのクエリの実行に使用できる、生成されたコード例が含まれます。

  1. Azure Databricks ワークスペースの左側のサイドバーで、[ サービス] をクリックします。

  2. クエリを実行するエンドポイントをクリックします。

  3. 画面の右上にある [ クエリ エンドポイント] をクリックします。

    [クエリ エンドポイント] ボタン

  4. [ 要求 ] ボックスに、JSON 形式で要求本文を入力します。

  5. [ 要求の送信] をクリックします。

// 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 を使用するには、次の手順に従ってください。

  1. Azure Databricks ワークスペースの左側のサイドバーで、[ サービス] をクリックします。
  2. テーブルで、更新するエンドポイントの名前をクリックします。 エンドポイント画面が表示されます。
  3. 画面の右上にある [ エンドポイントの編集] をクリックします。
  4. [ サービス エンドポイントの編集] ダイアログで、必要に応じてエンドポイント設定を編集します。
  5. [ 更新 ] をクリックして変更を保存します。

エンドポイントを更新する

エンドポイントの削除

警告

この操作は、元に戻すことはできません。

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 を使用してエンドポイントを削除するには、次の手順に従ってください。

  1. Azure Databricks ワークスペースの左側のサイドバーで、[ サービス] をクリックします。
  2. テーブルで、削除するエンドポイントの名前をクリックします。 エンドポイント画面が表示されます。
  3. 画面の右上にある Kebab メニューの [Kebab] メニュー アイコン をクリックし、[削除] を選択 します

エンドポイントを削除する

エンドポイントの正常性の監視

Feature Serving エンドポイントで使用できるログとメトリックの詳細については、「モデルの 品質とエンドポイントの正常性の監視」を参照してください。

アクセス制御

Feature Serving エンドポイントに対するアクセス許可の詳細については、「モデル サービス エンドポイント に対するアクセス許可を管理する」を参照してください

ノートブックの例

このノートブックには、Databricks SDK を使用して、Databricks オンライン テーブルを使用し、Feature Serving エンドポイントを作成する方法が示されています。

オンライン テーブルを使用した Feature Serving のノートブック例

ノートブックを取得する