vLLM 핵심 실무 가이드

데이터 엔지니어 · AI 엔지니어를 위한 핵심 요약

LLM Serving 고성능 추론 v0.6.0 기준 작성일: 2026.03

목차

  1. vLLM란?
  2. 왜 써야 하는가?
  3. 핵심 개념
  4. 퀵스타트
  5. 핵심 설정 레퍼런스
  6. 실무 팁 & 트러블슈팅
  7. 참고 자료

1. vLLM란?

vLLM은 LLM(Large Language Model) 추론 서빙을 위한 고성능 라이브러리입니다. PagedAttention 알고리즘을 통해 메모리 효율성을 극대화하고, 수천 개의 동시 요청을 처리할 수 있는 처리량(throughput)을 제공합니다.

⚡ PagedAttention

KV 캐시를 페이지 단위로 관리하여 메모리 단편화를 해결하고 GPU 메모리 사용률을 60~70%까지 향상시킵니다.

🚀 Continuous Batching

요청이 들어올 때마다 동적으로 배치를 구성하여 GPU 활용도를 극대화하고 지연 시간(latency)을 줄입니다.

🔌 다양한 배포 옵션

OpenAI 호환 API, 자체 서버, Hugging Face 통합 등 다양한 방식으로 배포할 수 있습니다.

2. 왜 써야 하는가?

기존 LLM 서빙 솔루션 대비 vLLM의 장점을 비교합니다.

솔루션 장점 단점 vLLM 대비
Hugging Face Transformers 간편한 사용, 모델 다양성 낮은 처리량, 메모리 비효율 처리량 24배 향상
Text Generation Inference (TGI) Continuous Batching, 토큰 스트리밍 설정 복잡, 리소스 요구량 높음 유사 성능, 더 가벼운 아키텍처
TorchServe 프로덕션 준비, 모니터링 LLM 최적화 부족, 높은 지연 시간 LLM 특화 최적화
기본 API 서버 커스터마이징 용이 낮은 동시성, 관리 부담 아키텍처 오버헤드 제거
결론: vLLM은 특히 높은 동시 요청 처리량과 비용 효율적인 GPU 사용이 필요한 프로덕션 환경에서 가장 적합합니다.

3. 핵심 개념

아키텍처 개요

+-------------------------------------------------------------------+ | Client Requests (HTTP/gRPC) | +-----------------------------------+-------------------------------+ | +---------------v---------------+ | vLLM Server (API Layer) | | - OpenAI-compatible endpoint | | - Request Queue & Scheduler | +---------------+---------------+ | +---------------v---------------+ | LLM Engine (Core) | | - Continuous Batching | | - PagedAttention Manager | | - Block Manager (GPU Mem) | +---------------+---------------+ | +---------------v---------------+ | Model Executor | | - GPU Kernel Operations | | - Token Generation Loop | +---------------+---------------+ | +---------------v---------------+ | Hardware Layer | | - GPU (CUDA) | | - CPU (Scheduler/Manager) | +-------------------------------+

주요 컴포넌트 설명

4. 퀵스타트

4.1 설치

# CUDA 12.1 기준 (가상환경 권장)
pip install vllm

# 특정 버전 설치
pip install vllm==0.6.0

# 추가 기능 포함 (AWQ, GPTQ 등)
pip install vllm[all]

4.2 기본 서버 실행

# CLI로 서버 실행 (Meta-Llama-3-8B-Instruct 예시)
vllm serve meta-llama/Meta-Llama-3-8B-Instruct \
    --port 8000 \
    --max-model-len 8192 \
    --tensor-parallel-size 1 \
    --gpu-memory-utilization 0.9

4.3 Python에서 직접 사용

from vllm import LLM, SamplingParams

# 모델 로드
llm = LLM(model="meta-llama/Meta-Llama-3-8B-Instruct",
          max_model_len=8192,
          gpu_memory_utilization=0.9)

# 샘플링 파라미터 설정
sampling_params = SamplingParams(temperature=0.7,
                                 top_p=0.95,
                                 max_tokens=512)

# 추론 실행
prompts = [
    "대한민국의 수도는?",
    "파이썬에서 리스트를 정렬하는 방법은?"
]
outputs = llm.generate(prompts, sampling_params)

# 결과 출력
for output in outputs:
    print(f"Prompt: {output.prompt}")
    print(f"Generated: {output.outputs[0].text}\n")

4.4 OpenAI 호환 API 사용

import openai

# vLLM 서버를 OpenAI 클라이언트로 연결
client = openai.OpenAI(
    api_key="token-abc123",  # 임의 값
    base_url="http://localhost:8000/v1"
)

# 채팅 완성 요청
response = client.chat.completions.create(
    model="meta-llama/Meta-Llama-3-8B-Instruct",
    messages=[
        {"role": "user", "content": "안녕! 너의 이름은 뭐야?"}
    ],
    temperature=0.7,
    max_tokens=100
)

print(response.choices[0].message.content)

5. 핵심 설정 레퍼런스

파라미터 기본값 설명 실무 권장값
--max-model-len 모델별 상이 모델이 처리할 수 있는 최대 시퀀스 길이 모델 컨텍스트 길이의 80~90%
--gpu-memory-utilization 0.9 GPU 메모리 사용률 목표 (0.0~1.0) 0.85~0.95 (OOM 발생 시 낮춤)
--tensor-parallel-size 1 텐서 병렬 처리에 사용할 GPU 수 모델 크기에 따라 (7B:1, 70B:4)
--block-size 16 PagedAttention 블록 크기 (토큰 수) 8~32 (성능 테스트 권장)
--max-num-batched-tokens 2560 한 배치에서 처리할 최대 토큰 수 GPU 메모리에 따라 조정
--max-num-seqs 256 최대 동시 처리 시퀀스 수 동시 사용자 수 예측하여 설정
--quantization 없음 양자화 방법 (awq, gptq, squeezellm) 메모리 절약 필요 시 awq

6. 실무 팁 & 트러블슈팅

⚠️ OOM (Out Of Memory) 문제

증상: CUDA out of memory 에러 발생.

해결:

  1. --gpu-memory-utilization 값을 0.8 이하로 낮춤
  2. --max-model-len 줄이기
  3. 양자화 모델 사용 (AWQ/GPTQ)

🐢 추론 속도 저하

증상: 토큰 생성 속도가 느림.

해결:

  1. --block-size 조정 (보통 16)
  2. --max-num-batched-tokens 증가
  3. GPU 드라이버 및 CUDA 업데이트

🔗 API 연결 불안정

증상: 클라이언트에서 연결 끊김.

해결:

  1. 서버 시작 시 --host 명시적 설정
  2. Nginx/Apache 리버스 프록시 사용
  3. 타임아웃 파라미터 조정
중요: 프로덕션 배포 전 반드시 부하 테스트를 수행하세요. 실제 트래픽 패턴으로 --max-num-seqs와 --max-num-batched-tokens를 튜닝해야 합니다.

모니터링 명령어

# GPU 메모리 사용량 확인
nvidia-smi --query-gpu=memory.used,memory.total --format=csv

# vLLM 서버 메트릭 (활성화 시)
curl http://localhost:8000/metrics

# 로그 확인 (상세 로깅 활성화)
vllm serve ... --log-level debug

7. 참고 자료