대규모 언어 모델(LLM)은 모델 크기가 커질수록 단일 GPU 메모리에 적재하기 어려워집니다. 이 문제를 해결하기 위해서는 단일 프로세스 실행 방식을 넘어, 여러 GPU와 여러 프로세스를 활용하는 병렬화 기법이 필요합니다. vLLM은 이를 지원하기 위해 UniProcExecutor와 MultiProcExecutor라는 두 가지 실행기를 제공합니다. 이번 글에서는 이 두 실행기의 차이와, vLLM이 어떻게 모델을 다중 GPU 환경으로 확장하는지 자세히 살펴보겠습니다.
UniProcExecutor: 단일 GPU 환경에서의 실행기
가장 단순한 실행 방식은 UniProcExecutor입니다.
- 모델 전체를 하나의 GPU에 적재하여 실행하는 방식입니다.
- 모든 연산은 단일 프로세스 내에서 처리됩니다.
- 구조가 단순하고 디버깅이 쉬우며, 소규모 모델에 적합합니다.
하지만 최근 LLM은 파라미터 수가 수십억~수천억 개에 달하기 때문에, 모델 전체를 단일 GPU VRAM에 올리는 것이 사실상 불가능한 경우가 많습니다. 이 한계를 극복하기 위해 MultiProcExecutor가 필요합니다.

MultiProcExecutor: 다중 GPU/다중 프로세스 환경
모델이 단일 GPU에 담기지 않을 때, MultiProcExecutor는 모델을 여러 GPU로 분할하여 실행할 수 있도록 지원합니다. 이 과정에서 **텐서 병렬화(Tensor Parallelism, TP)**와 파이프라인 병렬화(Pipeline Parallelism, PP) 같은 기법이 활용됩니다.
- 텐서 병렬화(TP)
- 모델의 연산을 여러 GPU에 나누어 동시에 수행
- GPU 간 데이터 교환이 빈번하지만, 노드 내부(Intra-node) 대역폭이 충분할 경우 성능이 뛰어남
- 파이프라인 병렬화(PP)
- 모델의 레이어를 순차적으로 여러 GPU에 배치
- 통신량은 적지만, 노드 간(Inter-node) 통신 지연이 성능 병목이 될 수 있음
실제 구현에서는 TP가 일반적으로 더 선호되며, PP는 모델이 매우 클 때 추가적으로 고려됩니다.
MultiProcExecutor 동작 방식
MultiProcExecutor는 단일 GPU 실행을 확장한 구조로, 내부적으로는 다중 프로세스와 메시지 큐를 활용합니다.
- 프로세스 생성 및 초기화
- world_size(예: TP=8이면 8개 프로세스)를 기준으로, 각 GPU마다 별도의 워커 프로세스를 실행
- 각 워커는 모델의 일부를 로드하고 초기화
- 메시지 큐 기반 통신
- rpc_broadcast_mq: 부모 프로세스가 워커들에게 작업을 전달하는 메시지 큐
- worker_response_mq: 워커가 처리 결과를 부모 프로세스에 반환하는 큐
- 작업 실행 흐름
- 부모 프로세스는 들어온 요청을 rpc_broadcast_mq에 넣음
- 워커들은 이를 수신하여 자신의 역할에 맞는 연산을 수행
- 결과는 worker_response_mq를 통해 부모에게 반환
- 부모는 지정된 워커의 결과를 모아 최종 출력을 생성
- 엔진 추상화
- 중요한 점은, 엔진 입장에서는 UniProcExecutor와 MultiProcExecutor 모두 동일한 인터페이스(execute_model)를 사용한다는 것입니다.
- 즉, 개발자는 내부 병렬화 로직을 신경 쓰지 않고도 같은 코드로 단일 GPU와 다중 GPU 환경을 지원할 수 있습니다.
확장 단계: MultiProcExecutor 이후
MultiProcExecutor를 통해 단일 노드 내 여러 GPU를 활용할 수 있게 되면, 그다음 단계는 멀티 노드 확장입니다.
- 데이터 병렬화(Data Parallelism, DP)
- 모델 복제를 여러 노드에 배치하여, 서로 다른 요청을 동시에 처리
- 부하 분산(load balancing)과 복제 간 동기화가 필요
- API 서버와 로드 밸런싱
- 여러 모델 인스턴스를 앞단 API 서버와 연결하여 대규모 트래픽을 효율적으로 분산 처리
- 대규모 서비스 환경에 적합한 구조
이번 글에서는 vLLM의 UniProcExecutor와 MultiProcExecutor를 중심으로, 단일 GPU 실행에서 다중 GPU 병렬 실행으로 확장되는 과정을 살펴보았습니다.
- UniProcExecutor는 단순하고 직관적인 단일 GPU 실행기
- MultiProcExecutor는 텐서 병렬화와 파이프라인 병렬화를 지원하며, 여러 GPU에서 모델을 분산 실행
- 메시지 큐 기반 프로세스 간 통신으로 병렬 처리 복잡성을 추상화
- 이후 데이터 병렬화와 로드 밸런싱을 통해 멀티 노드, 대규모 서비스 환경까지 확장 가능
이러한 구조적 확장은 LLM을 연구 환경을 넘어 실제 서비스 환경에서 안정적이고 확장 가능하게 운영할 수 있도록 만드는 핵심 기술입니다.
Inside vLLM: Anatomy of a High-Throughput LLM Inference System
[!NOTE] Originally posted on Aleksa Gordic’s website.
blog.vllm.ai

'인공지능' 카테고리의 다른 글
| 데이터 없이 스스로 똑똑해지는 AI: 메타(Meta)의 '언어 셀프 플레이(LSP)'가 보여준 3가지 놀라운 사실 (0) | 2025.09.11 |
|---|---|
| 분산 시스템에서 vLLM 서빙하기: 내부 동작 원리와 확장 구조 - 4편 (0) | 2025.09.11 |
| vLLM 고급 기능 완벽 정리: Chunked Prefill부터 Speculative Decoding까지 - 2편 (0) | 2025.09.10 |
| Inside vLLM: 고성능 LLM 추론 시스템의 구조 해부 - 1편 (0) | 2025.09.10 |
| 바이트댄스 Seedream 4.0 프리뷰: 구글 나노바나나를 넘어설 수 있을까 (0) | 2025.09.10 |