vLLM 인퍼런스 엔진
vLLM 인퍼런스 엔진
Hugging Face Inference Endpoints에서 모델을 서빙할 때, 기본 옵션 중 하나가 바로 vLLM이에요. vLLM은 오픈소스 LLM을 위한 고성능·메모리 효율 추론 엔진이라, 바쁜 트래픽에서도 꾸준한 처리량을 유지하고 싶을 때 특히 잘 맞아요. 말이 어렵게 느껴지면 우선 "서버 하나로 많은 요청을 빨리 처리해 주는 엔진"이라고만 생각해도 충분해요.
vLLM이 특별한 이유
- PagedAttention: KV cache를 페이지 단위로 쪼개 관리해서 메모리를 훨씬 아껴 써요
- 연속 배치(Continuous Batching): 요청이 들어오는 대로 바로 배치에 섞어 처리량을 끌어올려요
- 최적화된 CUDA/HIP 실행: NVIDIA·AMD·AWS Neuron 등 다양한 하드웨어에서 돌아요
- 추론 가속 기술: speculative decoding, chunked prefill 같은 기법을 기본 지원해요
대부분의 사용 사례에서 TGI, vLLM, SGLang 셋 다 성능이 비슷하게 좋아서, 어느 것을 고르든 크게 후회할 일은 없어요.
설정하기
엔드포인트 생성 시 Max Number of Sequences는 한 번에 한 배치로 묶어서 처리할 수 있는 최대 시퀀스(요청) 수예요. 배치 크기를 시퀀스 개수 기준으로 제어해서 처리량과 메모리 사용에 직접 영향을 줘요. 예를 들어 max_num_seqs=8로 설정하면 서로 다른 프롬프트를 최대 8개까지 한 번에 처리할 수 있어요.
KV Cache DType은 생성 과정에서 key-value cache를 저장할 데이터 타입이에요. 옵션으로 "auto", "fp8", "fp8_e5m2", "fp8_e4m3"가 있죠. 정밀도가 낮은 타입을 쓰면 메모리를 줄일 수 있지만, 생성 품질이 아주 살짝 떨어질 수 있다는 점은 알아 두셔야 해요.
vLLM이 지원하는 모든 Engine Arguments를 컨테이너 인자로 넘길 수도 있어요. 예를 들어 enable_lora를 true로 바꾸려면 이런 식으로 넣으면 됩니다.
--enable_lora
지원 모델
vLLM은 대규모 언어 모델과 임베딩 모델을 폭넓게 지원해요. 정확한 목록은 vLLM 문서의 supported models 섹션을 참고하는 게 좋아요. Transformers에 있는 모델 구현도 지원 대상이라, 대부분의 디코더 언어 모델과 비전 언어 모델을 함께 쓸 수 있어요.
병렬 처리와 확장
분산 추론을 위해 vLLM이 쓰는 두 가지 대표 병렬 전략은 **Tensor Parallelism(TP)**과 **Data Parallelism(DP)**이에요. 언제 어떤 걸 쓰는지 이해하는 게 성능 최적화의 핵심이에요.
Inference Endpoints 기본 동작
인스턴스 타입(예: 4 × A10G, 8 × H100)을 고른 뒤 엔드포인트를 만들면 기본값은 이렇게 정해져요.
tensor_parallel_size= 인스턴스의 GPU 수 (모델을 모든 GPU에 쪼갬)data_parallel_size= 1 (모델 복사본 1개)
이 기본 구성은 인스턴스 GPU 메모리를 전부 활용해 더 큰 모델을 우선적으로 올리도록 짜여 있어요. 그런데 모델이 인스턴스 GPU보다 적은 수로도 충분히 올라간다면, 모델 복사본을 여러 개 띄워 처리량을 높이는 쪽으로 바꿀 수도 있어요.
Tensor Parallelism(TP)
텐서 병렬은 모델의 가중치를 레이어 안에서 여러 GPU에 쪼개는 방식이에요. GPU 하나마다 모델의 일부 조각을 들고 자기 몫만 계산한 뒤, 다른 GPU와 동기화해요. 모델 하나가 GPU 여러 개에 걸쳐 있어서, 한 GPU 메모리로는 안 들어가는 큰 모델을 올릴 때 적합해요.
Data Parallelism(DP)
데이터 병렬은 모델의 독립된 복사본 여러 개를 서로 다른 GPU에 띄우는 방식이에요. 각 복사본이 서로 다른 요청을 독립적으로 처리하니까 처리량이 올라가요. 언제 쓰면 좋나요? 처리량을 높이고 싶은데 모델이 인스턴스 GPU보다 적은 수로 충분히 들어갈 때예요. data_parallel_size를 원하는 복사본 개수로 설정하면 돼요.
TP와 DP 함께 쓰기
두 방식을 조합할 수도 있어요. 처리량을 최대화하려면 모델이 GPU 하나에 들어가는 경우 TP를 낮추고 DP를 높여 복사본을 여러 개 띄우면 돼요. 예를 들어 4×A100 80GB 인스턴스에서 Llama 3 8B(~16GB)를 서빙하는 상황을 보면요.
| 구성 | TP | DP | 복사본 | 동작 |
|---|---|---|---|---|
| Default | 4 | 1 | 1 | 모델이 GPU 4개에 쪼개짐 |
| Balanced | 2 | 2 | 2 | 복사본 2개, 각각 GPU 2개에 쪼개짐 |
| Max throughput | 1 | 4 | 4 | 독립 복사본 4개 |
여기엔 항상 트레이드오프가 따라붙어요. 복사본을 늘리면 처리량은 오르지만, 각 복사본이 쓰는 GPU 수가 줄어들어 한 요청 처리 속도(지연)는 늘어날 수 있어요.
더 알아보기
- vLLM 공식 문서에서 엔진 동작과 최신 기능을 더 자세히 볼 수 있어요
- Engine Arguments 문서로 세부 설정을 확인해 보세요