SGLang에서 멀티모달 인코더의 데이터 병렬화

SGLang에서 멀티모달 인코더의 데이터 병렬화 (DP)

일반적인 VLM 아키텍처는 멀티모달 인코더텍스트 디코더라는 두 주요 구성 요소로 이뤄져요.

대부분의 VLM은 멀티모달 인코더로 비전 트랜스포머(ViT)를 사용해요. ViT는 시각 데이터를 처리하고 객체·색상·질감 같은 피처를 추출해, 모델이 이해할 수 있는 형태로 변환하는 역할을 하죠.

텍스트 디코더는 LLM 기반이에요. 텍스트 데이터를 처리하고, 인코딩된 시각 피처를 바탕으로 출력을 생성해요.

출처: 공식문서

왜 데이터 병렬인가

ViT는 언어 디코더에 비해 크기가 아주 작아서, 텐서 병렬(TP)로 얻는 이득이 크지 않아요. 오히려 TP는 레이어마다 all-reduce를 수행해야 해서 통신 오버헤드가 상당하죠.

ViT는 데이터 병렬(DP)로, LLM은 텐서 병렬(TP)로 배치하는 하이브리드 구성이 TTFT(첫 토큰까지의 시간)를 꾸준히 낮추고 전체 처리량을 올려줘요. 이런 배치에서 비전 프론트엔드는 병렬이면서 가벼워지고, 부족한 인터커넥트 대역폭과 집합 연산(collective op)은 LLM 쪽에 아껴 쓸 수 있어요.

데이터 병렬은 전체 모델을 여러 GPU 셋에 복제하고, 서로 다른 요청 배치를 병렬로 처리하는 방식이에요.

명령 예시

배치 수준 DP는 --mm-enable-dp-encoder를 설정해 켤 수 있어요.

python3 -m sglang.launch_server \
    --model-path Qwen/Qwen2.5-VL-7B-Instruct \
    --tp 2 \
    --mm-enable-dp-encoder

지원이 확인된 모델

더 알아보기 (Learn more)