본문 바로가기

인공지능

vLLM 확장 아키텍처: UniProcExecutor에서 MultiProcExecutor까지 - 3편

728x90
반응형
728x170

대규모 언어 모델(LLM)은 모델 크기가 커질수록 단일 GPU 메모리에 적재하기 어려워집니다. 이 문제를 해결하기 위해서는 단일 프로세스 실행 방식을 넘어, 여러 GPU와 여러 프로세스를 활용하는 병렬화 기법이 필요합니다. vLLM은 이를 지원하기 위해 UniProcExecutorMultiProcExecutor라는 두 가지 실행기를 제공합니다. 이번 글에서는 이 두 실행기의 차이와, 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 실행을 확장한 구조로, 내부적으로는 다중 프로세스와 메시지 큐를 활용합니다.

  1. 프로세스 생성 및 초기화
    • world_size(예: TP=8이면 8개 프로세스)를 기준으로, 각 GPU마다 별도의 워커 프로세스를 실행
    • 각 워커는 모델의 일부를 로드하고 초기화
  2. 메시지 큐 기반 통신
    • rpc_broadcast_mq: 부모 프로세스가 워커들에게 작업을 전달하는 메시지 큐
    • worker_response_mq: 워커가 처리 결과를 부모 프로세스에 반환하는 큐
  3. 작업 실행 흐름
    • 부모 프로세스는 들어온 요청을 rpc_broadcast_mq에 넣음
    • 워커들은 이를 수신하여 자신의 역할에 맞는 연산을 수행
    • 결과는 worker_response_mq를 통해 부모에게 반환
    • 부모는 지정된 워커의 결과를 모아 최종 출력을 생성
  4. 엔진 추상화
    • 중요한 점은, 엔진 입장에서는 UniProcExecutor와 MultiProcExecutor 모두 동일한 인터페이스(execute_model)를 사용한다는 것입니다.
    • 즉, 개발자는 내부 병렬화 로직을 신경 쓰지 않고도 같은 코드로 단일 GPU와 다중 GPU 환경을 지원할 수 있습니다.

확장 단계: MultiProcExecutor 이후

MultiProcExecutor를 통해 단일 노드 내 여러 GPU를 활용할 수 있게 되면, 그다음 단계는 멀티 노드 확장입니다.

  • 데이터 병렬화(Data Parallelism, DP)
    • 모델 복제를 여러 노드에 배치하여, 서로 다른 요청을 동시에 처리
    • 부하 분산(load balancing)과 복제 간 동기화가 필요
  • API 서버와 로드 밸런싱
    • 여러 모델 인스턴스를 앞단 API 서버와 연결하여 대규모 트래픽을 효율적으로 분산 처리
    • 대규모 서비스 환경에 적합한 구조

728x90

이번 글에서는 vLLM의 UniProcExecutor와 MultiProcExecutor를 중심으로, 단일 GPU 실행에서 다중 GPU 병렬 실행으로 확장되는 과정을 살펴보았습니다.

  • UniProcExecutor는 단순하고 직관적인 단일 GPU 실행기
  • MultiProcExecutor는 텐서 병렬화와 파이프라인 병렬화를 지원하며, 여러 GPU에서 모델을 분산 실행
  • 메시지 큐 기반 프로세스 간 통신으로 병렬 처리 복잡성을 추상화
  • 이후 데이터 병렬화와 로드 밸런싱을 통해 멀티 노드, 대규모 서비스 환경까지 확장 가능

이러한 구조적 확장은 LLM을 연구 환경을 넘어 실제 서비스 환경에서 안정적이고 확장 가능하게 운영할 수 있도록 만드는 핵심 기술입니다.

https://blog.vllm.ai/2025/09/05/anatomy-of-vllm.html?fbclid=IwY2xjawMt2bVleHRuA2FlbQIxMQABHmn2DXeMMyyuL0Qyg4oZbWWnSgZ6upm-r5u8yZ_l4EMZb8ADA1zAZG0BZAKq_aem_kiqfMr-HvCwtVVwUkMiOYw#from-uniprocexecutor-to-multiprocexecutor

 

Inside vLLM: Anatomy of a High-Throughput LLM Inference System

[!NOTE] Originally posted on Aleksa Gordic’s website.

blog.vllm.ai

 

728x90
반응형
그리드형