이 문서에서는 서비스 UI 및 REST API를 사용하여 모델 서비스 엔드포인트를 관리하는 방법을 설명합니다. REST API 참조에서 서비스 엔드포인트를 참조하세요.
엔드포인트를 제공하는 모델을 만들려면 다음 중 하나를 사용합니다.
- 엔드포인트를 제공하는 사용자 지정 모델을 만듭니다.
- 엔드포인트제공하는 기본 모델을 만듭니다.
모델 엔드포인트의 상태 가져오기
서비스 UI를 사용하거나 REST API, Databricks 작업 영역 클라이언트 또는 MLflow 배포 SDK를 사용하여 프로그래밍 방식으로 엔드포인트의 상태를 확인할 수 있습니다.
엔드포인트 상태는 Ready, Ready (Update failed), Not ready (Updating), Not ready (Update failed) 또는 Not ready (Stopped)입니다. 준비는 엔드포인트를 쿼리할 수 있는지 여부를 나타냅니다. 업데이트 실패는 엔드포인트에 대한 최신 변경이 실패했음을 나타냅니다. 중지됨은 엔드포인트가 중지되었음을 의미합니다.
사용자 인터페이스 (UI)
엔드포인트 세부 정보 페이지의 맨 위에 있는 서비스 엔드포인트 상태 표시기:
REST API (REST 애플리케이션 프로그래밍 인터페이스)
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)
오른쪽 위 모서리에서 중지를 클릭합니다.
REST API (REST 애플리케이션 프로그래밍 인터페이스)
POST /api/2.0/serving-endpoints/{name}/config:stop
엔드포인트를 시작합니다
엔드포인트를 시작하면 기존 중지된 구성과 동일한 속성을 사용하여 새 구성 버전이 만들어집니다.
엔드포인트를 제공하는 중지된 모델을 시작할 준비가 되면 다음을 수행합니다.
사용자 인터페이스 (UI)
오른쪽 위 모서리에서 시작을 클릭합니다.
REST API (REST 애플리케이션 프로그래밍 인터페이스)
POST /api/2.0/serving-endpoints/{name}/config:start
엔드포인트를 제공하는 모델 삭제
엔드포인트를 삭제하면 사용이 비활성화되고 엔드포인트와 연결된 모든 데이터가 삭제됩니다. 삭제를 취소할 수 없습니다.
사용자 인터페이스 (UI)
위쪽의 케밥 메뉴를 클릭하고삭제
REST API (REST 애플리케이션 프로그래밍 인터페이스)
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의 오른쪽 위에 있는 사용 권한 단추를 클릭합니다.
Databricks 명령줄 인터페이스 (CLI)
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의 예산 정책 메뉴에서 서버리스 예산 정책을 선택할 수 있습니다. 서버리스 예산 정책이 할당된 경우 예산 정책 메뉴에서 정책을 선택하지 않더라도 만든 모든 엔드포인트에 서버리스 예산 정책이 할당됩니다.
기존 엔드포인트에 대한 권한이 있는 MANAGE 경우 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 사양으로, 일반적으로 openapi, info, servers 및 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"
}
}
}
}
}
}
}
}
}
}
}
}