effidevFlutter · Cloudflare 엣지 · 클라우드 비용 최적화
한국어

vLLM vs SGLang 추론 엔진 비교: Speculative Decoding과 Chunked Prefill로 LLM VRAM/지연시간 최적화

vLLM vs SGLang Speculative Decoding Chunked Prefill VRAM Latency Optimization

vLLM vs SGLang 추론 엔진 비교: Speculative Decoding & Chunked Prefill 최적화

생성형 AI(LLM) 서비스를 프로덕션 환경에 배포할 때 가장 큰 장애물은 GPU VRAM 부족과 **높은 응답 지연 시간(Latency)**입니다. 동시 사용자(Concurrency)가 증가할수록 KV Cache 메모리가 기하급수적으로 늘어나 서버가 다운되거나 TTFT(Time To First Token)가 폭증하기 때문입니다.

이 문제를 해결하기 위해 PagedAttention 기반의 전통 강자 **vLLM**과, RadixAttention 기반으로 복잡한 구조적 프롬프팅에서 획기적인 속도를 보여주는 **SGLang**이 격돌하고 있습니다.

본 가이드에서는 두 추론 엔진의 핵심 메모리 아키텍처 차이점을 분석하고, Chunked Prefill 및 **Speculative Decoding(추측 디코딩)**을 적용하여 VRAM과 지연 시간을 극적으로 줄이는 배포 설정을 공유합니다.


1. vLLM (PagedAttention) vs SGLang (RadixAttention) 비교

비교 항목 vLLM (PagedAttention) SGLang (RadixAttention)
KV Cache 메모리 구조 OS의 가상 메모리 페이징처럼 파편화 방지 트라이(Trie) 구조 기반 Radix Tree 메모리 맵
프롬프트 재사용성 일반 시스템 프롬프트 캐싱에 강점 멀티턴 대화, 에이전트, Few-shot 캐싱에 우수
추천 유즈케이스 일반 RAG, 가변 길이 다중 사용자 챗봇 다중 에이전트, JSON Structured Output, 복잡한 툴 호출
최대 Throughput (TPS) 기본 성능 매우 우수 높은 프롬프트 재사용률 환경에서 vLLM 대비 1.5~3배 빠름

2. 핵심 성능 최적화 기법 2가지

1) Chunked Prefill (프리필 청킹)

긴 입력 프롬프트(Prefill 단계)와 생성 답변(Decode 단계)이 동시에 들어올 때 GPU 렌더링 파이프라인이 멈추는 프레임 드랍을 막기 위해, 입력 토큰을 일정 단위(예: 512, 1024 토큰)로 쪼개어 배치 처리합니다.

2) Speculative Decoding (추측 디코딩)

작고 빠른 **Draft Model(예: Qwen2.5-0.5B)**이 답변 토큰을 빠르게 여러 개 추측하여 생성하고, 크고 정교한 **Target Model(예: Qwen2.5-72B)**이 한 번의 파워풀한 패스로 이를 동시 검증하는 방식입니다. 품질 저하 없이 디코딩 속도를 2배 이상 향상시킵니다.


3. 실전 서빙 엔진 구동 및 설정 코드

vLLM Speculative Decoding 구동 명령어 (CLI)

vLLM v0.9.0(2025-05-28)부터 --speculative-model, --num-speculative-tokens 같은 독립 플래그는 deprecated 되어 소스코드에서 제거되었습니다. 예전 방식 그대로 실행하면 unrecognized arguments 에러가 나므로, 아래처럼 --speculative-config에 JSON 하나로 묶어서 전달해야 합니다.

# vLLM: Speculative Decoding (Target: Llama-3.1-70B, Draft: Llama-3.1-8B)
# NOTE: --speculative-model / --num-speculative-tokens were removed in vLLM v0.9.0+.
# Passing them now raises "unrecognized arguments"; use the single --speculative-config JSON flag instead.
python3 -m vllm.entrypoints.openai.api_server \
    --model meta-llama/Meta-Llama-3.1-70B-Instruct \
    --speculative-config '{"model": "meta-llama/Meta-Llama-3.1-8B-Instruct", "num_speculative_tokens": 5}' \
    --enable-chunked-prefill \
    --max-num-batched-tokens 2048 \
    --gpu-memory-utilization 0.90 \
    --tensor-parallel-size 4

SGLang Speculative Decoding & Radix Cache 서버 구동 (Python)

별도의 draft 모델을 쓰는 구성에서는 speculative_algorithm="STANDALONE"을 명시적으로 지정해야 합니다. 기본값이 None이라 이 값을 생략하면 draft 모델 경로와 토큰 수를 넣어도 Speculative Decoding 자체가 켜지지 않습니다.

import sglang as sgl

# SGLang 서버 실행: Speculative Draft Model 및 Radix Cache 활성화
@sgl.function
def multi_turn_agent(s, system_prompt, user_query):
    s += sgl.system(system_prompt)
    s += sgl.user(user_query)
    s += sgl.assistant(sgl.gen("response", max_tokens=1024, temperature=0.2))

# 실행 스크립트 예시
if __name__ == "__main__":
    # Launch SGLang Engine with Chunked Prefill & Speculative Verification
    runtime = sgl.Runtime(
        model_path="meta-llama/Meta-Llama-3.1-70B-Instruct",
        speculative_algorithm="STANDALONE",
        speculative_draft_model_path="meta-llama/Meta-Llama-3.1-8B-Instruct",
        speculative_num_draft_tokens=5,
        mem_fraction_static=0.88,
        tp_size=4
    )
    sgl.set_default_backend(runtime)

4. 실측 벤치마크 요약 및 선택 가이드

측정 항목 기본 설정 (Standard Decoding) Chunked Prefill + Speculative 적용
TTFT (첫 토큰 지연 시간) 1.8초 0.4초 (77% 감소)
Decode Speed (TPS) 24 tokens/sec 58 tokens/sec (2.4배 향상)
동시 요청 시 VRAM 절감 기준점 KV Cache 효율 향상으로 VRAM 35% 절감

최종 선택 기준

  1. 단순 RAG 및 대규모 동시 사용자 서빙: 생태계가 안정적이고 운영 도구가 풍부한 vLLM 선택.
  2. 에이전트, 다중 프롬프트 캐싱, JSON Structured Output: RadixAttention으로 캐시 히트율이 높은 SGLang 선택.
  3. 두 엔진 모두 Speculative Decoding을 조합하면 최소 리소스로 2배 이상의 디코딩 속도를 확보할 수 있습니다.