모델 서빙 엔드포인트를 위한 빠른 배포

이 페이지에서는 모델 서빙 엔드포인트에서 익스프레스 배포를 사용하는 방법을 설명합니다. 빠른 배포는 배포 시간을 낮추고 모델 서비스 환경을 모델 학습 환경과 동일하게 유지합니다.

메모

Express 배포는 이전에 서버리스 최적화 배포라고 했습니다.

신속 배포란 무엇인가요?

모델 등록 중에 Express 배포는 서버리스 노트북 환경에서 모델 아티팩트를 패키징하고 스테이징합니다. 이렇게 하면 엔드포인트 배포 속도가 빨라지고 학습 및 서비스 환경이 일관되게 유지됩니다.

비표시 배포에서는 모델 아티팩트 및 환경이 배포 시 컨테이너로 패키지되므로 서비스 환경이 모델 학습 중에 사용된 환경과 일치하지 않을 수 있습니다.

표준 및 빠른 배포

다음 표에서는 표준 배포와 빠른 배포를 비교합니다.

Aspect 표준 배포 Express 배포
환경이 빌드되는 경우 컨테이너 이미지는 배포 시 빌드됩니다. 아티팩트와 환경은 모델을 등록할 때 패키지됩니다.
교육 및 서비스 환경 서비스 환경이 학습 환경과 일치하지 않을 수 있습니다. 서비스 환경은 등록한 Notebook 환경과 동일합니다.
배포 속도 더 느림. 배포는 컨테이너 이미지 빌드를 기다립니다. 더 빠른 배포는 컨테이너 이미지 빌드를 건너뜁니다.
등록 속도 표준. 모델 및 환경 크기에 따라 패키징에 몇 초에서 1분까지 더 걸립니다.
배포 이벤트 로그 컨테이너 이미지 만들기 이벤트를 표시합니다. 컨테이너 이미지 만들기 이벤트를 표시하지 않습니다.

Express 배포는 일회성 패키징 작업을 모델 등록 시점으로 옮기므로, 모델과 환경의 크기에 따라 register_model 호출에 몇 초에서 1분가량이 더 소요됩니다. 그 대가로 배포는 훨씬 더 빠릅니다. 컨테이너 이미지 빌드를 완전히 건너뜁니다. 이 빌드는 배포 오류(종속성 확인, 이미지 빌드 오류)의 일반적인 원인이기도 하므로 빌드를 건너뛰면 전체 문제 클래스가 제거됩니다. Express 모델의 배포 이벤트 로그에는 컨테이너 빌드 이벤트가 없습니다.

Requirements

Express 배포 엔드포인트에는 엔드포인트를 제공하는 모델과 동일한 요구 사항이 있습니다. 요구 사항을 참조하세요.

또한:

  • 모델은 사용자 지정 모델이어야 합니다.
  • 모델은 Serverless Notebook에서 버전 3 이상을 사용해 기록하고 등록해야 합니다.
  • 모델을 로깅하고 등록해야 합니다.mlflow>=3.12databricks-sdk>=0.102.0
  • 모델을 Unity 카탈로그에 등록해야 합니다. 서빙 컴퓨팅은 모델 등록에 사용된 컴퓨팅과 일치해야 합니다. 일반 서버리스 노트북에서 CPU에 배포하도록 등록할 수 있으며, 서버리스 GPU 컴퓨팅에서는 GPU에 배포하도록 등록할 수 있습니다.
  • 모델의 최대 환경 크기는 200GB입니다.

메모

빠른 배포를 사용하여 GPU 컴퓨팅에서 사용자 지정 LLM을 제공하려면 사용자 지정 모델 서비스를 사용하여 사용자 지정 LLM 제공을 참조하세요.

GPU에 재순위화 모델 배포

이 안내서에서는 문서가 쿼리에 얼마나 잘 답하는지를 점수화하는 크로스 인코더 리랭커인 BAAI/bge-reranker-base를 배포합니다. 환경을 설정하고, Express 패키징을 사용해 모델을 로깅하고 등록하며, 엔드포인트를 배포한 다음 해당 엔드포인트를 쿼리합니다.

GPU 배포는 종속성 버전 충돌(예 torch : CUDA)으로 인해 실패하는 경우가 많습니다. Express 배포는 다음 두 가지 방법으로 이 문제를 해결합니다.

  • 각 서버리스 GPU 환경 버전에 사전 설치된 고정 게시 라이브러리 집합은 서빙 시에도 노트북과 정확히 동일하게 존재합니다. 즉, 환경 버전도 같고 라이브러리 버전도 같습니다. 이러한 라이브러리는 다시 패키지되지 않습니다.
  • Notebook 세션에 설치하는 모든 추가 종속성(예: 포함 %pip install)은 등록 중에 패키지되고 서비스 중에 복원됩니다.

이는 곧 노트북 환경에서 실행되는 모델이 서빙될 때도 계속 동작한다는 뜻입니다.

1단계: 서버리스 GPU Notebook 설정

A10 GPU로 서버리스 GPU 컴퓨팅에 노트북을 만들고 환경 버전 5, AI 환경을 선택합니다. AI 환경에는 PyTorch 및 일반적인 기계 학습 라이브러리(torchtransformers및 기타)가 포함됩니다. 정확한 고정 버전은 서버리스 GPU 환경 버전 5(미리 보기)를 참조하세요.

배포에 필요한 패키지를 설치합니다.

# Express deployment requires recent MLflow and Databricks SDK versions.
%pip install "mlflow>=3.12" "databricks-sdk>=0.102.0"
# Install the libraries your model needs. transformers is preinstalled in the
# v5 AI environment; install it explicitly because this model depends on it.
%pip install transformers
%restart_python

서버리스 환경을 통해 종속성을 선언할 수도 있지만 Notebook에 설치하는 것이 가장 간단한 경로입니다. 노트북 환경이 서빙 환경과 일치하도록 환경의 고정 버전을 기준으로 개발하세요.

이 모델은 GPU에서 제공되므로 서버리스 GPU 런타임에서 로그하고 등록해야 합니다. 실수로 서버리스 CPU 컴퓨팅에서 로그하는 경우 모델은 CPU 종속성으로 패키지되고 GPU 서비스 엔드포인트가 시작되지 않습니다. 노트북이 GPU 런타임에서 실행되고 있지 않은 경우 즉시 실패하도록 다음 확인을 추가하세요.

import os

# This model is intended to be served on GPU, so we must log and register from a Serverless GPU runtime.
if not os.environ.get("DATABRICKS_ACCELERATOR"):
    raise RuntimeError(
        "This model MUST be logged+registered from a serverless GPU runtime, otherwise the correct dependencies will not be packaged for serving."
    )

메모

이 확인은 리랭커가 GPU에서 실행되기 때문에만 필요합니다. CPU 모델에는 필요하지 않습니다.

2단계: MLflow를 사용하여 모델 기록

리랭커를 text-classification 파이프라인으로 로드하고 기본 mlflow.transformers flavor로 로깅합니다. 네이티브 플래버는 모델의 pip 종속성을 자동으로 기록하며 GPU에서 실행됩니다. pip_requirements, task, 또는 엔트리포인트를 설정할 필요가 없습니다.

import mlflow
from transformers import pipeline

# BAAI/bge-reranker-base is a cross-encoder reranker: it scores how well a document answers a query.
pipe = pipeline("text-classification", model="BAAI/bge-reranker-base")

model_info = mlflow.transformers.log_model(
    transformers_model=pipe,
    name="bge_reranker",
    input_example={
        "text": "What is Databricks?",
        "text_pair": "Databricks is a data and AI company.",
    },
)

Important

의 인수registered_model_namelog_model 모델을 등록하지 마세요. 해당 인수는 env_pack을(를) 허용하지 않으므로 non-express 모델을 등록합니다. 빠른 배포를 사용하도록 설정하려면 register_model을 허용하는 env_pack(3단계)에서 별도로 등록합니다.

3단계: 빠른 패키징을 사용하여 Unity 카탈로그에 모델 등록

모델을 Unity Catalog에 등록하고 빠른 배포를 활성화하도록 env_pack 매개 변수를 설정합니다. 이렇게 하면 등록하는 동안 Notebook 세션에 추가한 모델 아티팩트 및 종속성이 패키지되므로 서비스하면 환경 버전의 미리 설치된 라이브러리 위에 다시 사용됩니다.

import mlflow
from mlflow.utils.env_pack import EnvPackConfig

mlflow.set_registry_uri("databricks-uc")

model_version = mlflow.register_model(
    model_uri=model_info.model_uri,
    name="main.default.bge_reranker",
    env_pack=EnvPackConfig(name="databricks_model_serving"),
)

문자열 약어 env_pack="databricks_model_serving" 대신 EnvPackConfig(name="databricks_model_serving")사용할 수 있습니다. 인터넷 액세스가 없거나 사용자 지정 라이브러리가 있는 작업 영역의 경우 설정합니다 install_dependencies=False ( 매개 env_pack 변수 참조).

등록하려면 databricks-sdk>=0.102.0이 필요합니다. 이전 버전에서는 대용량 모델 아티팩트를 업로드할 때 시간 초과가 발생할 수 있습니다.

4단계: 서비스 엔드포인트 만들기

Azure Databricks SDK를 사용하여 등록된 모델을 배포합니다. 이 배포 단계는 사용자 지정 모델의 경우와 동일합니다. 등록 단계(3단계)만 명시에 따라 다릅니다.

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.serving import (
    EndpointCoreConfigInput,
    ServedEntityInput,
    ServingModelWorkloadType,
)

ENDPOINT_NAME = "bge-reranker-endpoint"

w = WorkspaceClient()
w.serving_endpoints.create_and_wait(
    name=ENDPOINT_NAME,
    config=EndpointCoreConfigInput(
        name=ENDPOINT_NAME,
        served_entities=[
            ServedEntityInput(
                name="bge-reranker",
                entity_name=model_version.name,
                entity_version=model_version.version,
                workload_type=ServingModelWorkloadType.GPU_SMALL,
                workload_size="Small",
                scale_to_zero_enabled=False,
            )
        ],
    ),
)

create_and_wait 는 엔드포인트가 준비될 때까지 차단합니다. GPU_SMALL이면 이 재순위화기에는 충분합니다. 서비스 기능은 동일한 환경 버전을 재사용하고 Notebook에 추가한 종속성을 복원하기 때문에 제공된 모델은 GPU 유형에 관계없이 개발한 동일한 라이브러리 버전에 대해 실행됩니다.

엔드포인트가 배포되는 동안 서비스 UI에서 엔드포인트의 이벤트 탭을 엽니다. 이는 신속 배포이므로 이벤트 로그에 컨테이너 이미지 생성 이벤트가 표시되지 않습니다(표준 배포에서는 Container image creation initiated 다음에 Container image creation finished successfully가 표시됨). 엔드포인트가 완료되면 해당 상태가 준비됨으로 표시됩니다.

5단계: 엔드포인트 쿼리

크로스 인코더는 문서에 대한 쿼리에 점수를 매기므로 texttext_pair 필드를 전송하세요. Databricks SDK 또는 curl을 사용하여 프로그래밍 방식으로 쿼리합니다.

Databricks SDK

w.serving_endpoints.query(
    name=ENDPOINT_NAME,
    dataframe_records=[
        {"text": "What is Databricks?", "text_pair": "Databricks is a data and AI company."},
    ],
)

curl

curl -X POST \
  -u "token:$DATABRICKS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"dataframe_records":[{"text":"What is Databricks?","text_pair":"Databricks is a data and AI company."}]}' \
  https://<workspace-url>/serving-endpoints/bge-reranker-endpoint/invocations

엔드포인트는 각 쿼리-문서 쌍에 대한 관련성 점수를 반환합니다. 높은 점수는 더 나은 일치를 나타냅니다. 이러한 점수를 사용하여 후보 문서의 순위를 다시 매기세요.

예제 노트

이 연습 과정을 처음부터 끝까지 실행하려면 다음 노트북을 가져오세요.

Express 리랭커 시작용 노트북

노트북 받기

env_pack 매개 변수

위의 빠른 시작에서는 GPU 모델에 대한 빠른 배포를 보여줍니다. 빠른 배포는 CPU 모델에서도 작동합니다. 모든 경우 env_packregister_model를 전달하여 익스프레스 배포를 사용하도록 설정합니다:

import mlflow
from mlflow.utils.env_pack import EnvPackConfig

mlflow.register_model(
    model_info.model_uri,
    model_name,
    env_pack=EnvPackConfig(name="databricks_model_serving"),
)

env_pack 등록 시 모델 아티팩트 및 Notebook 세션에 추가한 종속성을 압축하고 단계별로 지정하므로 등록이 호출 없이 env_pack호출하는 것보다 더 오래 걸립니다.

EnvPackConfig 는 매개 변수를 install_dependencies 허용합니다(True 기본적으로). 이 경우 True모델의 종속성이 현재 환경에 설치되어 환경이 유효한지 확인합니다.

메모

등록은 인터넷에 액세스하지 않고 작업 영역에서 실패하거나, 모델이 사용자 지정 라이브러리에 의존하는 경우(있는 경우 install_dependenciesTrue) 실패할 수 있습니다. 이러한 경우, install_dependenciesFalse로 설정합니다.

문자열 "databricks_model_serving"EnvPackConfig(...) 을 약식으로 대체할 수 있습니다. 이 값은 .에 해당합니다 EnvPackConfig(name="databricks_model_serving", install_dependencies=True).