AIモデル生成エンドポイントを作成する

この記事では、生成AIモデルを提供するモデル エンドポイントを作成する方法を学習します。

Mosaic AI Model Serving は、次の基盤モデルをサポートしています。

  • 基盤モデルAPIsによって提供される最先端のオープン基盤モデル。 これらのモデルは、最適化された推論をサポートする厳選された基盤モデル アーキテクチャです。 Llama-2-70B-chat、BGE-Large、 Mistral -7B などの基本モデルは、トークン単位の従量課金価格ですぐに使用できます。 ベースモデルまたは微調整されたモデルを使用する本番運用ワークロードは、パフォーマンス保証を使用してデプロイできます。

  • 外部モデル。 これらは、Databricks の外部でホストされるモデルです。 外部モデルにサービスを提供するエンドポイントは一元的に管理でき、顧客はレート制限とアクセス制御を確立できます。 例には、OpenAI の GPT-4、Anthropic の Claude などの基盤モデルが含まれます。

モデルサービングには、モデルサービング エンドポイント作成用の次のオプションが用意されています。

  • サービング UI

  • REST API

  • MLflow デプロイメント SDK

従来の機械学習または Python モデルにサービスを提供するエンドポイントの作成については、 「カスタム モデルサービング エンドポイントの作成」を参照してください。

要件

  • サポートされているリージョンの Databricks ワークスペース。

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

import mlflow.deployments

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

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

基盤モデルAPIsを使用して利用可能になる基盤モデルの微調整されたバリアントを提供するエンドポイントを作成できます。 REST API を使用してプロビジョニングされたスループット エンドポイントを作成するを参照してください。

基盤モデルAPIsトークン単位の従量課金を使用して利用可能になる 基盤モデルの場合、 Databricks 、 Databricksワークスペースでサポートされているモデルにアクセスするための特定のエンドポイントを自動的に提供します。 アクセスするには、ワークスペースの左側のサイドバーにある[サービング]タブを選択します。 基盤モデルAPIs 、エンドポイント リスト ビューの上部にあります。

これらのエンドポイントをクエリするには、 「クエリ基盤モデル」を参照してください。

外部モデルサービングエンドポイントを作成する

以下では、 外部モデルを使用して利用可能になる生成AI Databricksモデルを提供するエンドポイントを作成する方法について説明します。

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

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

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

    2. [外部モデル] を選択します。

    3. 使用するモデル プロバイダーを選択します。

    4. 確認」をクリックします。

    5. 使用する外部モデルの名前を指定します。 フォームは、選択内容に基づいて動的に更新されます。 利用可能な外部モデルを参照してください。

    6. タスクの種類を選択します。 利用可能なタスクは、チャット、完了、埋め込みです。

    7. 選択したモデル プロバイダーにアクセスするための構成の詳細を指定します。 これは通常、エンドポイントがこのモデルにアクセスするために使用する個人用アクセストークンを参照するシークレットです。

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

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

重要

外部モデルを提供するサービス エンドポイントを作成するためのREST API 、パブリック プレビュー段階です。

次の例では、OpenAI が提供する text-embedding-ada-002 モデルの最初のバージョンを提供するエンドポイントを作成します。

POST /api/2.0/serving-endpoints を参照してください。 エンドポイント構成の問題。

{
  "name": "openai_endpoint",
  "config":{
    "served_entities": [
      {
        "name": "openai_embeddings",
        "external_model":{
          "name": "text-embedding-ada-002",
          "provider": "openai",
          "task": "llm/v1/embeddings",
          "openai_config":{
            "openai_api_key": "{{secrets/my_scope/my_openai_api_key}}"
          }
        }
      }
    ]
  },
  "rate_limits": [
    {
      "calls": 100,
      "key": "user",
      "renewal_period": "minute"
    }
  ],
  "tags": [
    {
      "key": "team",
      "value": "gen-ai"
    }
  ]
}

次に、応答の例を示します。

{
  "name": "openai_endpoint",
  "creator": "user@email.com",
  "creation_timestamp": 1699617587000,
  "last_updated_timestamp": 1699617587000,
  "state": {
    "ready": "READY"
  },
  "config": {
    "served_entities": [
      {
        "name": "openai_embeddings",
        "external_model": {
          "provider": "openai",
          "name": "text-embedding-ada-002",
          "task": "llm/v1/embeddings",
          "openai_config": {
            "openai_api_key": "{{secrets/my_scope/my_openai_api_key}}"
          }
        },
        "state": {
          "deployment": "DEPLOYMENT_READY",
          "deployment_state_message": ""
        },
        "creator": "user@email.com",
        "creation_timestamp": 1699617587000
      }
  ],
    "traffic_config": {
      "routes": [
        {
          "served_model_name": "openai_embeddings",
          "traffic_percentage": 100
        }
      ]
    },
    "config_version": 1
  },
  "tags": [
    {
      "key": "team",
      "value": "gen-ai"
    }
  ],
  "id": "69962db6b9db47c4a8a222d2ac79d7f8",
  "permission_level": "CAN_MANAGE",
  "route_optimized": false
}

次に、OpenAI text-embedding-ada-002を使用した埋め込みのエンドポイントを作成します。

外部モデル エンドポイントの場合、使用するモデル プロバイダーの API キーを提供する必要があります。 リクエストとレスポンスのスキーマの詳細については、REST API のPOST /api/2.0/serving-endpointsを参照してください。 ステップバイステップのガイドについては、 「チュートリアル: OpenAI モデルをクエリするための外部モデル エンドポイントを作成する」を参照してください。

構成のexternal_modelセクションのtaskフィールドで指定されているように、完了とチャット タスクのエンドポイントを作成することもできます。 各タスクでサポートされているモデルとプロバイダーについては、Mosaic AI Model Serving の外部モデルを参照してください。


from mlflow.deployments import get_deploy_client

client = get_deploy_client("databricks")
endpoint = client.create_endpoint(
    name="chat",
    config={
        "served_entities": [
            {
                "name": "completions",
                "external_model": {
                    "name": "gpt-4",
                    "provider": "openai",
                    "task": "llm/v1/chat",
                    "openai_config": {
                        "openai_api_key": "{{secrets/scope/key}}",
                    },
                },
            }
        ],
    },
)
assert endpoint == {
    "name": "chat",
    "creator": "alice@company.com",
    "creation_timestamp": 0,
    "last_updated_timestamp": 0,
    "state": {...},
    "config": {...},
    "tags": [...],
    "id": "88fd3f75a0d24b0380ddc40484d7a31b",
}

プラットフォームモデルエンドポイントを更新する

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

新しい設定の準備が整うまで、古い設定は予測トラフィックを提供し続けます。 更新が進行中の間は、別の更新を行うことはできません。 サービング UI では、エンドポイントの詳細ページの右上にある [更新のキャンセル] を選択することで、進行中の設定の更新をキャンセルできます。 この機能は、サービング UI でのみ使用できます。

エンドポイント構成に external_model が存在する場合、提供されるエンティティリストには 1 つのserved_entityオブジェクトしか含められません。 external_modelを持つ既存のエンドポイントは、external_modelがなくなるように更新できません。エンドポイントが external_modelなしで作成された場合、エンドポイントを更新して external_modelを追加することはできません。

基盤モデルのエンドポイントを更新するには、REST API 更新構成ドキュメントでリクエストとレスポンスのスキーマの詳細を参照してください。

{
  "name": "openai_endpoint",
  "served_entities":[
    {
      "name": "openai_chat",
      "external_model":{
        "name": "gpt-4",
        "provider": "openai",
        "task": "llm/v1/chat",
        "openai_config":{
          "openai_api_key": "{{secrets/my_scope/my_openai_api_key}}"
        }
      }
    }
  ]
}

基盤モデルのエンドポイントを更新するには、REST API 更新構成ドキュメントでリクエストとレスポンスのスキーマの詳細を参照してください。

from mlflow.deployments import get_deploy_client

client = get_deploy_client("databricks")
endpoint = client.update_endpoint(
    endpoint="chat",
    config={
        "served_entities": [
            {
                "name": "chats",
                "external_model": {
                    "name": "gpt-4",
                    "provider": "openai",
                    "task": "llm/v1/chat",
                    "openai_config": {
                        "openai_api_key": "{{secrets/scope/key}}",
                    },
                },
            }
        ],
    },
)
assert endpoint == {
    "name": "chats",
    "creator": "alice@company.com",
    "creation_timestamp": 0,
    "last_updated_timestamp": 0,
    "state": {...},
    "config": {...},
    "tags": [...],
    "id": "88fd3f75a0d24b0380ddc40484d7a31b",
  }

rate_limits = client.update_endpoint(
    endpoint="chat",
    config={
        "rate_limits": [
            {
                "key": "user",
                "renewal_period": "minute",
                "calls": 10,
            }
        ],
    },
)
assert rate_limits == {
    "rate_limits": [
        {
            "key": "user",
            "renewal_period": "minute",
            "calls": 10,
        }
    ],
}