[sglang] SGLang 성능 최적화: RTX 5090 32GB 환경에서의 CUDA Graph 및 Chunked Prefill 개선
PR 링크: sgl-project/sglang#37898 상태: Merged | 변경: +7 / -4
들어가며
최근 LLM 서빙 프레임워크인 SGLang에서 RTX 5090과 같은 32GB VRAM을 탑재한 GPU 환경에서의 성능 병목을 해결하는 흥미로운 PR이 머지되었습니다. 기존 SGLang은 32GB 메모리 계층에서 decode_cuda_graph의 max_bs(최대 배치 사이즈)를 24로 제한하고 있었습니다. 이로 인해 배치 사이즈가 32를 넘어가는 순간 CUDA Graph를 사용하지 못하고 Eager 모드로 전환되면서, 고부하 환경에서 vLLM 대비 처리량(throughput)이 급격히 하락하는 문제가 발생했습니다. 본 글에서는 이 문제를 어떻게 해결했는지 코드 레벨에서 분석합니다.
코드 분석
이번 변경은 python/sglang/srt/arg_groups/memory_hook.py 파일의 메모리 설정 로직을 수정하여 이루어졌습니다.
1. CUDA Graph Max Batch Size 상향
기존 코드에서는 32GB 이하의 GPU 환경에서 tp_size < 4일 경우 max_bs를 24로 고정했습니다. 이를 48로 두 배 상향 조정했습니다.
- decode_cuda_graph_config.max_bs = 24
+ decode_cuda_graph_config.max_bs = 48
또한 tp_size >= 4인 경우에도 기존 80에서 160으로 상향하여 더 넓은 범위의 배치 사이즈에서 CUDA Graph의 이점을 누릴 수 있도록 했습니다.
2. Chunked Prefill Size 최적화
chunked_prefill_size 역시 2048에서 4096으로 상향되었습니다. 이는 더 긴 컨텍스트를 한 번에 처리하거나, 더 효율적인 메모리 활용을 가능하게 합니다.
- chunked_prefill_size=2048,
+ chunked_prefill_size=4096,
왜 이게 좋은가
이 최적화의 핵심은 'Eager 모드로의 강제 전환 방지'에 있습니다. CUDA Graph는 반복적인 커널 실행을 그래프로 캡처하여 오버헤드를 획기적으로 줄여줍니다. 기존에는 max_bs=24라는 낮은 제한 때문에, 실제 32GB VRAM이 충분히 수용 가능한 부하임에도 불구하고 Eager 모드로 돌아가야 했습니다.
성능 개선 수치
RTX 5090 8개 노드 환경에서 검증한 결과는 다음과 같습니다:
- Qwen3.5-9B: 배치 사이즈 32에서 기존 대비 4.4% 처리량 향상 (이전에는 vLLM 대비 71% 성능 하락 발생).
- Qwen2.5-VL-7B: 모든 배치 사이즈 구간에서 vLLM 대비 우수한 성능 기록.
교훈
- 하드웨어 특성에 맞는 튜닝: 최신 GPU(Blackwell 아키텍처 등)는 이전 세대보다 더 큰 워크로드를 수용할 수 있으므로, 하드코딩된 제한치를 주기적으로 재검토해야 합니다.
- 메모리 할당 전략:
mem_fraction_static계산 시, CUDA Graph 워크스페이스를 KV 캐시 할당 전에 캡처함으로써 메모리 효율성을 유지하면서도 성능을 확보하는 전략이 유효함을 보여줍니다.
결론
이번 PR은 단순히 상숫값을 변경한 것이 아니라, 하드웨어의 가용 자원을 최대한 활용하여 서빙 엔진의 안정적인 처리량을 확보한 사례입니다. 고성능 LLM 서빙을 구축할 때, 프레임워크의 기본 설정값이 최신 하드웨어의 잠재력을 모두 끌어내고 있는지 확인하는 것이 얼마나 중요한지 다시금 깨닫게 합니다.
참고 자료
- https://pytorch.org/docs/stable/generated/torch.cuda.make_graphed_callables.html
- https://github.com/sgl-project/sglang
⚠️ 알림: 이 분석은 AI가 실제 코드 diff를 기반으로 작성했습니다.
관련 포스트
PR Analysis 의 다른글
- 이전글 [flashinfer] [FlashInfer] Blackwell 아키텍처를 위한 Warp Level Split-K BF16 GEMM 최적화 분석
- 현재글 : [sglang] SGLang 성능 최적화: RTX 5090 32GB 환경에서의 CUDA Graph 및 Chunked Prefill 개선
- 다음글 [sglang] SGLang, JoyEcho 모델에 Breakable CUDA Graph 적용하여 추론 속도 43% 향상
댓글