vLLM은 오픈소스 LLM을 GPU 서버에 올려 여러 사용자가 동시에 쓰는 OpenAI 호환 API로 만들어 주는 서빙 엔진이다. 혼자 노트북에서 돌릴 때보다 팀이나 서비스가 같은 모델에 요청을 몰아 보낼 때 효과가 크다.
| 도구 | 주 용도 | 잘 맞는 환경 |
|---|---|---|
| vLLM | 다중 사용자 API 서빙 | GPU 서버 |
| Ollama, llama.cpp | 개인용 로컬 실행 | 노트북, Mac, CPU |
| Hugging Face Transformers | 실험·연구 코드 | 요청이 적을 때 |
2023년 UC 버클리 연구팀이 공개했고, 지금은 오픈 모델을 서빙할 때 가장 널리 쓰인다.
LLM은 답을 만들면서 앞 내용을 KV 캐시에 쌓아 둔다. 이 캐시는 GPU 메모리를 많이 차지하고 요청마다 길이가 달라서, 중간중간 쓰지 못하는 빈 공간이 많이 생겼다. vLLM은 운영체제의 가상 메모리처럼 KV 캐시를 고정 크기 블록으로 나눠 필요한 만큼만 할당하는 PagedAttention을 도입했다.
메모리 낭비가 줄어든 만큼 GPU 한 장으로 더 많은 요청을 함께 처리한다. 끝난 요청 자리에 새 요청을 바로 끼워 넣는 연속 배칭까지 더해, 같은 GPU에서 기존 방식보다 처리량이 크게 늘었다.
pip install vllm으로 설치하고 vllm serve meta-llama/Llama-3.1-8B-Instruct를 실행하면 Hugging Face에서 모델을 받아 OpenAI 호환 API 서버를 띄운다. 기존 OpenAI SDK 코드는 base_url만 이 서버 주소로 바꾸면 그대로 동작한다. 상황별로 자주 바꾸는 옵션은 아래와 같다.
| 상황 | 옵션 | 효과 |
|---|---|---|
| 모델이 GPU 한 장에 안 들어감 | --tensor-parallel-size | 여러 GPU에 나눠 올림 |
| 메모리 부족 오류 | --max-model-len | 최대 문맥을 줄여 공간 확보 |
| GPU를 다른 프로그램과 나눠 씀 | --gpu-memory-utilization | vLLM이 잡을 메모리 비율 조절 |
| 작은 GPU에 큰 모델 | --quantization awq | 양자화 모델로 메모리 절약 |
챗봇이나 RAG처럼 매 요청 앞에 같은 시스템 프롬프트나 문서를 붙인다면 프리픽스 캐싱이 그 앞부분 계산을 재사용해서 응답이 빨라진다. 작은 모델이 먼저 초안을 쓰고 큰 모델이 검증하는 투기적 디코딩도 지원하므로, 응답 지연이 중요한 서비스라면 시험해 볼 만하다.
vLLM은 시작할 때 GPU 메모리를 미리 크게 잡아 두는 구조다. 개인 PC에서 가볍게 대화만 할 거라면 Ollama 같은 도구가 더 편하다. 주로 NVIDIA GPU가 있는 리눅스 서버에서 쓰고, 다른 하드웨어는 지원 범위가 다르니 문서를 먼저 확인해야 한다. 지원 모델과 옵션이 자주 바뀌므로 운영 환경에서는 버전을 고정해 두는 게 안전하다.
가장 흔한 건 외부 API 대신 자체 GPU 서버에 오픈 모델을 띄워 팀이나 서비스가 함께 쓰게 하는 방식이다. OpenAI 호환이라 기존 코드를 거의 고치지 않고 옮길 수 있다.
| 어디서 | 어떻게 쓰나 |
|---|---|
| 사내 LLM API | 데이터를 밖으로 보내지 않도록 사내 GPU에 오픈 모델을 띄우고, 기존 앱은 base_url만 바꿔 연결 |
| 사내 문서 검색·챗봇 | 매번 같은 시스템 프롬프트와 문서를 붙이는 RAG 서버로 두고 프리픽스 캐싱으로 응답 속도 확보 |
| 대량 일괄 처리 | 모델 평가나 데이터 생성처럼 많은 프롬프트를 한꺼번에 돌릴 때 연속 배칭으로 GPU를 꽉 채워 처리 |