分享方式:


建立生成式 AI 模型服務端點

在本文中,您將了解如何建立模型服務端點,以部署及服務生成式 AI 模型。

Mosaic AI Model Serving 支援下列模型:

  • 外部模型。 這些是託管在 Databricks 外部的生成式模型。 服務外部模型的端點可以集中控管,客戶可以為其建立速率限制和存取控制。 範例包括生成式 AI 模型,例如 OpenAI 的 GPT-4、Anthropic 的 Claude 以及其他。

  • 基礎模型 API 所提供的最先進的開放式基礎模型。 這些模型是精心策劃的基礎模型架構,可支援最佳化的推斷。 基本模型,例如 Meta-Llama-3.1-70B-指示、GTE-Large 和 Mistral-7B,可用於立即搭配 按令牌 付費定價使用。 使用基本模型或微調模型的生產工作負載可以使用佈建的輸送量來部署,並能保證效能。

模型服務提供下列選項來建立模型服務端點:

  • 服務 UI
  • REST API
  • MLflow 部署 SDK

如需建立為傳統 ML 或 Python 模型提供服務的端點,請參閱建立自訂模型服務端點

需求

  • 支援區域中的 Databricks 工作區。
  • 若要使用 MLflow 部署 SDK 建立端點,必須安裝 MLflow 部署用戶端。 若要進行安裝,請執行:
import mlflow.deployments

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

建立基礎模型服務端點

您可以建立端點,為使用基礎模型 API 佈建輸送量所提供的基礎模型微調變體提供服務。 請參閱使用 REST API 建立佈建的輸送量端點

針對使用基礎模型 API 按權杖付費所提供的基礎模型,Databricks 會自動提供特定端點來存取 Databricks 工作區中支援的模型。 若要存取它們,請選取工作區左側邊欄中的 [服務] 索引標籤。 基礎模型 API 位於 [端點] 清單檢視的頂端。

如需查詢這些端點,請參閱 查詢產生 AI 模型

建立外部模型服務端點

以下內容說明如何建立端點,它可服務於使用 Databricks 外部模型提供的生成式 AI 模型。

服務 UI

  1. 在 [名稱] 欄位中,提供端點的名稱。
  2. 在 [服務的實體] 區段中
    1. 按一下 [實體] 欄位,以開啟 [選取服務實體] 窗體。
    2. 選取 [外部模型]。
    3. 選取您想要使用的模型提供者。
    4. 按一下 [確認]
    5. 提供您想要使用的外部模型名稱。 表單會根據您的選擇動態更新。 請參閱可用的外部模型
    6. 選取工作型別。 可用的工作包括聊天、完成和內嵌。
    7. 提供存取所選模型提供者的組態詳細資料。 這通常是參考您要端點用來存取此模型的個人存取權杖的祕密。
  3. 按一下 [建立]。 [服務端點] 頁面隨即出現,[服務端點狀態] 顯示為 [未就緒]。

建立模型服務端點

REST API

重要

用來建立服務外部模型的服務端點的 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
}

MLflow 部署 SDK

下列操作會建立端點,以使用 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 時,服務實體清單只能有一個 served_entity 物件。 具有 external_model 的現有端點無法更新為不再擁有 external_model。 如果建立的端點沒有 external_model,則您無法更新它以新增 external_model

REST API

若要更新端點,請參閱 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}}"
        }
      }
    }
  ]
}

MLflow 部署 SDK

若要更新端點,請參閱 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,
        }
    ],
}

其他資源