NVIDIA-SMI 580.76.05 Driver Version: 580.76.05 CUDA Version: 13.0
vllm serve <모델>: 해당 모델을 OpenAI 호환 REST 서버로 띄웁니다. (기본 엔드포인트: /v1/completions, /v1/chat/completions 등)
모델 Qwen/Qwen2.5-3B-Instruct: Hugging Face의 체크포인트를 사용합니다.
옵션별 상세 설명
1) --port 9000
API 서버가 바인딩될 포트.
예: http://localhost:9000/v1/chat/completions 로 요청.
이미 다른 프로세스가 9000을 점유 중이면 충돌하므로, 그런 경우 포트를 바꾸면 됩니다.
2) --dtype auto
모델과 GPU 능력에 맞춰 가중치·연산 정밀도를 자동 선택.
보통 최신 NVIDIA GPU(암페어↑)면 bfloat16(bf16), 그 외엔 fp16으로 잡힙니다.
의미: 메모리 절약(+속도 개선)과 수치 안정성의 밸런스. bf16은 fp16보다 overflow에 좀 더 안정적입니다.
3) --gpu-memory-utilization 0.85
vLLM이 시작 시점에 목표로 하는 VRAM 점유 비율(가중치+KV 캐시+런타임 버퍼의 계획치).
16GB급 GPU에서 0.85면 약 13.1GiB 정도를 목표로 잡습니다.
시작 직전 실제 여유 VRAM이 이 목표치보다 적으면 초기화가 실패합니다(방금 보신 에러의 원인).
튜닝 가이드
안정: 0.80~0.88
다른 프로세스가 VRAM을 조금 쓰고 있으면 더 낮춰야 합니다.
서버 실행 후 OOM이 난다면 이 값만으로 해결되지 않을 수 있고, 아래 배치/길이 옵션도 함께 보정해야 합니다.
4) --max-model-len 8192
한 시퀀스(한 요청)의 최대 컨텍스트 길이(토큰) 상한입니다.
(시스템/유저/어시스턴트 메시지 포함 전체 프롬프트 + 생성 토큰 합산 관점으로 생각하면 됩니다.)
메모리 영향이 큼: 길이가 길수록 토큰당 KV 캐시가 커져서 VRAM을 많이 먹습니다.
효과: 32K → 8K로 낮추면 KV 캐시가 대폭 줄어, 시작 실패/런타임 OOM 위험이 크게 감소합니다.
튜닝 팁
긴 문서 요약/롱컨텍스트가 필요 없을 때는 4K~8K로 제한하면 효율적.
매우 긴 컨텍스트가 필요한 경우엔 이 값을 올리되, 아래 두 옵션(--max-num-batched-tokens, --max-num-seqs)을 더 보수적으로 잡아 VRAM을 맞춰주세요.
5) --max-num-batched-tokens 1024
동시에 전개(prefill 또는 decode)되는 “총 토큰 수” 상한입니다.
예) 프리필 단계에서 8개의 요청이 각각 128토큰이라면 8×128=1024 → 한 번에 처리 가능.
영향
값을 낮추면: 한 라운드에 다루는 토큰이 줄어 피크 VRAM 사용량 감소(안정↑), 대신 스루풋↓.
값을 높이면: 스루풋↑, VRAM 피크↑.
언제 줄이나요?
“긴 프롬프트 여러 개를 동시에” 넣는 사용 패턴에서 자주 OOM이 난다면 먼저 이 값을 낮춰보세요(1024→768→512…).
6) --max-num-seqs 16
동시 처리(동시 추론) 가능한 시퀀스(요청) 개수 상한입니다.
영향
값을 낮추면: 동시성↓ → KV 캐시 및 배치 메모리 부담 감소(안정↑), 하지만 여러 요청이 대기 큐에 쌓여 대기 지연↑.
값을 높이면: 동시성↑ → 스루풋↑, VRAM 부담↑.
권장
16GB VRAM에서 3B 모델은 8~32 사이에서 워크로드에 맞게 조절하는 편.
사용자 수가 적고 지연 중요하면 8~16, 스루풋이 더 중요하면 16~32 시도(메모리 여유 필수).
옵션 간 상호작용 & 튜닝 흐름
부팅 실패(시작 시 메모리 부족)
→ --gpu-memory-utilization을 먼저 낮추고, 그래도 부족하면 --max-model-len을 더 낮춥니다.
(이 두 가지가 “고정 비용”에 가장 큰 영향)
런타임 중 OOM(특히 긴 프롬프트/동시 다수 요청 때)
→ --max-num-batched-tokens ↓, --max-num-seqs ↓ 순서로 조정해 피크를 낮춥니다.
처리량(스루풋)이 부족
→ VRAM 여유가 있다면 --max-num-batched-tokens ↑ 또는 --max-num-seqs ↑.
(단, 둘 다 올리면 피크가 급격히 커지니 한 단계씩)
지연 시간(Latency)이 길다
단일 요청 지연이 길면 배치가 과도하게 합쳐지지 않도록 --max-num-batched-tokens 과도 상승을 피합니다.
동시성으로 인해 대기 시간이 길면 --max-num-seqs를 약간 올리되, 메모리 여유 체크는 필수.
실전 추천값(16GB급 GPU, 3B 모델 기준)
안정 시작 지점:
--gpu-memory-utilization 0.82~0.86, --max-model-len 4K~8K,
--max-num-batched-tokens 512~1024, --max-num-seqs 8~16
트래픽이 늘면:
메모리 여유 확인 후 --max-num-seqs → --max-num-batched-tokens 순으로 소폭↑
자주 묻는 질문(FAQ)
Q. --max-model-len을 낮추면 응답 품질이 떨어지나요?
→ 길게 기억해야 하는 작업(롱컨텍스트) 외에는 직접적인 품질 저하는 거의 없습니다. 다만 너무 긴 프롬프트/히스토리를 넣을 수 없게 되니 사용 패턴에 맞춰 잡으세요.
Q. --gpu-memory-utilization만 낮추면 충분한가요?
→ 시작은 가능해지지만, 런타임 피크(긴 프롬프트/동시성)에서 OOM이 날 수 있습니다. 그땐 배치·동시성 옵션까지 만지세요.
Q. 어떤 값부터 손대야 하나요?
→ (부팅 실패) gpu-memory-utilization → max-model-len → (런타임 OOM) max-num-batched-tokens → max-num-seqs 순서가 안전합니다.
댓글