다음을 통해 공유


엔드포인트를 제공하는 모델 관리

이 문서에서는 서비스 UI 및 REST API를 사용하여 모델 서비스 엔드포인트를 관리하는 방법을 설명합니다. REST API 참조에서 서비스 엔드포인트를 참조하세요.

엔드포인트를 제공하는 모델을 만들려면 다음 중 하나를 사용합니다.

모델 엔드포인트의 상태 가져오기

서비스 UI에서 엔드포인트의 세부 정보 페이지 맨 위에 있는 서비스 엔드포인트 상태 표시기에서 엔드포인트의 상태 검사 수 있습니다.

REST API 또는 MLflow 배포 SDK를 사용하여 프로그래밍 방식으로 엔드포인트의 상태 및 세부 정보를 검사 사용할 수 있습니다.

Rest API

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

다음 예제에서는 모델 레지스트리에 등록된 모델의 첫 번째 버전을 제공하는 엔드포인트의 ads1 세부 정보를 가져옵니다. Unity 카탈로그에서 모델을 지정하려면 부모 카탈로그 및 스키마(예: catalog.schema.example-model.)를 포함한 전체 모델 이름을 제공합니다.

다음 예제 응답 state.ready 에서 필드는 "READY"이며, 이는 엔드포인트가 트래픽을 받을 준비가 됨을 의미합니다. 업데이트가 NOT_UPDATINGpending_config 성공적으로 완료되었으므로 필드 state.update_state 가 더 이상 반환되지 않습니다.

{
  "name": "workspace-model-endpoint",
  "creator": "customer@example.com",
  "creation_timestamp": 1666829055000,
  "last_updated_timestamp": 1666829055000,
  "state": {
    "ready": "READY",
    "update_state": "NOT_UPDATING"
  },
  "config": {
    "served_entities": [
      {
        "name": "ads1-1",
        "entity_name": "ads1",
        "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": "ads1-1",
          "traffic_percentage": 100
        }
      ]
    },
    "config_version": 1
  },
  "id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "permission_level": "CAN_MANAGE"
}

Mlflow 배포 sdk

from mlflow.deployments import get_deploy_client

client = get_deploy_client("databricks")
endpoint = client.get_endpoint(endpoint="chat")
assert endpoint == {
    "name": "chat",
    "creator": "alice@company.com",
    "creation_timestamp": 0,
    "last_updated_timestamp": 0,
    "state": {...},
    "config": {...},
    "tags": [...],
    "id": "88fd3f75a0d24b0380ddc40484d7a31b",
}

엔드포인트를 제공하는 모델 삭제

모델에 대한 서비스를 사용하지 않도록 설정하려면 제공된 엔드포인트를 삭제할 수 있습니다.

서비스 UI의 엔드포인트 세부 정보 페이지에서 엔드포인트를 삭제할 수 있습니다.

  1. 사이드바에서 서비스(Serving)를 클릭합니다.
  2. 삭제할 엔드포인트를 클릭합니다.
  3. 위쪽의 케밥 메뉴를 클릭하고 삭제를 선택합니다.

또는 REST API 또는 MLflow 배포 SDK를 사용하여 프로그래밍 방식으로 서비스 엔드포인트를 삭제할 수 있습니다.

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 제공을 참조 하세요.

서비스 엔드포인트에 대한 사용 권한 목록을 가져옵니다.

databricks permissions get servingendpoints <endpoint-id>

사용자에게 jsmith@example.com 서비스 엔드포인트에 대한 CAN QUERY 권한을 부여합니다.

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

권한 API를 사용하여 서비스 엔드포인트 권한을 수정할 수도 있습니다.

엔드포인트 스키마를 제공하는 모델 가져오기

Important

엔드포인트 쿼리 스키마를 제공하는 지원은 공개 미리 보기제공됩니다. 이 기능은 모델 서비스 지역에서 사용할 수 있습니다.

서비스 엔드포인트 쿼리 스키마는 JSON 형식의 표준 OpenAPI 사양을 사용하는 서비스 엔드포인트에 대한 공식적인 설명입니다. 엔드포인트 경로, 요청 및 응답 본문 형식과 같은 엔드포인트 쿼리에 대한 세부 정보 및 각 필드에 대한 데이터 형식을 포함한 엔드포인트에 대한 정보가 포함됩니다. 이 정보는 재현성 시나리오 또는 엔드포인트에 대한 정보가 필요한 경우 유용할 수 있지만 원래 엔드포인트 작성자 또는 소유자는 아닙니다.

엔드포인트 스키마를 제공하는 모델을 얻으려면 제공된 모델에 모델 서명이 기록되고 엔드포인트가 상태에 있어야 READY 합니다.

다음 예제에서는 REST API를 사용하여 엔드포인트 스키마를 제공하는 모델을 프로그래밍 방식으로 가져오는 방법을 보여 줍니다. 엔드포인트 스키마를 제공하는 기능은 Databricks 기능 제공이란?을 참조하세요.

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 사양으로, 일반적으로 , openapiinfoservers 및 .paths 스키마 응답은 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"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}