다음을 통해 공유


엔드포인트를 제공하는 사용자 지정 모델 만들기

이 문서에서는 Databricks 모델 서비스를 사용하여 사용자 지정 모델을 제공하는 엔드포인트를 제공하는 모델을 만드는 방법을 설명합니다.

모델 제공은 엔드포인트 만들기를 제공하기 위한 다음 옵션을 제공합니다.

  • 서비스용 UI
  • REST API (REST 애플리케이션 프로그래밍 인터페이스)
  • MLflow 배포에 대한 SDK

생성 AI 모델을 제공하는 엔드포인트를 만들려면 엔드포인트를 제공하는 기본 모델 만들기를 참조하세요.

요구 사항

  • 작업 영역은 지원되는 지역에 있어야 합니다.
  • 모델과 함께 프라이빗 미러 서버의 사용자 지정 라이브러리 또는 라이브러리를 사용하는 경우 모델 엔드포인트를 만들기 전에 모델 제공과 함께 사용자 지정 Python 라이브러리 사용을 참조하세요.
  • MLflow 배포 SDK를 사용하여 엔드포인트를 만들려면 MLflow 배포 클라이언트를 설치해야 합니다. 설치하려면 다음을 실행합니다.
import mlflow.deployments

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

접근 제어

엔드포인트 관리를 위해 엔드포인트를 제공하는 모델에 대한 액세스 제어 옵션을 이해하려면 엔드포인트를 제공하는 모델에 대한 권한 관리를 참조하세요.

엔드포인트를 제공하는 모델이 실행되는 ID는 엔드포인트의 원래 작성자와 연결됩니다. 엔드포인트를 만든 후에는 엔드포인트에서 연결된 ID를 변경하거나 업데이트할 수 없습니다. 이 ID 및 관련 권한은 배포를 위해 Unity 카탈로그 리소스에 액세스하는 데 사용됩니다. ID에 필요한 Unity 카탈로그 리소스에 액세스할 수 있는 적절한 권한이 없는 경우 엔드포인트를 삭제하고 해당 Unity 카탈로그 리소스에 액세스할 수 있는 사용자 또는 서비스 주체에서 다시 만들어야 합니다.

환경 변수를 추가하여 모델 제공을 위한 자격 증명을 저장할 수도 있습니다. 엔드포인트를 제공하는 모델에서 리소스에 대한 액세스 구성을 참조하세요.

엔드포인트 만들기

사용자 인터페이스 서비스

서비스 UI를 사용하여 모델 서비스용 엔드포인트를 만들 수 있습니다.

  1. 사이드바에서 [서비스] 를 클릭하여 서비스 UI를 표시합니다.

  2. 서비스 엔드포인트 만들기를 클릭합니다.

    Databricks UI의 모델 서비스 창

작업 영역 모델 레지스트리 또는 Unity 카탈로그의 모델에 등록된 모델의 경우:

  1. 이름 필드에서 엔드포인트의 이름을 제공합니다.

    • 엔드포인트 이름은 접두사를 databricks- 사용할 수 없습니다. 이 접두사는 미리 구성된 Databricks 엔드포인트용으로 예약되어 있습니다.
  2. 서비스된 엔터티 섹션에서

    1. 엔터티 필드를 클릭하여 제공된 엔터티 선택 양식을 엽니다.
    2. 모델이 등록된 위치에 따라 내 모델- Unity 카탈로그 또는 내 모델- 모델 레지스트리 를 선택합니다. 선택한 항목에 따라 양식이 동적으로 업데이트됩니다.
      • 모든 모델이 사용자 지정 모델이 아닙니다. 모델은 기능 제공을 위한 기본 모델 또는 기능일 수 있습니다.
    3. 제공하려는 모델 및 모델 버전을 선택합니다.
    4. 제공된 모델로 라우팅할 트래픽의 비율을 선택합니다.
    5. 사용할 컴퓨팅 크기를 선택합니다. 워크로드에 CPU 또는 GPU 컴퓨팅을 사용할 수 있습니다. 사용 가능한 GPU 컴퓨팅에 대한 자세한 내용은 GPU 워크로드 유형을 참조하세요.
    6. 컴퓨팅 스케일 아웃에서 이 제공된 모델이 동시에 처리할 수 있는 요청 수에 해당하는 컴퓨팅 스케일 아웃의 크기를 선택합니다. 이 숫자는 QPS x 모델 런타임과 거의 같아야 합니다. 고객 정의 컴퓨팅 설정은 모델 서비스 제한을 참조하세요.
      1. 사용 가능한 크기는 0-4개 요청의 경우 음, 중간 8-16개 요청, 16~64개 요청의 경우 입니다.
    7. 사용하지 않을 때 엔드포인트의 크기를 0으로 조정할지 지정합니다. 용량을 0으로 확장할 때는 용량이 보장되지 않으므로 프로덕션 엔드포인트에는 0으로 크기 조정하지 않는 것이 좋습니다. 엔드포인트가 0으로 확장되면 엔드포인트가 요청을 처리하도록 다시 확장되는 경우 콜드 시작이라고도 하는 추가 대기 시간이 있습니다.
    8. 고급 구성에서 다음을 수행할 수 있습니다.
      • 엔드포인트에 표시되는 방식을 사용자 지정하려면 제공된 엔터티의 이름을 바꿉니다.
      • 환경 변수를 추가하여 엔드포인트에서 리소스에 연결 하거나 기능 조회 데이터 프레임 을 엔드포인트의 유추 테이블에 기록합니다. 기능 조회 데이터 프레임을 로깅하려면 MLflow 2.14.0 이상이 필요합니다.
    9. (선택 사항) 엔드포인트에 제공된 엔터티를 추가하려면 제공된 엔터티 추가 를 클릭하고 위의 구성 단계를 반복합니다. 단일 엔드포인트에서 여러 모델 또는 모델 버전을 제공하고 둘 사이의 트래픽 분할을 제어할 수 있습니다. 자세한 내용은 여러 모델 제공 을 참조하세요.
  3. 경로 최적화 섹션에서 엔드포인트에 대한 경로 최적화를 사용하도록 설정할 수 있습니다. 경로 최적화는 QPS 및 처리량 요구 사항이 높은 엔드포인트에 권장됩니다. 엔드포인트 제공에 대한 경로 최적화를 참조하세요.

  4. AI 게이트웨이 섹션에서 엔드포인트에서 사용하도록 설정할 거버넌스 기능을 선택할 수 있습니다. Mosaic AI Gateway 소개를 참조하세요.

  5. 만들기를 클릭합니다. 서비스 엔드포인트 페이지에 서비스 엔드포인트 상태가 준비되지 않음으로 표시됩니다.

    엔드포인트를 제공하는 모델 만들기

REST API (REST 애플리케이션 프로그래밍 인터페이스)

REST API를 사용하여 엔드포인트를 만들 수 있습니다. 엔드포인트 구성 매개 변수 는 POST /api/2.0/serving-endpoints 를 참조하세요.

다음 예제에서는 Unity 카탈로그 모델 레지스트리에 등록된 my-ads-model 모델의 세 번째 버전을 제공하는 엔드포인트를 만듭니다. Unity 카탈로그에서 모델을 지정하려면 부모 카탈로그 및 스키마(예: catalog.schema.example-model)를 포함한 전체 모델 이름을 제공합니다. 이 예제에서는 사용자 지정 정의 동시성 및 min_provisioned_concurrencymax_provisioned_concurrency을(를) 사용합니다. 동시성 값은 4의 배수여야 합니다.


POST /api/2.0/serving-endpoints

{
  "name": "uc-model-endpoint",
  "config":
  {
    "served_entities": [
      {
        "name": "ads-entity",
        "entity_name": "catalog.schema.my-ads-model",
        "entity_version": "3",
        "min_provisioned_concurrency": 4,
        "max_provisioned_concurrency": 12,
        "scale_to_zero_enabled": false
      }
    ]
  }
}

다음은 응답 예입니다. 엔드포인트의 config_update 상태는 NOT_UPDATING이며, 제공된 모델은 READY 상태에 있습니다.

{
  "name": "uc-model-endpoint",
  "creator": "user@email.com",
  "creation_timestamp": 1700089637000,
  "last_updated_timestamp": 1700089760000,
  "state": {
    "ready": "READY",
    "config_update": "NOT_UPDATING"
  },
  "config": {
    "served_entities": [
      {
        "name": "ads-entity",
        "entity_name": "catalog.schema.my-ads-model",
        "entity_version": "3",
        "min_provisioned_concurrency": 4,
        "max_provisioned_concurrency": 12,
        "scale_to_zero_enabled": false,
        "workload_type": "CPU",
        "state": {
          "deployment": "DEPLOYMENT_READY",
          "deployment_state_message": ""
        },
        "creator": "user@email.com",
        "creation_timestamp": 1700089760000
      }
    ],
    "config_version": 1
  },
  "tags": [
    {
      "key": "team",
      "value": "data science"
    }
  ],
  "id": "e3bd3e471d6045d6b75f384279e4b6ab",
  "permission_level": "CAN_MANAGE",
  "route_optimized": false
}

MLflow 배포에 대한 SDK

MLflow 배포는 만들기, 업데이트 및 삭제 작업을 위한 API를 제공합니다. 이러한 작업에 대한 API는 엔드포인트를 제공하기 위한 REST API와 동일한 매개 변수를 허용합니다. 엔드포인트 구성 매개 변수 는 POST /api/2.0/serving-endpoints 를 참조하세요.

다음 예제에서는 Unity 카탈로그 모델 레지스트리에 등록된 my-ads-model 모델의 세 번째 버전을 제공하는 엔드포인트를 만듭니다. 부모 카탈로그 및 스키마(예: catalog.schema.example-model)를 포함한 전체 모델 이름을 제공해야 합니다. 이 예제에서는 사용자 지정 정의 동시성 및 min_provisioned_concurrencymax_provisioned_concurrency을(를) 사용합니다. 동시성 값은 4의 배수여야 합니다.

import mlflow
from mlflow.deployments import get_deploy_client

mlflow.set_registry_uri("databricks-uc")
client = get_deploy_client("databricks")

endpoint = client.create_endpoint(
    name="unity-catalog-model-endpoint",
    config={
        "served_entities": [
            {
                "name": "ads-entity",
                "entity_name": "catalog.schema.my-ads-model",
                "entity_version": "3",
                "min_provisioned_concurrency": 4,
                "max_provisioned_concurrency": 12,
                "scale_to_zero_enabled": False
            }
        ]
    }
)

작업 영역 클라이언트

다음 예제에서는 Databricks 작업 영역 클라이언트 SDK를 사용하여 엔드포인트를 만드는 방법을 보여 줍니다.

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.serving import EndpointCoreConfigInput, ServedEntityInput

w = WorkspaceClient()

w.serving_endpoints.create(
    name="uc-model-endpoint",
    config=EndpointCoreConfigInput(
        served_entities=[
            ServedEntityInput(
                name="ads-entity",
                entity_name="catalog.schema.my-ads-model",
                entity_version="3",
                workload_size="Small",
                scale_to_zero_enabled=False
            )
        ]
    )
)

또한 다음을 할 수 있습니다:

GPU 워크로드 유형

GPU 배포는 다음 패키지 버전과 호환됩니다.

  • PyTorch 1.13.0 - 2.0.1
  • TensorFlow 2.5.0 - 2.13.0
  • MLflow 2.4.0 이상

다음 예제에서는 다른 메서드를 사용하여 GPU 엔드포인트를 만드는 방법을 보여 줍니다.

사용자 인터페이스 서비스

서비스 UI를 사용하여 GPU 워크로드에 대한 엔드포인트를 구성하려면 엔드포인트를 만들 때 컴퓨팅 유형 드롭다운에서 원하는 GPU 유형을 선택합니다. 엔드포인트 만들기에서 동일한 단계를 수행하지만 CPU 대신 GPU 워크로드 유형을 선택합니다.

REST API (REST 애플리케이션 프로그래밍 인터페이스)

GPU를 사용하여 모델을 배포하려면 엔드포인트 구성에 workload_type 필드를 포함합니다.

POST /api/2.0/serving-endpoints

{
  "name": "gpu-model-endpoint",
  "config": {
    "served_entities": [{
      "entity_name": "catalog.schema.my-gpu-model",
      "entity_version": "1",
      "workload_type": "GPU_SMALL",
      "workload_size": "Small",
      "scale_to_zero_enabled": false
    }]
  }
}

MLflow 배포에 대한 SDK

다음 예제에서는 MLflow 배포 SDK를 사용하여 GPU 엔드포인트를 만드는 방법을 보여 줍니다.

import mlflow
from mlflow.deployments import get_deploy_client

mlflow.set_registry_uri("databricks-uc")
client = get_deploy_client("databricks")

endpoint = client.create_endpoint(
    name="gpu-model-endpoint",
    config={
        "served_entities": [{
            "entity_name": "catalog.schema.my-gpu-model",
            "entity_version": "1",
            "workload_type": "GPU_SMALL",
            "workload_size": "Small",
            "scale_to_zero_enabled": False
        }]
    }
)

작업 영역 클라이언트

다음 예제에서는 Databricks 작업 영역 클라이언트 SDK를 사용하여 GPU 엔드포인트를 만드는 방법을 보여 줍니다.

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.serving import EndpointCoreConfigInput, ServedEntityInput

w = WorkspaceClient()

w.serving_endpoints.create(
    name="gpu-model-endpoint",
    config=EndpointCoreConfigInput(
        served_entities=[
            ServedEntityInput(
                entity_name="catalog.schema.my-gpu-model",
                entity_version="1",
                workload_type="GPU_SMALL",
                workload_size="Small",
                scale_to_zero_enabled=False
            )
        ]
    )
)

다음 표에서는 지원되는 사용 가능한 GPU 워크로드 유형을 요약합니다.

GPU 워크로드 유형 GPU 인스턴스 GPU 메모리
GPU_SMALL 1xT4 16기가바이트
GPU_LARGE 1xA100 80GB
GPU_LARGE_2 2xA100 160GB

사용자 지정 모델 엔드포인트 수정

사용자 지정 모델 엔드포인트를 사용하도록 설정한 후 컴퓨팅 구성을 원하는 대로 업데이트할 수 있습니다. 이 구성은 모델에 추가 리소스가 필요한 경우에 특히 유용합니다. 워크로드 크기 및 컴퓨팅 구성은 모델 제공을 위해 할당된 리소스에 대해 중요한 역할을 수행합니다.

비고

엔드포인트 구성에 대한 업데이트가 실패할 수 있습니다. 오류가 발생하면 기존 활성 구성은 업데이트가 수행되지 않은 것처럼 유효합니다.

엔드포인트의 상태를 검토하여 업데이트가 성공적으로 적용되었는지 확인합니다.

새 구성이 준비될 때까지 이전 구성은 예측 트래픽을 계속 제공합니다. 업데이트가 진행 중이지만 다른 업데이트는 수행할 수 없습니다. 그러나 서비스 UI에서 진행 중인 업데이트를 취소할 수 있습니다.

사용자 인터페이스 서비스

모델 엔드포인트를 사용하도록 설정한 후 엔드포인트 편집을 선택하여 엔드포인트 의 컴퓨팅 구성을 수정합니다.

엔드포인트 편집 단추

엔드포인트 이름 및 변경할 수 없는 특정 속성을 제외하고 엔드포인트 구성의 대부분의 측면을 변경할 수 있습니다.

엔드포인트의 세부 정보 페이지에서 업데이트 취소를 선택하여 진행 중인 구성 업데이트를 취소 할 수 있습니다.

REST API (REST 애플리케이션 프로그래밍 인터페이스)

다음은 REST API를 사용하는 엔드포인트 구성 업데이트 예제입니다. PUT /api/2.0/serving-endpoints/{name}/config를 참조하세요.


PUT /api/2.0/serving-endpoints/{name}/config

{
  "name": "unity-catalog-model-endpoint",
  "config":
  {
    "served_entities": [
      {
        "entity_name": "catalog.schema.my-ads-model",
        "entity_version": "5",
        "workload_size": "Small",
        "scale_to_zero_enabled": true
      }
    ],
    "traffic_config":
    {
      "routes": [
        {
          "served_model_name": "my-ads-model-5",
          "traffic_percentage": 100
        }
      ]
    }
  }
}

MLflow 배포에 대한 SDK

MLflow 배포 SDK는 REST API와 동일한 매개 변수를 사용합니다. 요청 및 응답 스키마 세부 정보는 PUT /api/2.0/serving-endpoints/{name}/config 를 참조하세요.

다음 코드 샘플에서는 Unity 카탈로그 모델 레지스트리의 모델을 사용합니다.

import mlflow
from mlflow.deployments import get_deploy_client

mlflow.set_registry_uri("databricks-uc")
client = get_deploy_client("databricks")

endpoint = client.create_endpoint(
  name=f"{endpointname}",
  config={
    "served_entities": [
        {
            "entity_name": f"{catalog}.{schema}.{model_name}",
            "entity_version": "1",
            "workload_size": "Small",
            "scale_to_zero_enabled": True
        }
    ],
    "traffic_config": {
        "routes": [
            {
                "served_model_name": f"{model_name}-1",
                "traffic_percentage": 100
            }
        ]
    }
  }
)

모델 엔드포인트 점수 매기기

모델의 점수를 매기려면 엔드포인트를 제공하는 모델에 요청을 보냅니다.

추가 리소스

노트북 예제

다음 노트북에는 모델 서비스 엔드포인트를 이용하여 원활한 시작과 운영을 할 수 있는 다양한 Databricks 등록 모델이 포함되어 있습니다. 추가 예제는 자습서: 사용자 지정 모델 배포 및 쿼리를 참조하세요.

모델 예제는 Notebook 가져오기의 지침에 따라 작업 영역으로 가져올 수 있습니다. 예제 중 하나에서 모델을 선택하고 만든 후 Unity 카탈로그에 등록한 다음 모델 제공에 대한 UI 워크플로 단계를 따릅니다.

모델 서빙 노트북을 위한 scikit-learn 모델 학습 및 등록

전자 필기장 가져오기

HuggingFace 모델을 학습하고 모델 서비스 노트북에 등록하기

전자 필기장 가져오기