カスタムモデルサービングエンドポイントを作成する

この記事では、Databricks モデル サービング を使用して カスタム モデル を提供するモデルサービング エンドポイントを作成する方法について説明します。

モデルサービングでは、サービング エンドポイントの作成に関して次のオプションが提供されます。

  • サービング UI

  • REST API

  • MLflow デプロイメント SDK

生成AIモデルを提供するエンドポイントの作成については、 「生成AIモデルを提供するエンドポイントの作成」を参照してください。

要件

  • ワークスペースはサポートされているリージョン内にある必要があります。

  • モデルでカスタムライブラリまたはプライベートミラーサーバーのライブラリを使用する場合は、モデルエンドポイントを作成する前に、「 Model Servingでカスタム Python ライブラリを使用する 」を参照してください。

  • MLflow Deployments SDK を使用してエンドポイントを作成するには、MLflow Deployment クライアントをインストールする必要があります。 インストールするには、次を実行します。

import mlflow.deployments

client = mlflow.deployments.get_deploy_client("databricks")

アクセス制御

エンドポイント管理のためのモデルサービング エンドポイントのアクセス制御オプションを理解するには、 「モデルサービング エンドポイントのアクセス許可を管理する」を参照してください。

また、次のこともできます。

エンドポイントを作成する

サービング UI を使用して、モデル・サービングのエンドポイントを作成できます。

  1. サイドバーの [ 配信 ] をクリックして、配信 UI を表示します。

  2. [ サービス エンドポイントの作成] をクリックします。

    Databricks UI のモデル提供ペイン

ワークスペース モデルレジストリに登録されているモデルまたは Unity Catalog のモデルの場合:

  1. [ 名前 ] フィールドに、エンドポイントの名前を入力します。

  2. [ Served entities ] セクションで、次の操作を行います

    1. [エンティティ] フィールドをクリックして、"提供エンティティの選択" フォームを開きます。

    2. 提供するモデルの種類を選択します。 フォームは、選択内容に基づいて動的に更新されます。

    3. 提供するモデルとモデル バージョンを選択します。

    4. 配信モデルにルーティングするトラフィックの割合を選択します。

    5. 使用するコンピュートのサイズを選択します。 ワークロードには、CPUまたはGPUコンピュートを使用できます。 使用可能な GPU コンピュートの詳細については、「 GPU ワークロードの種類 」を参照してください。

    6. [コンピュート スケールアウト] で、この提供モデルが同時に処理できるリクエストの数に対応するコンピュート スケールアウトのサイズを選択します。この数値は、QPS x モデルの実行時間とほぼ等しくなります。

      1. 使用可能なサイズは、0 から 4 の要求の場合は 中は 8 から 16 の要求、16 から 64 の要求の場合は です。

    7. 使用していないときにエンドポイントをゼロにスケーリングするかどうかを指定します。

    8. [詳細設定] で、エンドポイントから AWSリソースに接続するための インスタンスを追加 できます。

  3. 「作成」をクリックします。[Serving endpoints ] ページが表示され、[ Serving endpoint state ] が [Not Ready] と表示されます。

    エンドポイントを提供するモデルを作成する

エンドポイントは、REST API を使用して作成できます。 POST /api/2.0/serving-endpoints を参照してください。 エンドポイント構成パラメーターの場合。

次の例では、モデルレジストリに登録されている ads1 モデルの最初のバージョンを提供するエンドポイントを作成します。 Unity Catalogからモデルを指定するには、親カタログとスキーマ ( catalog.schema.example-model など) を含む完全なモデル名を指定します。

POST /api/2.0/serving-endpoints

{
  "name": "workspace-model-endpoint",
  "config":
  {
    "served_entities": [
      {
        "name": "ads-entity"
        "entity_name": "my-ads-model",
        "entity_version": "3",
        "workload_size": "Small",
        "scale_to_zero_enabled": true
      },
      {
        "entity_name": "my-ads-model",
        "entity_version": "4",
        "workload_size": "Small",
        "scale_to_zero_enabled": true
      }
    ],
    "traffic_config":
    {
      "routes": [
        {
          "served_model_name": "my-ads-model-3",
          "traffic_percentage": 100
        },
        {
          "served_model_name": "my-ads-model-4",
          "traffic_percentage": 20
        }
      ]
    }
  },
  "tags": [
    {
      "key": "team",
      "value": "data science"
    }
  ]
}

次に、応答の例を示します。 エンドポイントの config_update 状態は NOT_UPDATING で、提供されたモデルは READY 状態です。

{
  "name": "workspace-model-endpoint",
  "creator": "user@email.com",
  "creation_timestamp": 1700089637000,
  "last_updated_timestamp": 1700089760000,
  "state": {
    "ready": "READY",
    "config_update": "NOT_UPDATING"
  },
  "config": {
    "served_entities": [
      {
        "name": "ads-entity",
        "entity_name": "my-ads-model-3",
        "entity_version": "3",
        "workload_size": "Small",
        "scale_to_zero_enabled": true,
        "workload_type": "CPU",
      "state": {
        "deployment": "DEPLOYMENT_READY",
        "deployment_state_message": ""
      },
      "creator": "user@email.com",
      "creation_timestamp": 1700089760000
      }
    ],
    "traffic_config": {
      "routes": [
        {
          "served_model_name": "my-ads-model-3",
          "traffic_percentage": 100
        }
      ]
    },
    "config_version": 1
  },
  "tags": [
    {
      "key": "team",
      "value": "data science"
    }
  ],
  "id": "e3bd3e471d6045d6b75f384279e4b6ab",
  "permission_level": "CAN_MANAGE",
  "route_optimized": false
}

MLflow Deployments は、タスクの作成、更新、削除用の API を提供します。 これらのタスクのAPIsエンドポイントを提供するための REST API と同じ問題を受け入れます。 POST /api/2.0/serving-endpoints を参照してください。 エンドポイント構成の問題。


from mlflow.deployments import get_deploy_client

client = get_deploy_client("databricks")
endpoint = client.create_endpoint(
    name="workspace-model-endpoint",
    config={
        "served_entities": [
            {
                "name": "ads-entity"
                "entity_name": "my-ads-model",
                "entity_version": "3",
                "workload_size": "Small",
                "scale_to_zero_enabled": true
            }
        ],
        "traffic_config": {
            "routes": [
                {
                    "served_model_name": "my-ads-model-3",
                    "traffic_percentage": 100
                }
            ]
        }
    }
)

また、次のこともできます。

GPU ワークロードの種類

GPU デプロイは、次のパッケージ バージョンと互換性があります。

  • PyTorch 1.13.0 - 2.0.1

  • TensorFlow 2.5.0 - 2.13.0

  • MLflow 2.4.0 以降

GPU を使用してモデルをデプロイするには、エンドポイントの作成時、または API を使用したエンドポイント構成の更新として、エンドポイント構成にworkload_typeフィールドを含めます。 Serving UI を使用して GPU ワークロード用にエンドポイントを構成するには、 [コンピュート タイプ]ドロップダウンから目的の GPU タイプを選択します。

{
  "served_entities": [{
    "name": "ads1",
    "entity_version": "2",
    "workload_type": "GPU_MEDIUM",
    "workload_size": "Small",
    "scale_to_zero_enabled": false,
  }]
}

次の表は、サポートされている使用可能な GPU ワークロードの種類をまとめたものです。

GPU ワークロードの種類

GPU インスタンス

GPU メモリ

GPU_SMALL

1×T4

16ギガバイト

GPU_MEDIUM

1×A10G

24ギガバイト

MULTIGPU_MEDIUM

4×A10G

96ギガバイト

GPU_MEDIUM_8

8×A10G

192ギガバイト

GPU_LARGE_8

8xA100-80GB

320ギガバイト

カスタムモデルのエンドポイントを変更する

カスタム モデル エンドポイントを有効にした後、必要に応じてコンピュート構成を更新できます。 この構成は、モデルに追加のリソースが必要な場合に特に役立ちます。 ワークロードのサイズとコンピュート構成は、モデルを提供するためにどのリソースが割り当てられるかにおいて重要な役割を果たします。

新しい設定の準備が整うまで、古い設定は予測トラフィックを提供し続けます。 更新が進行中の間は、別の更新を行うことはできません。 ただし、進行中の更新は、サービング UI からキャンセルできます。

モデル エンドポイントを有効にしたら、 [ エンドポイントの編集 ] を選択して、エンドポイントのコンピュート構成を変更します。

次の操作を実行できます。

  • いくつかのワークロードサイズから選択すると、オートスケールはワークロードサイズ内で自動的に構成されます。

  • 使用していないときにエンドポイントをゼロにスケールダウンするかどうかを指定します。

  • 配信モデルにルーティングするトラフィックの割合を変更します。

進行中の設定の更新をキャンセルするには、エンドポイントの詳細ページの右上にある [更新のキャンセル ] を選択します。 この機能は、サービング UI でのみ使用できます。

以下は、REST API を使用したエンドポイント構成の更新の例です。 PUT /api/2.0/serving-endpoints/{name}/config を参照してください。

PUT /api/2.0/serving-endpoints/{name}/config

{
  "name": "unity-catalog-model-endpoint",
  "config":
  {
    "served_entities": [
      {
        "entity_name": "catalog.schema.my-ads-model",
        "entity_version": "5",
        "workload_size": "Small",
        "scale_to_zero_enabled": true
      }
    ],
    "traffic_config":
    {
      "routes": [
        {
          "served_model_name": "my-ads-model-5",
          "traffic_percentage": 100
        }
      ]
    }
  }
}

MLflow Deployments SDK は REST API と同じ問題を使用します。PUT /api/2.0/serving-endpoints/{name}/configを参照してください。 要求と応答のスキーマの詳細については、を参照してください。

次のコード サンプルでは、 Unity Catalogレジストモデルからのモデルを使用します。

import mlflow
from mlflow.deployments import get_deploy_client

mlflow.set_registry_uri("databricks-uc")
client = get_deploy_client("databricks")

endpoint = client.create_endpoint(
  name=f"{endpointname}",
  config={
    "served_entities": [
        {
            "entity_name": f"{catalog}.{schema}.{model_name}",
            "entity_version": "1",
            "workload_size": "Small",
            "scale_to_zero_enabled": True
        }
    ],
    "traffic_config": {
        "routes": [
            {
                "served_model_name": f"{model_name}-1",
                "traffic_percentage": 100
            }
        ]
    }
  }
)

モデルエンドポイントのスコアリング

モデルにスコアを付けるには、リクエストをモデルサービング エンドポイントに送信します。

ノートブックの例

次のノートブックには、モデルサービング エンドポイントを起動して実行するために使用できるさまざまな Databricks 登録済みモデルが含まれています。

モデルの例は、「 ノートブックのインポート」の指示に従ってワークスペースにインポートできます。 いずれかの例からモデルを選択して作成したら、 Unity Catalogで登録する モデルサービングの UI ワークフロー ステップに従います。

モデルサービングのためのScikit-Learn モデルのトレーニングと登録ノートブック

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

モデルサービングのためのHuggingFaceモデルのトレーニングと登録ノートブック

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