共用方式為


管理服務端點的模型

本文說明如何使用服務 UI 和 REST API 來管理服務端點的模型。 請參閱 在 REST API 參考中提供端點

若要建立服務端點的模型,請使用下列其中一項:

取得模型端點的狀態

您可以使用 服務 UI,或使用 REST API、Databricks 工作區用戶端或 MLflow 部署 SDK 以程式設計方式檢查端點的狀態。

端點狀態可以是 ReadyReady (Update failed)Not ready (Updating)Not ready (Update failed)Not ready (Stopped)。 可查詢性是指端點是否可以被查詢。 更新失敗表示對端點的最新變更不成功。 "停止表示端點已停止。"

UI

端點詳細資料頁面頂端的 [服務端點狀態 指示器] :

使用端點詳細資料服務 UI 檢查端點狀態。

使用清單端點服務 UI 檢查端點狀態。

REST API

GET /api/2.0/serving-endpoints/{name}

在下列範例回應中,欄位 state.ready 為「READY」,這表示端點已準備好接收流量。 [state.update_state] 字段是 NOT_UPDATING,因為 pending_config 的更新已順利完成,所以不再傳回。

{
  "name": "unity-model-endpoint",
  "creator": "customer@example.com",
  "creation_timestamp": 1666829055000,
  "last_updated_timestamp": 1666829055000,
  "state": {
    "ready": "READY",
    "update_state": "NOT_UPDATING"
  },
  "config": {
    "served_entities": [
      {
        "name": "my-ads-model",
        "entity_name": "myCatalog.mySchema.my-ads-model",
        "entity_version": "1",
        "workload_size": "Small",
        "scale_to_zero_enabled": false,
        "state": {
          "deployment": "DEPLOYMENT_READY",
          "deployment_state_message": ""
        },
        "creator": "customer@example.com",
        "creation_timestamp": 1666829055000
      }
    ],
    "traffic_config": {
      "routes": [
        {
          "served_model_name": "my-ads-model",
          "traffic_percentage": 100
        }
      ]
    },
    "config_version": 1
  },
  "id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "permission_level": "CAN_MANAGE"
}

Databricks 工作區用戶端

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()
endpoint = w.serving_endpoints.get(name="my-endpoint")
print(f"Endpoint state: {endpoint.state.ready}")
print(f"Update state: {endpoint.state.config_update}")

MLflow 部署 SDK

from mlflow.deployments import get_deploy_client

client = get_deploy_client("databricks")
endpoint = client.get_endpoint(endpoint="my-endpoint")
print(f"Endpoint state: {endpoint['state']}")
print(f"Endpoint config: {endpoint['config']}")

停止提供端點的模型

您可以暫時停止提供端點的模型,稍後再加以啟動。 當端點停止時:

  • 為其配置的資源已關閉。
  • 端點在重新啟動之前無法提供查詢。
  • 只有提供 自訂模型 且沒有進行中更新的端點才能停止。
  • 已停止的端點不會計入資源配額。
  • 傳送至已停止端點的查詢會傳回 400 錯誤。

停止端點

UI

按兩下右上角的 [ 停止 ]。

使用服務 UI 停止模型服務端點。

REST API

POST /api/2.0/serving-endpoints/{name}/config:stop

啟動端點

啟動端點會建立新的組態版本,其屬性與現有已停止的組態相同。

當您準備好啟動已停止的模型服務端點時:

UI

按兩下 右上角的 [開始 ]。

使用服務 UI 啟動模型服務端點。

REST API

POST /api/2.0/serving-endpoints/{name}/config:start

刪除服務端點的模型

刪除端點會停用使用,並刪除與端點相關聯的所有資料。 您無法復原刪除。

UI

點選上方的三點菜單,然後選取 [刪除]

使用服務 UI 刪除模型服務端點。

REST API

DELETE /api/2.0/serving-endpoints/{name}

MLflow 部署 SDK

from mlflow.deployments import get_deploy_client

client = get_deploy_client("databricks")
client.delete_endpoint(endpoint="chat")

偵錯模型服務端點

有兩種類型的記錄可用來協助偵錯端點的問題:

  • 模型伺服器容器建置記錄:在建立容器時,在端點初始化期間產生。 這些日誌會擷取設定階段,包括下載模型、安裝相依性,以及設定執行階段環境。 使用這些記錄來偵錯端點無法啟動或在部署期間停滯的原因。
  • 模型伺服器日誌:在執行階段期間,當端點主動提供預測時產生。 這些日誌會從模型程式碼擷取傳入請求、模型推斷執行、執行階段錯誤和應用程式層級記錄。 使用這些日誌來偵錯預測問題或調查查詢失敗。

這兩種記錄類型也可以從 [記錄] 索引標籤中的端點 UI 存取。

取得容器組建記錄

針對服務模型的組建記錄,您可以使用下列要求。 如需詳細資訊,請參閱 模型服務的 偵錯指南。


GET /api/2.0/serving-endpoints/{name}/served-models/{served-model-name}/build-logs
{
  "config_version": 1  // optional
}

取得模型伺服器記錄

針對服務模型的模型伺服器記錄,您可以使用下列要求:


GET /api/2.0/serving-endpoints/{name}/served-models/{served-model-name}/logs

{
  "config_version": 1  // optional
}

管理模型服務端點的許可

您必須至少有服務端點的 CAN MANAGE 許可權,才能修改許可權。 如需許可權等級的詳細資訊,請參閱 提供端點 ACL

取得服務端點的許可權清單。

UI

按一下UI右上方的 許可權 按鈕。

使用服務 UI 管理模型服務端點的許可權。

Databricks 命令行介面

databricks permissions get serving-endpoints <endpoint-id>

授與使用者 jsmith@example.com 服務端點的 CAN QUERY 許可權。

databricks permissions update serving-endpoints <endpoint-id> --json '{
  "access_control_list": [
    {
      "user_name": "jsmith@example.com",
      "permission_level": "CAN_QUERY"
    }
  ]
}'

您也可以使用 許可權 API 修改服務端點許可權。

為服務端點的模型新增無伺服器預算原則

重要

這項功能 公開預覽版,不適用於服務於提供 外部模型的服務端點

無伺服器預算原則可讓您的組織在無伺服器使用量上套用自定義標籤,以取得細微的計費屬性。 如果您的工作區使用無伺服器預算原則來屬性無伺服器使用量,您可以將無伺服器預算原則新增至服務端點的模型。 請參閱 無伺服器預算政策的屬性使用方式

在模型服務端點建立期間,您可以從 [服務 UI] 中的 [ 預算 原則] 功能選取端點的無伺服器預算原則。 如果您被指派了無伺服器預算原則,您建立的所有端點都會套用該預算原則,即使您未從 預算原則 功能表中選取原則也一樣。

使用服務UI在模型服務端點建立期間新增無伺服器預算原則。

如果您有 MANAGE 現有端點的許可權,您可以從 UI 中的 [ 端點詳細 資料] 頁面編輯和新增無伺服器預算原則至該端點。

使用 Serving UI 編輯現有模型服務端點的無伺服器預算策略。

注意

如果您已獲指派無伺服器預算原則,則現有的端點不會自動標記您的原則。 如果您想要將無伺服器預算原則附加至這些端點,則必須手動更新現有的端點。

取得提供端點架構的模型

重要

支援提供端點查詢架構處於 公開預覽狀態。 此功能可在模型服務區域中取得

服務端點查詢架構是使用 JSON 格式標準 OpenAPI 規格之服務端點的正式描述。 其中包含端點的相關信息,包括端點路徑、查詢端點的詳細數據,例如要求和回應本文格式,以及每個字段的數據類型。 這項信息對於重現性案例或當您需要端點的相關信息,但您不是原始端點建立者或擁有者時很有説明。

若要取得服務端點架構的模型,服務模型必須記錄模型簽章,而且端點必須處於 READY 狀態。

下列範例示範如何使用 REST API 以程式設計方式取得服務端點架構的模型。 如需功能服務端點架構,請參閱 功能服務端點

API 所傳回的架構格式為遵循 OpenAPI 規格的 JSON 物件格式。


ACCESS_TOKEN="<endpoint-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"

架構回應詳細數據

回應是 JSON 格式的 OpenAPI 規格,通常包括 、 openapiinfoserverspaths欄位。 因為架構回應是 JSON 物件,所以您可以使用一般程式設計語言剖析它,並使用第三方工具從規格產生用戶端程式代碼。 您也可以使用 Swagger 編輯器等第三方工具將 OpenAPI 規格可視化。

回應的主要欄位包括:

  • 欄位 info.title 會顯示服務端點的名稱。
  • servers欄位一律包含一個物件,通常是url 端點基底 URL 的欄位。
  • paths回應中的物件包含端點的所有支持路徑。 物件中的索引鍵是路徑 URL。 每個 path 都可以支援多種輸入格式。 這些輸入會列在 oneOf 欄位中。

以下是端點架構回應的範例:

{
  "openapi": "3.1.0",
  "info": {
    "title": "example-endpoint",
    "version": "2"
  },
  "servers": [{ "url": "https://example.databricks.com/serving-endpoints/example-endpoint" }],
  "paths": {
    "/served-models/vanilla_simple_model-2/invocations": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "type": "object",
                    "properties": {
                      "dataframe_split": {
                        "type": "object",
                        "properties": {
                          "columns": {
                            "description": "required fields: int_col",
                            "type": "array",
                            "items": {
                              "type": "string",
                              "enum": ["int_col", "float_col", "string_col"]
                            }
                          },
                          "data": {
                            "type": "array",
                            "items": {
                              "type": "array",
                              "prefixItems": [
                                {
                                  "type": "integer",
                                  "format": "int64"
                                },
                                {
                                  "type": "number",
                                  "format": "double"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            }
                          }
                        }
                      },
                      "params": {
                        "type": "object",
                        "properties": {
                          "sentiment": {
                            "type": "number",
                            "format": "double",
                            "default": "0.5"
                          }
                        }
                      }
                    },
                    "examples": [
                      {
                        "columns": ["int_col", "float_col", "string_col"],
                        "data": [
                          [3, 10.4, "abc"],
                          [2, 20.4, "xyz"]
                        ]
                      }
                    ]
                  },
                  {
                    "type": "object",
                    "properties": {
                      "dataframe_records": {
                        "type": "array",
                        "items": {
                          "required": ["int_col", "float_col", "string_col"],
                          "type": "object",
                          "properties": {
                            "int_col": {
                              "type": "integer",
                              "format": "int64"
                            },
                            "float_col": {
                              "type": "number",
                              "format": "double"
                            },
                            "string_col": {
                              "type": "string"
                            },
                            "becx_col": {
                              "type": "object",
                              "format": "unknown"
                            }
                          }
                        }
                      },
                      "params": {
                        "type": "object",
                        "properties": {
                          "sentiment": {
                            "type": "number",
                            "format": "double",
                            "default": "0.5"
                          }
                        }
                      }
                    }
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful operation",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "predictions": {
                      "type": "array",
                      "items": {
                        "type": "number",
                        "format": "double"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}