Databricks の特徴量サービングとは何ですか?

Databricks 特徴量サービングにより、Databricks プラットフォーム内のデータが Databricks の外部にデプロイされたモデルまたはアプリケーションで利用できるようになります。 特徴量サービングエンドポイントは、リアルタイム トラフィックに合わせて自動的にスケーリングし、機能を提供するための高可用性、低遅延サービスを提供します。 このページでは、特徴量サービングの設定方法と使用方法について説明します。

Databricks モデルサービングを使用して、Databricks の機能を使用して構築されたモデルを提供すると、モデルは推論リクエストの機能を自動的に検索して変換します。 Databricks 特徴量サービングを使用すると、検索拡張生成 (RAG) アプリケーションの構造化データだけでなく、Databricks の外部で提供されるモデルや、 Unity Catalog内のデータに基づく機能を必要とするその他のアプリケーションなど、他のアプリケーションに必要な機能も提供できます。 。

特徴量サービングを使用する場合

特徴量サービングを使用する理由

Databricks 特徴量サービングは、事前にマテリアライズされた機能とオンデマンドの機能を提供する単一のインターフェイスを提供します。 また、次の利点もあります。

  • 簡略。 Databricks がインフラストラクチャを処理します。 Databricks は、1 回の API 呼び出しで、本番運用に対応したサービス環境を作成します。

  • 高可用性とスケーラビリティ。 特徴量サービングエンドポイントは、処理要求の量に合わせて自動的にスケールアップおよびスケールダウンします。

  • 安全。 エンドポイントはセキュリティで保護されたネットワーク境界にデプロイされ、エンドポイントが削除されるかゼロにスケーリングされたときに終了する専用のコンピュートを使用します。

要件

  • Databricks Runtime 14.2 機械学習以上。

  • Python API を使用するには、特徴量サービングにはdatabricks-feature-engineeringバージョン 0.1.2 が必要です 以降。Databricks Runtime 14.2 機械学習に組み込まれています。 以前の Databricks Runtime 機械学習バージョンの場合は、 %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で指定するテーブルは、オンラインストアまたはオンラインテーブルに公開する必要があります。機能をオンラインストアに公開する方法については、「 オンラインストアへの機能の公開」を参照してください。 オンライン テーブルの詳細については、「 オンライン テーブルを使用してリアルタイムの特徴量サービングを行う」を参照してください。

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",
    features=["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 の左側のサイドバーにある [サービス] をクリックします。 状態が Ready の場合、エンドポイントはクエリーに応答する準備ができています。 Databricks モデルサービングの詳細については、「 Databricks モデルサービング」を参照してください。

エンドポイントを取得する

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、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 はワークスペース ユーザーではなくサービスプリンシパルに属する個人アクセスマラソンを使用することをお勧めします。 サービスプリンシパルのトークンを作成するには、 「サービスプリンシパルのトークンの管理」を参照してください。

APIs使用してエンドポイントをクエリする

このセクションには、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 SDKpredict() 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. Databricks ワークスペースの左側のサイドバーで、 [Serving]をクリックします。

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

  3. 画面右上の [クエリー endpoint] をクリックします。

    クエリー endpoint button
  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 で生成されたサンプルコードが含まれています。タブをクリックして、サンプルコードを表示してコピーします。

クエリー endpoint dialog

コードをコピーするには、テキストボックスの右上にあるコピーアイコンをクリックします。

クエリー [エンドポイント] ダイアログの [コピー] ボタン

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

REST API、Databricks SDK、または Serving UI を使用してエンドポイントを更新できます。

APIs使用してエンドポイントを更新する

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 を使用するには、次のステップに従ってください。

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

  2. テーブルで、更新するエンドポイントの名前をクリックします。 エンドポイント画面が表示されます。

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

  4. [ サービス エンドポイントの編集 ] ダイアログで、必要に応じてエンドポイントの設定を編集します。

  5. 更新 」をクリックして、変更を保存します。

エンドポイントの更新

エンドポイントの削除

警告

この操作は元に戻せません。

エンドポイントは、REST API、Databricks SDK、Python API、または Serving UI を使用して削除できます。

APIs使用してエンドポイントを削除する

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 を使用したエンドポイントの削除

サービス提供 UI を使用してエンドポイントを削除するには、次のステップに従います。

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

  2. テーブルで、削除するエンドポイントの名前をクリックします。 エンドポイント画面が表示されます。

  3. 画面の右上にあるケバブメニュー ケバブメニュー をクリックし、[ 削除]を選択します。

エンドポイントの削除

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

特徴量サービングエンドポイントで利用可能なログとメトリクスについては、 「モデルの品質とエンドポイントの健全性の監視」を参照してください。

アクセス制御

Feature Servingエンドポイントの権限に関する情報については、 「モデルサービング エンドポイントの権限を管理する」を参照してください。

ノートブックの例

次のノートブックは、Databricks SDK を使用して、Databricks Online Tables を使用して特徴量サービングエンドポイントを作成する方法を示しています。

機能オンラインテーブルを備えた特徴量サービングサンプルノートブック

ノートブックを新しいタブで開く

次のノートブックは、Databricks SDK を使用して、サードパーティのオンライン ストアを使用して特徴量サービングエンドポイントを作成する方法を示しています。

DynamoDB を使用した特徴量サービングサンプルノートブック

ノートブックを新しいタブで開く