vLLM DSpark을 활용한 적응형 검증(Adaptive Verification)

vLLM은 추측적 디코딩(speculative decoding)을 최적화하기 위해 DSpark의 신뢰도 기반 스케줄링 검증(confidence-scheduled verification)을 사용하는 적응형 검증을 구현했습니다. 학습된 신뢰도 헤드(confidence head)를 사용하여 초안 토큰(drafted tokens)의 생존 확률을 점수화함으로써, vLLM은 시스템 부하와 토큰 신뢰도에 따라 단계별로 검증할 토큰 수를 동적으로 결정할 수 있으며, 이를 통해 num_speculative_tokens의 수동 튜닝 필요성을 제거합니다.

높은 동시성(High Concurrency)을 위한 추측적 디코딩 최적화

추측적 디코딩은 일반적으로 계산량을 늘려 디코딩 단계를 줄이는 방식을 취합니다. 이는 GPU가 메모리 대역폭에 제한을 받는 낮은 배치 크기에서는 효율적이지만, 초안 토큰이 실제 토큰과 계산 자원을 두고 경쟁하는 높은 동시성(예: 배치 크기 256) 환경에서는 문제가 될 수 있습니다. 수락률(acceptance rates)이 떨어지는 경우(예: DeepSeek-V4-Pro-0813에서 7개 토큰 블록의 마지막 토큰이 생존할 확률이 10% 미만인 경우), 거부된 토큰은 중요한 계산 자원을 낭비하고 전체 처리량을 감소시킵니다.

적응형 검증은 정적인 추측 길이를 동적인 예산(budget)으로 대체함으로써 이 문제를 해결합니다. 고정된 수의 토큰을 검증하는 대신, vLLM은 전체 배치에서 가장 확률이 높은 초안 시퀀스에 검증 슬롯을 할당하여, 계산 자원이 수락 가능성이 높은 토큰에만 사용되도록 보장합니다.

DSpark 신뢰도 스케줄링 메커니즘

적응형 검증은 DSpark 신뢰도 헤드를 활용하여 각 초안 토큰에 생존 확률을 할당합니다. 시스템은 다음 로직을 사용하여 단계 시간당 기대되는 생성 토큰 수를 최대화함으로써 최적의 초안 예산($B$)을 결정합니다:

  • Global Top-B Selection: 스케줄러는 모든 요청에 걸쳐 가장 우수한 $B$개의 초안 슬롯을 식별합니다. 초안 내 위치가 증가할수록 생존 확률이 감소하기 때문에, 시스템은 각 요청의 초안에서 연속적인 접두사(prefix)만을 허용합니다.
  • Budget Calculation: 예산 $B$는 기대 보너스 토큰(샘플링 요청당 하나의 보너스 토큰과 $B$개의 최적 슬롯의 생존)과 단계의 프로파일링된 비용(비초안 토큰 $T$와 초안 토큰 $B$의 합) 사이의 균형을 맞추는 비용 모델에서 도출됩니다.
  • Execution Pipeline: 예산 크기 결정은 이전 단계의 더블 버퍼링된 신뢰도 배열을 사용하여 CPU에서 수행됩니다. 요청에 대한 실제 슬롯 할당은 PyTorch와 torch.compile (Triton으로 변환됨)을 통해 GPU에서 실행되어 호스트-디바이스 간의 데이터 읽기-쓰기를 방지합니다.

기술적 구현 및 CUDA Graphs

가변 크기 검증을 지원하기 위해, vLLM은 varlen decode CUDA graphs를 통합했습니다. 이 구현은 다음 구성 요소에 의존합니다:

  • Attention Kernel Support: 시스템은 가변 길이를 처리하기 위해 sparse MLA kernels와 DeepGEMM의 varlen indexer kernel을 사용합니다.
  • Graph Capture: 디코딩 그래프는 num_speculative_tokens + 1의 최대 쿼리 길이로 캡처됩니다. 단일 그래프는 요청당 1개에서 num_speculative_tokens + 1개의 토큰이 섞여 있는 어떤 조합도 처리할 수 있습니다.
  • Cost Modeling: 시작 시, 엔진은 더미 단계를 프로파일링하여 검증 및 초안 생성 비용에 대한 룩업 테이블을 생성합니다. 프로파일링 노이즈와 커널 타일 크기 변동을 처리하기 위해 비용 곡선은 단조 증가(monotonic)하도록 강제됩니다.
  • CUDA Graph Padding: 비용 모델은 CUDA graph 패딩의 "계단식(staircase)" 효과를를 고려합니다. 예를 들어, 121개 토큰의 배치는 128개 토큰 그래프의 비용을 발생시킬 수 있습니다 있습니다. 이는 예산 알고리즘이 최대 효율을 위해 CUDA graph 영역 내에 머물도록 유도합니다.

성능 결과

DeepSeek-V4-Pro-0813 (TP=8 on 8×B300 SM100)에서의 테스트 결과, 적응형 검증은 동시성 범위를 1에서 256까지 스캔할 때 처리량과 상호작용성 사이의 파레토 최적(Pareto frontier)을 일관되게 유지함을 보여주었습니다.

이 시스템은 낮은 동시성에서는 긴 고정 블록을, 높은 동시성에서는 짧은 고정 블록을 효과적으로 모방하여, 작업 부하의 형태에 대한 사전 지식 없이도 두 방식의 장점을 모두 제공합니다.

현재 제한 사항

적응형 검증은 현재 다음과 같은 제약 사항이 있습니다:

  • Hardware/Backend Requirements: 전체 varlen decode 그래프를 사용하려면 AttentionCGSupport.ALWAYS가 필요하며, 이는 현재 SM100에서 DSV4 sparse-MLA, sparse-SWA, 그리고 indexer 백엔드에서 보고됩니다.
  • Unsupported Features: 이 기능은 --enforce-eager 모드, LoRA, 또는 파이프라인 병렬 처리(pipeline parallelism)와 호과합할 수 없습니다.
  • Logprobs: 출력 logprobs는 지원되지 않습니다. 검증 단계에서 순전파(forward pass) 이후에 로짓(logits)을 압축하기 때문입니다.

설정 및 재현

적응형 검증은 speculative-config JSON 내의 enable_adaptive_verification: true 플래그를 통해 활성화됩니다. 최적의 성능을 위해, max_cudagraph_capture_size는 검증 배치가 캡처된 그래프 내에 머물 수 있도록 (num_speculative_tokens + 1) * max_num_seq로 설정되어야 합니다.

Sources

관련

  • Dispatch
  • Dispatch
  • Dispatch
  • Dispatch
  • Dispatch