vLLM Elastic Expert Parallelism
vLLM Elastic Expert Parallelism
vLLM은 Mixture-of-Experts (MoE) 배포 시 런타임에 워커 수를 늘리거나 줄일 수 있는 Elastic Expert Parallelism (Elastic EP)을 도입했습니다. 이를 통해 서빙 용량을 조정하기 위해 전체 서버를 재시작할 필요가 없으며, 수요 변동 시 트래픽 저하와 운영 오버헤드를 줄일 수 있습니다.
MoE 배포를 위한 런타임 스케일링
Elastic EP를 통해 vLLM은 런타임에 데이터 병렬(DP) 워커 수를 재구성할 수 있습니다. Expert parallelism (EP) 그룹 크기는 DP와 tensor parallelism (TP)의 곱이므로, DP 크기를 변경하면 EP 그룹이 효과적으로 스케일링되고 새로운 워커 세트에 전문가(experts)가 재분배됩니다.
운영자는 단일 API 호출을 통해 크기 조정을 트리거할 수 있습니다:
curl -X POST http://localhost:8000/scale_elastic_ep \
-H "Content-Type: application/json" \
-d '{"new_data_parallel_size": 8}'
기술적 구현 및 상태 관리
런타임에 DP를 스케일링하려면 무효화를 방지하기 위해 여러 핵심 런타임 상태를 업데이트해야 합니다. vLLM은 스케일링 프로세스를 명시적인 동기화 지점을 가진 조정된 상태 머신으로 취급합니다:
- Distributed Communication Groups: 새로운 rank 세트를 반영하기 위해 EP, DP 및 world 그룹을 업데이트해야 합니다.
- Expert Assignment: EP 크기에 따라 특정 rank에 대한 전문가 매핑이 재계산됩니다.
- Model Weights: 새로운 rank는 필요한 가중치를 받아야 하며, 기존 rank는 업데이트된 전문가 가중치가 필요할 수 있습니다.
- Compiled State: CUDA graphs 및
torch.compile상태는 새로운 토폴로지에 맞게 재설정 및 재가열(re-warmed)됩니다.
Scale-Up 워크플로우
DP=N에서 DP=M (M > N)으로 스케일링할 때, vLLM은 6단계 프로세스를 따릅니다:
- Trigger and Request Handling: 프로세스는
/scale_elastic_ep에서 시작됩니다.VLLM_ELASTIC_EP_DRAIN_REQUESTS=1이 활성화된 경우, vLLM은 진행 중인 작업을 처리할 때까지 대기합니다(기본 타임아웃 120초). - New Engine Core Initialization: Ray DP 백엔드를 사용하여 vLLM은 추가 DP 워커를 실행합니다. 이 rank들은 플레이스홀더 가중치로 모델을 초기화하고 재구성 신호를 기다립니다.
- Standby Communication Groups: 기존 rank들은
StatelessGroupCoordinator를 사용하여 대기 그룹을 생성합니다. 이를 통해 기존 구성이 포워드 패스를 계속 실행하는 동안 새로운 구성을 준비할 수 있습니다. - Expert Mapping and Weight Transfer: 비전문가 가중치(attention layers, norms, embeddings)는 고속 인터커넥트(NVLink 또는 RDMA)를 통해 기존 rank에서 새로운 rank로 브로드캐스트됩니다. 전문가 가중치는 EPLB reshuffle 단계로 미뤄집니다.
- The Switch: vLLM은 CUDA graphs를 해제하고, 대기 그룹을 활성 상태로 승격시키며, 기존 그룹을 제거하고, 컴파일된 경로를 새로운 설정에 맞추기 위해 모델을 재가열합니다.
- EPLB Reshuffle: Expert Parallel Load Balancing (EPLB)이 모든
M개 rank에 전문가를 재분배하고 필요한 전문가 가중치 이동을 수행합니다.
Scale-Down 워크플로우
DP=M에서 DP=N으로 스케일링하는 것도 유사한 패턴을 따르지만, EPLB reshuffle이 먼저 발생합니다. 이는 제거될 예정인 rank가 소유한 전문가가 해당 rank가 종료되기 전에 생존하는 N개 rank로 마이그레이션되도록 보장합니다.
Two-Stage Barrier를 통한 동기화
비동기 DP 엔진 코어로 인한 데드락을 방지하기 위해 vLLM은 2단계 배리어(two-stage barrier)를 사용합니다. 첫 번째 배리어는 타임아웃을 사용합니다. 실패할 경우, rank들은 일부 피어가 여전히 포워드 단계를 실행 중임을 추론하고 한 반복 동안 엔진 루프로 돌아갑니다. 모든 rank가 정렬되면 타임아웃이 없는 두 번째 배리어를 통해 함께 재구성 단계로 진입합니다.
결함 허용(Fault Tolerance)에 대한 시사점
Elastic EP는 vLLM의 결함 허용 전략의 기초 구성 요소 역할을 합니다. 런타임 재구성 경로를 제공함으로써 vLLM은 전체 재시작 없이 rank 장애로부터 복구할 수 있습니다:
- Detect: 헬스 체크 또는 백엔드 신호를 통해 장애를 식별합니다.
- Scale Down: 장애가 발생한 rank를 제거하고 전문가를 재분배합니다.
- Scale Up: 사용 가능한 경우 교체 용량을 추가합니다.
NIXL EP는 이 흐름에 특히 관련이 있는 통신 백엔드로 강조되는데, 이는 EP 측의 장애를 감지, 보고 및 복구할 수 있으며 connect_ranks() 및 disconnect_ranks() API를 통해 rank를 점진적으로 추가하거나 제거할 수 있기 때문입니다.
현재 한계 및 향후 과제
Elastic EP가 핵심 재구성 경로를 제공하지만, 현재 지원은 tensor_parallel_size=1, 단일 API 서버, DBO가 없는 Ray DP 배포로 제한됩니다. 향후 개발 영역은 다음과 같습니다:
tensor_parallel_size > 1및 더 풍부한 병렬 구성 지원.- DBO 및 MoE draft/drafter 모델을 포함한 더 많은 서빙 기능과의 통합.
- 개선된 오버랩 및 감소된 warmup 비용을 통한 재구성 윈도우 단축.
- 오토스케일링 정책(예: Dynamo, llm-d)과의 연결.
- Ray 이외의 추가 DP 백엔드 지원.