Production stack — vLLM 통합

Production stack — vLLM 통합

Kubernetes에 vLLM을 배포하는 것은 머신러닝 모델을 서빙하는 확장 가능하고 효율적인 방법입니다. 이 가이드는 vLLM production stack을 사용해 vLLM을 배포하는 과정을 안내합니다. Berkeley-UChicago 협력을 통해 탄생한 vLLM production stack은 vLLM 프로젝트 산하의 공식 출시된 프로덕션 최적화 코드베이스로, LLM 배포를 위해 설계됐습니다:

  • 업스트림 vLLM 호환성 — 업스트림 vLLM을 수정하지 않고 감싸기만 합니다.
  • 사용 편의성 — Helm 차트로 간단히 배포하고, Grafana 대시보드로 관찰 가능성(observability)을 제공합니다.
  • 고성능 — 멀티모델 지원, 모델 인지·프리픽스 인지 라우팅, 빠른 vLLM 부트스트래핑, 그리고 --kv-offloading-backend lmcache로 vLLM에 연결되는 LMCache를 통한 KV 캐시 오프로딩 등 LLM 워크로드에 최적화돼 있습니다 (자세한 내용은 LMCache 예제docs.lmcache.ai 참고).

Kubernetes가 처음이라도 걱정 마세요. vLLM production stack repo에는 모든 것을 설정하는 단계별 가이드와 4분 만에 시작하는 짧은 영상이 있습니다!

출처: 문서

본문

사전 준비 (Pre-requisite)

GPU가 있는 실행 중인 Kubernetes 환경이 있는지 확인합니다 (Bare-metal GPU 머신에 Kubernetes 환경을 설치하려면 이 튜토리얼을 따라할 수 있습니다).

vLLM production stack으로 배포 (Deployment using vLLM production stack)

표준 vLLM production stack은 Helm 차트로 설치됩니다. GPU 서버에 Helm을 설치하려면 이 bash 스크립트를 실행하면 됩니다.

데스크톱에서 다음 명령을 실행해 vLLM production stack을 설치합니다:

sudo helm repo add vllm https://vllm-project.github.io/production-stack
sudo helm install vllm vllm/vllm-stack -f tutorials/assets/values-01-minimal-example.yaml

이렇게 하면 작은 LLM(Facebook opt-125M 모델)을 실행하는 vllm이라는 이름의 vLLM-production-stack 기반 배포가 생성됩니다.

설치 검증 (Validate Installation)

배포 상태를 모니터링합니다:

sudo kubectl get pods

vllm 배포의 파드가 Running 상태로 전환되는 것을 볼 수 있습니다.

NAME                                           READY   STATUS    RESTARTS   AGE
vllm-deployment-router-859d8fb668-2x2b7        1/1     Running   0          2m38s
vllm-opt125m-deployment-vllm-84dfc9bd7-vb9bs   1/1     Running   0          2m38s

참고: 컨테이너가 Docker 이미지와 LLM 가중치를 다운로드하는 데 시간이 걸릴 수 있습니다.

스택에 쿼리 보내기 (Send a Query to the Stack)

vllm-router-service 포트를 호스트 머신으로 포워딩합니다:

sudo kubectl port-forward svc/vllm-router-service 30080:80

그런 다음 OpenAI 호환 API로 쿼리를 보내 사용 가능한 모델을 확인할 수 있습니다:

curl -o- http://localhost:30080/v1/models

출력:

{
  "object": "list",
  "data": [
    {
      "id": "facebook/opt-125m",
      "object": "model",
      "created": 1737428424,
      "owned_by": "vllm",
      "root": null
    }
  ]
}

실제 채팅 요청을 보내려면 OpenAI의 /completion 엔드포인트에 curl 요청을 보냅니다:

curl -X POST http://localhost:30080/v1/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "facebook/opt-125m",
    "prompt": "Once upon a time,",
    "max_tokens": 10
  }'

출력:

{
  "id": "completion-id",
  "object": "text_completion",
  "created": 1737428424,
  "model": "facebook/opt-125m",
  "choices": [
    {
      "text": " there was a brave knight who...",
      "index": 0,
      "finish_reason": "length"
    }
  ]
}

제거 (Uninstall)

배포를 제거하려면:

sudo helm uninstall vllm

(고급) vLLM production stack 구성 (Configuring vLLM production stack)

핵심 vLLM production stack 구성은 YAML로 관리합니다. 위 설치에서 사용한 예제 구성입니다:

servingEngineSpec:
  runtimeClassName: ""
  modelSpec:
  - name: "opt125m"
    repository: "vllm/vllm-openai"
    tag: "latest"
    modelURL: "facebook/opt-125m"

    replicaCount: 1

    requestCPU: 6
    requestMemory: "16Gi"
    requestGPU: 1

    pvcStorage: "10Gi"

이 YAML 구성에서:

  • modelSpec은 다음을 포함합니다:
    • name: 모델을 부르고 싶은 별칭.
    • repository: vLLM의 Docker 저장소.
    • tag: Docker 이미지 태그.
    • modelURL: 사용하려는 LLM 모델.
    • replicaCount: 레플리카 수.
    • requestCPUrequestMemory: 파드의 CPU·메모리 리소스 요청량.
    • requestGPU: 필요한 GPU 수.
    • pvcStorage: 모델용 영속 스토리지 할당.

참고: 두 파드를 설정하려면 이 YAML 파일을 참고하세요.

: vLLM production stack은 CPU 오프로딩과 다양한 라우팅 알고리즘 등 더 많은 기능을 제공합니다. 자세한 내용은 이 예제와 튜토리얼repo를 확인하세요.

더 알아보기 (Learn more)