사용자 지정 모델 서비스로 사용자 지정 LLM 제공

Important

이 기능은 베타 버전으로 제공됩니다. 작업 영역 관리자는 미리 보기 페이지에서 이 기능에 대한 액세스를 제어할 수 있습니다. Azure Databricks 미리 보기 관리를 참조하세요.

이 페이지에서는 vLLM 엔진을 사용하여 모델 제공에 사용자 지정 LLM(큰 언어 모델)을 배포하는 방법을 보여 줍니다. 이 워크플로를 사용하여 FMAPI( Foundation Model API )에서 사용할 수 없는 미세 조정된 모델, PEFT 변형, 다중 모달 모델 및 기타 기초 모델을 제공합니다. 이 페이지의 끝에 있는 시작 Notebook 에는 다음 단계에 대한 모든 실행 가능한 코드가 포함되어 있습니다.

사용자 지정 LLM 서비스를 사용하는 경우

Azure Databricks 다음 사용 사례 중 하나가 있는 경우 사용자 지정 LLM 서비스를 권장합니다.

  • Azure Databricks에서 학습한 사용자 지정 가중치를 사용하는 완전히 미세 조정된 모델
  • FMAPI에서 사용할 수 없는 Hugging Face의 모델입니다.
  • FMAPI에서 지원하지 않는 사용자 지정 PEFT 레시피입니다.
  • FMAPI 카탈로그 외부의 특수 모델(예: MedGemma).
  • 멀티모달(비전 언어) 모델(예: Qwen/Qwen2.5-VL-3B-Instruct.
  • FMAPI에서 사용할 수 없는 모델 포함(예: nomic-ai/nomic-embed-text-v2-moe.)
  • 1xH100(80GB GPU 메모리)에 맞는 모든 모델입니다.

Requirements

  • 사용자 지정 LLM 서비스 베타입니다. 작업 영역 관리자는 미리 보기 페이지에서 이 기능을 사용하거나 끌 수 있습니다. Azure Databricks 미리 보기 관리를 참조하세요.

  • 서버리스 GPU 컴퓨팅. A10 GPU는 더 작은 모델에 권장되는 개발 환경이며, 더 큰 모델의 경우 H100입니다.

  • MLflow 3.12 이상 및 databricks-sdk>=0.102.0. 스타터 노트북은 mlflow==3.12.0 및 호환되는 SDK 버전을 고정합니다. 직접 환경을 구축하는 경우 다음 버전에 맞추세요. 이전 SDK 버전에서는 등록 중 모델 아티팩트를 업로드할 때 시간 초과가 발생할 수 있습니다. 등록 중 아티팩트 업로드 시간 초과 문제를 참조하세요.

1단계: 환경 설정

A10 GPU를 사용하여 서버리스 GPU 컴퓨팅 환경에서 노트북을 만드세요. vLLM 및 해당 종속성을 설치합니다. 스타터 노트북은 테스트된 vLLM 버전을 고정합니다.

을 사용하는 대신 %pip install 통해 종속성을 지정할 수도 있습니다.

Important

작업 디렉터리를 로컬 하드 드라이브(예: 사용 tempfile.mkdtemp())로 설정합니다. /Workspace 파일 시스템은 모델 가중치와 같은 대용량 파일을 지원하지 않습니다.

2단계: 모델 다운로드

Hugging Face에서 snapshot_download모델 가중치를 다운로드합니다. 스타터 노트북에서는 예시로 Qwen/Qwen3-4B를 사용하지만, 다음을 포함하여 선택한 GPU의 메모리 한도에 맞는 어떤 모델이든 대신 사용할 수 있습니다:

  • 비전-언어 사용 사례를 위한 Qwen/Qwen2.5-VL-3B-Instruct와 같은 멀티모달 모델
  • 1xH100에 맞는 더 큰 모델(예: openai/gpt-oss-120b.

모델의 메모리 및 성능 요구 사항에 따라 GPU를 선택합니다.

GPU (그래픽 처리 장치) GPU 메모리 workload_type
T4 16GB GPU_SMALL
A100 80GB GPU_LARGE

3단계: vLLM을 사용하여 로컬로 모델 테스트

배포하기 전에 로컬 vLLM 서버를 시작하여 서버리스 GPU Notebook에서 직접 모델을 테스트합니다. 로컬 테스트를 사용하면 서비스 엔드포인트를 만들기 전에 모델을 확인하고, vLLM 매개 변수를 실험하고, 문제를 해결할 수 있습니다.

알아야 할 주요 사항:

  • 서버리스 GPU 컴퓨팅은 로컬 테스트에 포트 3000-3999만 허용합니다. 해당 범위에서 포트를 선택합니다. 시작 Notebook은 3080을 사용합니다.
  • vLLM 서버는 에서 /invocationsOpenAI 호환 API를 노출합니다.
  • 일반 요청과 스트리밍 요청을 모두 테스트할 수 있습니다.
  • 모델의 --dtype, --max-model-len, --gpu-memory-utilization와 같은 매개변수를 조정하세요.
  • 더 빠른 시작을 위해 --enforce-eager을 추가하지만, 그 대가로 일부 추론 성능이 저하될 수 있습니다.
  • 대규모 모델의 경우 로컬 테스트에 H100 서버리스 GPU 변형을 사용합니다.

구성에 만족하면 계속하기 전에 로컬 서버를 중지합니다.

4단계: 사용자 지정 진입점으로 모델 기록

이 단계에서는 로컬 설정을 Model Serving에 연결하고 다음과 같은 구성 요구 사항을 충족합니다.

  • task은(는) "llm/v1/chat"(멀티모달을 포함한 채팅 모델) 또는 "llm/v1/embeddings"(임베딩 모델)이어야 합니다. 지원되는 작업을 참조하세요.
  • 진입점은 모델 제공에서 예상하는 포트인 포트 8080에서 열어야 합니다.
  • 진입점 명령은 로컬 포트 대신 포트 8080을 사용하여 3단계에서 테스트한 내용을 미러링해야 합니다.
  • 진입점은 MLflow 모델 아티팩트 폴더에서 시작되므로 모델 경로는 해당 폴더를 기준으로 합니다.

채팅 모델의 경우:

metadata = {
    "task": "llm/v1/chat",
    "entrypoint": (
        "python -u -m vllm.entrypoints.openai.api_server "
        "--model qwen3 --served-model-name qwen "
        "--host 0.0.0.0 --port 8080 "
        "--dtype float16 --max-model-len 16384 "
        "--gpu-memory-utilization 0.85"
    ),
}

임베딩 모델의 경우 task"llm/v1/embeddings"(으)로 설정하고 서버를 임베딩 모드로 시작하세요. 여기서 사용되는 vLLM 버전을 사용하면 다음과 같습니다 --runner pooling (이전 vLLM 버전 사용 --task embed).

metadata = {
    "task": "llm/v1/embeddings",
    "entrypoint": (
        "python -u -m vllm.entrypoints.openai.api_server "
        "--model nomic-embed --served-model-name nomic-embed "
        "--runner pooling "
        "--host 0.0.0.0 --port 8080 "
        "--gpu-memory-utilization 0.85"
    ),
}

지원되는 작업

task 모델 유형 쿼리 화면
llm/v1/chat 멀티모달(비전-언어)을 포함한 채팅 모델 chat.completions
llm/v1/embeddings 임베딩 모델 embeddings

선언은 task 진입점이 실제로 제공하는 것과 일치해야 합니다. 진입점은 포트 8080에서 해당 작업에 대해 OpenAI 호환 API를 노출해야 합니다. 위의 예제에서는 vLLM을 사용하지만 이 계약을 충족하는 모든 서버가 작동합니다. 다른 작업 유형(예: llm/v1/completions)은 지원되지 않습니다.

5단계: Unity 카탈로그에 모델 등록

를 사용하여 mlflow.register_modelUnity 카탈로그에 모델을 등록합니다. 사용자 지정 LLM 서비스 제공은 빠른 배포에 따라 달라집니다. 매개 변수를 env_pack="databricks_model_serving" 사용하여 사용하도록 설정합니다.

예를 들어 Notebook에 다음을 추가합니다.


model_version = mlflow.register_model(model_info.model_uri, UC_MODEL_NAME, env_pack="databricks_model_serving")

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

UI에서 또는 프로그래밍 방식으로 Azure Databricks SDK를 사용하여 엔드포인트 생성합니다. 주요 결정은 컴퓨팅 유형, 워크로드 크기 및 0으로 크기 조정 동작입니다.

workload_type 모델 및 클라우드에 따라 선택합니다.

workload_type GPU (그래픽 처리 장치) Notes
GPU_SMALL 1x T4(16GB) 가장 작은 옵션입니다.
GPU_LARGE 1x A100(80GB) 대규모 LLM 워크로드에 권장됩니다.

workload_size (Small, Medium또는 Large)는 엔드포인트 뒤에 프로비전된 복제본의 수를 제어합니다. 개발 및 트래픽이 적은 워크로드에 사용합니다 Small .

다음 예제에서는 일반적인 구성을 보여줍니다.

ServedEntityInput(
    entity_name="main.<catalog>.<model_name>",
    entity_version="<version>",
    workload_type=ServingModelWorkloadType.GPU_MEDIUM,
    workload_size="Small",
    scale_to_zero_enabled=True,
)

스케일 투 제로 및 용량 계획

베타에서 제공되는 사용자 지정 LLM은 엔드포인트 뒤에 고정된 수의 복제본을 프로비전합니다. 복제본이 0개 이상인 경우 자동 크기 조정은 아직 지원되지 않으므로 최대 트래픽에 맞게 크기를 조정 workload_typeworkload_size 해야 합니다. 엔드포인트는 프로비전된 복제본의 용량을 초과하는 요청을 큐에 대기합니다.

유휴 상태일 때 엔드포인트가 0개의 복제본으로 축소되도록 설정합니다 scale_to_zero_enabled=True . 콜드 스타트는 느립니다. 모델 가중치를 로드하고 vLLM을 시작하는 데는 보통 1분에서 수분 정도가 걸립니다.

대기 시간이 중요하거나 프로덕션에 중요한 워크로드의 경우 최대 트래픽을 미리 설정하고 크기를 scale_to_zero_enabled=False 설정합니다workload_size.

경고

확장 용량은 보장되지 않습니다. Azure Databricks에서 엔드포인트 생성 시, workload_size 증가 시 또는 엔드포인트가 0 상태에서 다시 활성화될 때 엔드포인트에 새 GPU를 할당해야 하는 경우, 클라우드 공급자의 해당 리전에 GPU 용량이 없으면 요청이 응답하지 않을 수 있습니다. 이는 모든 GPU 유형에 적용됩니다. Databricks는 웜 풀 및 사전 예약을 통해 이를 완화하여 GPU 용량을 가용성과 준비 상태로 유지합니다.

7단계: 엔드포인트 쿼리

엔드포인트가 준비되면 엔드포인트 페이지의 AI 플레이그라운드 에 자동으로 표시됩니다. Databricks SDK, OpenAI SDK 또는 curl을 사용하여 프로그래밍 방식으로 쿼리할 수도 있습니다.

채팅 모델(llm/v1/chat):

Databricks SDK

w.serving_endpoints.query(
    name="<endpoint-name>",
    messages=[ChatMessage(role=ChatMessageRole.USER, content="Hello")],
)

OpenAI SDK

client = OpenAI(
    api_key=DATABRICKS_TOKEN,
    base_url=f"{DATABRICKS_HOST}/serving-endpoints",
)
client.chat.completions.create(
    model="<endpoint-name>",
    messages=[{"role": "user", "content": "Hello"}],
)

curl

curl -X POST \
  -u "token:$DATABRICKS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"messages":[{"role":"user","content":"Hello"}]}' \
  https://<workspace-url>/serving-endpoints/<endpoint-name>/invocations

모델 포함(llm/v1/embeddings):

OpenAI SDK

client = OpenAI(
    api_key=DATABRICKS_TOKEN,
    base_url=f"{DATABRICKS_HOST}/serving-endpoints",
)
client.embeddings.create(
    model="<endpoint-name>",
    input=["The quick brown fox jumps over the lazy dog."],
)

curl

curl -X POST \
  -u "token:$DATABRICKS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"input":["The quick brown fox jumps over the lazy dog."]}' \
  https://<workspace-url>/serving-endpoints/<endpoint-name>/invocations

일부 임베딩 모델은 각 입력에 작업별 접두어를 붙여야 합니다(예: nomic-embed-text-v2-moesearch_query:search_document:를 사용). 모델 카드에서 입력 규약을 확인하세요.

엔드포인트 모니터링

사용자 지정 LLM 서비스 기능은 엔드포인트를 제공하는 표준 사용자 지정 모델 과 동일한 관찰성 인프라를 사용하지만 다음 섹션에 설명된 몇 가지 vLLM 관련 엑스트라를 사용합니다.

라이브 로그

서비스 UI의 엔드포인트 페이지에 있는 로그 탭에는 vLLM 프로세스의 stdoutstderr가 실시간으로 표시됩니다. 로그 API를 통해 이 출력을 열 수도 있습니다.

지속형 로그 및 메트릭

원격 분석을 사용하도록 설정하면 로그와 메트릭이 모두 장기 보존, SQL 쿼리 및 규정 준수를 위해 Unity 카탈로그 델타 테이블에 유지됩니다. 전체 설정 지침, 요구 사항 및 테이블 스키마는 사용자 지정 모델 서빙 데이터를 Unity Catalog에 저장을(를) 참조하세요.

특별히 서비스하는 사용자 지정 LLM의 경우:

  • 로그: stdoutstderr가 vLLM 프로세스에서 자동으로 캡처됩니다. 애플리케이션 쪽 로깅 코드가 필요하지 않습니다.
  • 메트릭: Azure Databricks 자동으로 vLLM 서버의 Prometheus /metrics 엔드포인트를 긁어내고 로그와 함께 메트릭을 유지합니다. 기본적으로 요청당 대기 시간, 처리량, 토큰 수, 큐 깊이 및 KV 캐시 사용률을 가져옵니다.

원격 분석 데이터 쿼리

베타 중에는 로그 또는 메트릭을 시각화하기 위한 UI가 없습니다. SQL 또는 Notebook을 사용하여 Unity 카탈로그에서 직접 지속형 데이터를 쿼리합니다. Unity 카탈로그에 데이터를 제공하는 지속형 사용자 지정 모델에 설명된 메트릭 및 로그 스키마를 참조하세요.

다음 노트북에서는 저장된 vLLM 메트릭을 파싱하고 시각화하는 방법을 보여 줍니다.

사용자 지정 LLM 서빙 메트릭 노트북

노트북 받기

예제 노트

서버리스 GPU 노트북에서 모델을 개발하고 테스트한 다음, 동일한 구성으로 기록하고 서빙 엔드포인트로 배포합니다. 다음 Notebook에는 이 가이드의 전체 실행 가능한 흐름이 포함되어 있습니다.

사용자 지정 LLM 서빙 시작용 노트북

노트북 받기

Limitations

베타 중에는 다음과 같은 제한 사항이 적용됩니다.

  • 복제본 간에 자동 크기 조정이 없습니다. 0으로 크기 조정이 지원됩니다.
  • 채팅(llm/v1/chat, 멀티모달 포함) 작업과 임베딩(llm/v1/embeddings) 작업만 지원됩니다. 지원되는 작업을 참조하세요.
  • 경로 최적화가 없습니다.
  • 로그 또는 메트릭을 시각화하기 위한 UI가 없습니다. Unity 카탈로그에서 직접 텔레메트리를 조회합니다.

피드백 또는 질문은 Azure Databricks 계정 팀에 문의하세요.

등록 중 아티팩트 업로드 시간이 초과됩니다.

모델을 env_pack등록할 때 Azure Databricks 패키지된 모델 가중치 및 환경을 아티팩트(model_version.tarmodel_environment.tar)로 업로드합니다. databricks-sdk 이전 0.102.0버전의 경우 큰 LLM 아티팩트를 업로드하면 5분 후에 시간이 초과되고 다음과 같은 오류로 등록에 실패할 수 있습니다.

MlflowException: The following failures occurred while uploading one or more artifacts to
/Models/<catalog>/<schema>/<model>/<version>: {
  '.../model_environment.tar': "TimeoutError('Timed out after 0:05:00')",
  '.../model_version.tar': "TimeoutError('Timed out after 0:05:00')"
}

이 문제를 해결하려면 모델을 업그레이드 databricks-sdk>=0.102.0 하고 다시 등록합니다.

%pip install databricks-sdk>=0.102.0