Helm — vLLM 배포

Helm — vLLM 배포

Helm은 Kubernetes용 패키지 매니저로, Kubernetes에서 vLLM 배포를 자동화하는 데 도움을 줍니다. Helm을 쓰면 같은 프레임워크 아키텍처를 변수 값 오버라이드로 서로 다른 네임스페이스에 배포할 수 있습니다. 이 글은 Helm으로 vLLM을 배포하는 과정(사전 준비, Helm 설치 단계, 아키텍처와 values 파일 설명)을 안내합니다.

출처: 문서

본문

사전 준비 (Prerequisites)

  • 실행 중인 Kubernetes 클러스터
  • NVIDIA Kubernetes Device Plugin(k8s-device-plugin, https://github.com/NVIDIA/k8s-device-plugin)
  • 클러스터의 GPU 리소스
  • (선택) 자동 모델 다운로드를 쓴다면 모델 가중치가 담긴 S3 버킷 또는 기타 스토리지

차트 설치

릴리스 이름 test-vllm으로 차트를 설치합니다.

helm upgrade --install --create-namespace \
  --namespace=ns-vllm test-vllm . \
  -f values.yaml \
  --set secrets.s3endpoint=$ACCESS_POINT \
  --set secrets.s3bucketname=$BUCKET \
  --set secrets.s3accesskeyid=$ACCESS_KEY \
  --set secrets.s3accesskey=$SECRET_KEY

차트 제거

test-vllm 배포를 제거합니다.

helm uninstall test-vllm --namespace=ns-vllm

이 명령은 persistent volume을 포함해 차트와 연관된 모든 Kubernetes 컴포넌트를 제거하고 릴리스를 삭제합니다.

아키텍처

차트는 기본적으로 vllm/vllm-openai 이미지를 사용하며, 컨테이너 시작 명령은 vllm serve /data/ --served-model-name opt-125m --host 0.0.0.0 --port 8000 형태입니다. 자동 모델 다운로드 init 컨테이너로 S3에서 모델을 내려받은 뒤 서빙합니다.

Values (핵심 설정)

values.yaml에서 구성 가능한 주요 파라미터는 다음과 같습니다.

기본값 설명
image.repository vllm/vllm-openai 이미지 저장소
image.tag latest 이미지 태그
replicaCount 1 레플리카 수
containerPort 8000 컨테이너 포트
servicePort 80 서비스 포트
resources.limits."nvidia.com/gpu" 1 사용 GPU 수
resources.limits.memory 16Gi CPU 메모리
autoscaling.enabled false 자동 스케일링 활성화
autoscaling.minReplicas / maxReplicas 1 / 100 최소/최대 레플리카
livenessProbe.httpGet.path /health 헬스 체크 경로
extraInit.modelDownload.enabled true 모델 자동 다운로드 활성화
extraInit.pvcStorage 1Gi PVC 스토리지 크기
extraInit.s3modelpath relative_s3_model_path/opt-125m S3 모델 경로
secrets {} 시크릿 설정(S3 자격 증명 등)

구성 예시

S3 모델 다운로드 사용(기본)

extraInit:
  modelDownload:
    enabled: true
  pvcStorage: "10Gi"
  s3modelpath: "models/llama-7b"

커스텀 init 컨테이너만 사용

llm-d처럼 모델 다운로드 없는 커스텀 사이드카가 필요한 경우:

extraInit:
  modelDownload:
    enabled: false
  initContainers:
    - name: llm-d-routing-proxy
      image: ghcr.io/llm-d/llm-d-routing-sidecar:v0.2.0
      imagePullPolicy: IfNotPresent
      ports:
        - containerPort: 8080
          name: proxy
      securityContext:
        runAsUser: 1000
      restartPolicy: Always
  pvcStorage: "10Gi"

더 알아보기 (Learn more)