vLLM 적응형 검증, 신뢰도 헤드 없이: 온라인 피팅 수용 추정기 (PR #52228)

TL;DR

vLLM은 이제 훈련된 신뢰도 헤드를 제공하는 DSpark 드래프터뿐만 아니라 모든 드래프트 모델 기반 스pekulator 유형에 대해 신뢰도 점수를 지원합니다. 신뢰도 헤드가 없는 경우 온라인 피팅 추정기가 드래프터의 로짓에서 특징(드래프터의 가장 가능성 높은 토큰의 로그 오즈)을 도출하고, 이를 사용하여 드래프트 토큰 각각에 대한 대상 모델의 수용 확률을 예측합니다. 이 예측은 적응형 검증(AV)의 신뢰도 점수로 직접 사용됩니다. 추정기의 계수는 라이브 서빙 중에 지속적으로 재피팅되어 들어오는 데이터 트래픽에 적응합니다. 이 기능은 PR #52228에서 추가되었으며, 신뢰도 헤드가 없는 드래프트 모델에 대해 enable_adaptive_verification으로 활성화됩니다.

적응형 검증이란 무엇이며 왜 신뢰도 점수가 필요한가

적응형 검증은 스pekulative 디코딩 중 드래프트된 토큰의 하위 집합만 검증하여, 대상 모델의 forward pass가 실행되기 전에 수용 확률이 낮은 드래프트 토큰을 배치에서 제거합니다. 이는 계산을 절약하며, 특히 대규모 배치 크기를 서빙할 때 GPU가 계산 집약적이 되므로 유용합니다.

AV는 토큰별 수용 확률 추정이 필요합니다. 이 변경 이전에는 이 요구 사항으로 인해 AV가 종종 신뢰도 헤드(드래프터의 각 위치에 대한 hidden state 위의 작은 선형 레이어로, "대상이 이 토큰을 수용할까?"에 대한 이진 분류기로 훈련됨)를 제공하는 DSpark 드래프터로 제한되었습니다.

신뢰도 헤드가 없는 드래프트 모델(EAGLE, MTP, DFlash 및 일부 DSpark 체크포인트)은 AV를 전혀 사용할 수 없었습니다. 신뢰도 헤드를 추가하려면 드래프터를 재훈련해야 하는데, 이는 이미 서빙 중인 많은 기존 체크포인트에는 선택지가 아닙니다.

해결책: 서빙 중 피팅되는 로지스틱 회귀

vLLM은 드래프트 분포에서 파생된 단일 스칼라(드래프터의 가장 가능성 높은 토큰의 로그 오즈)에서 각 드래프트 토큰의 수용 확률을 추정하는 경량 로지스틱 회귀를 추가했습니다. 모델은 드래프트 위치별로 하나의 공유 기울기와 하나의 절편을 가지므로, K-토큰 드래프터는 총 K + 1개의 매개변수가 필요합니다. 이러한 매개변수는 대상 모델이 정상 검증 중에 이미 생성하는 수용/거부 결정에서 온라인으로 피팅됩니다. 기존 드래프트 체크포인트는 AV를 무료로 얻을 수 있습니다.

주어진 드래프트 토큰에 대한 신뢰도 점수는 위치별 로지스틱 회귀로 추정되며, 여기서 ω는 모든 드래프트 위치에서 공유되는 피팅된 기울기, βi는 피팅된 위치별 절편, q는 드래프트 분포입니다. 로그 오즈 형태에서 logit(qmax)은 추정기의 특징입니다. 드래프트의 가장 가능성 높은 토큰의 로그 오즈로, 드래프트 모델이 자신의 예측에 얼마나 확신하는지를 나타냅니다. 이 특징은 ω와 βi에 의해 선형 변환되어 대상 모델이 드래프트를 수용할 로그 오즈를 예측합니다. 이 값의 시그모이드는 p, 즉 추정된 수용률이며, AV의 신뢰도 점수로 사용됩니다.

특징 선택에 사용된 네 가지 기준

후보 특징을 평가할 때 네 가지 축이 가장 중요했습니다.

  1. 무손실성 — 특징이 스pekulative 디코딩 중 출력 분포를 편향시키는지 여부.
  2. AUC(Area Under the Curve) — 무작위로 선택된 수용된 드래프트가 무작위로 선택된 거부된 드래프트보다 높은 점수를 받을 확률. 이는 수용되어야 하는 드래프트와 거부되어야 하는 드래프트를 구별하는 능력을 측정합니다. 0.5는 무작위 확률입니다.
  3. Log-loss — 예측된 수용 확률의 평균 음의 로그 우도로, 확신에 찬 오답을 벌점하고 보정을 장려합니다.
  4. Expected Calibration Error (ECE) — 각 드래프트를 예측된 수용 확률로 구분한 다음, 각 구간 내 평균 예측과 평균 관측 빈도 사이의 오차를 구간 점유율로 가중하여 측정합니다. 이는 보정을 측정합니다.

무손실성은 협상 불가입니다. 이것 없이는 스pekulative 디코딩이 대상 모델의 정확한 분포를 출력한다는 보장을 잃습니다. AUC와 ECE는 모두 AV의 트리밍 결정에 중요하지만 다른 방식으로 작용합니다. AUC는 생존 확률의 로컬 순서를 결정하여 수용될 가능성이 더 높은 드래프트 토큰이 낮은 가능성의 토큰보다 먼저 수용되도록 합니다. ECE는 전역 예산 결정을 관리하며, 예측된 확률을 합산하고 측정된 비용 테이블로 나누므로 ECE는 추정된 수용 토큰 수가 실제와 일치하도록 보장합니다.

특징 비교 결과

후보 특징은 DeepSeek-V4-Flash + DSpark(temp=1, top-p=0.95, conc=64)를 서빙하면서 수집된 약 450만 개의 레이블링된 드래프트에서 측정되었습니다(AV 없이). 5개의 데이터셋(SPEED-Bench 2k 저/고엔트로피, GSM8K, HumanEval, MT-Bench)이 사용되었습니다. 마지막 두 행은 피팅된 특징이 아닌 참조입니다.

특징 무손실 AUC log-loss ECE
log(qmax) 예 0.8069 0.4813 0.0592
log(qmax) − log(q2nd) (top-2 마진) 예 0.8156 0.4437 0.0105
H(q) (엔트로피) 예 0.8321 0.4577 0.0638
−log(−log(qmax)) 예 0.8336 0.4289 0.0103
*logit(qmax) (출시됨)* 예 0.8336 0.4284 0.0100
logit(qsampled) 아니오 0.8553 0.4040 0.0152
−log(−log(qsampled)) 아니오 0.8554 0.4075 0.0193
qmax (피팅 없음, 확률로 직접 사용) 예 0.8259 0.4880 0.0736
훈련된 신뢰도 헤드 예 0.8191 0.4449 0.0052

logit(q_sampled)와 −log(−log(q_sampled))는 AUC에서 선택된 특징보다 확실히 우수하지만, 이를 기반으로 트리밍하면 출력 분포가 편향되므로 거부되었습니다. 둘 다 드래프터가 실제로 추출한 토큰의 확률인 qsampled를 읽습니다. 이 값의 함수로 드래프트를 트리밍하면 위치 i에서의 검증 결정이 xi 자체에 의존하게 되어 생존 드래프트가 더 이상 q로 분포되지 않습니다. 표준 rejection sampling은 토큰을 min(1, p/q)의 확률로 수용하며, q가 드래프트 토큰이 샘플링된 분포일 것으로 기대합니다. qsampled로 트리밍하면 방출 분포가 드래프터의 더 높은 신뢰도 토큰 쪽으로 편향됩니다.

qmax "피팅 없음" 행은 EAGLE-2가 드래프트 트리를 구축할 때 드래프터의 자체 확률을 직접 사용하는 대신 피팅이 필요한 이유를 설명합니다. 직접 사용하면 드래프터의 top-token 확률은 훈련된 신뢰도 헤드보다 드래프트 순위를 더 잘 매기지만(0.8259 vs 0.8191 AUC), 잘 보정되지는 않습니다. 레이블링된 드래프트에 대한 평균 예측은 관측된 수용률 0.723과 비교하여 0.784이고, ECE는 출시된 logit(qmax) 특징보다 7배 나쁩니다(0.0736 vs 0.0100). 드래프터의 top-token 확률은 드래프터가 자신의 예측에 얼마나 확신하는지만 반영하며, 대상 모델이 동의할지 여부는 반영하지 않습니다. 그리고 이러한 동의는 샘플링 설정과 워크로드에 의해 더욱 영향을 받습니다. 온라인 피팅은 대상의 수용/거부 결정에서 직접 이 매핑을 학습하여 더 나은 보정을 제공하며, 이는 예산 결정이 의존하는 바입니다.

추정기 대 훈련된 신뢰도 헤드

DeepSeek-V4-Flash + DSpark에서 추정기는 AUC와 log-loss 모두에서 신뢰도 헤드를 능가하지만 ECE에서는 뒤쳐집니다.

AUC ↑ log-loss ↓ ECE ↓
추정기 logit(qmax) 0.8336 0.4284 0.0100
훈련된 신뢰도 헤드 0.8191 0.4449 0.0052
Δ (추정기 − 헤드) +0.0146 −0.0166 +0.0048

첫 번째 드래프트 위치를 평균에서 제외하면 상황이 크게 달라집니다: 추정기의 AUC 우위는 +0.0278로, log-loss 우위는 −0.0323으로 확대되고, ECE 격차는 +0.0013으로 좁혀져 헤드와 추정기가 보정 측면에서 거의 동률이 됩니다.

AUC ↑ log-loss ↓ ECE ↓
추정기 logit(qmax) 0.8352 0.4420 0.0103
훈련된 신뢰도 헤드 0.8075 0.4743 0.0090
Δ (추정기 − 헤드) +0.0278 −0.0323 +0.0013

위치별 AUC 분석이 이러한 변화를 설명합니다. DeepSeek-V4-Flash + DSpark에서 7개의 스pekulative 토큰과 447만 개의 레이블링된 드래프트로 측정한 결과, 신뢰도 헤드는 첫 번째 위치에서 앞서지만 추정기는 두 번째 위치부터 앞서며 깊이가 증가함에 따라 격차가 커집니다. 추정기는 마지막 위치에서 AUC 0.08만큼 앞섭니다. 두 예측기 모두 다섯 번째 위치 이후에는 성능이 떨어지는데, 이는 DSV4-Flash의 DSpark가 블록 크기 5를 선언하고 드래프터가 그 이후로 훈련되지 않았기 때문에 드래프트 자체가 나빠지기 때문입니다.

생존은 연속 곱이고 첫 번째 드래프트 위치는 항상 요청의 가장 높은 점수를 가지므로 예산에서 잘릴 가능성이 적습니다. 추정기의 이점은 트리밍이 발생하는 정확한 위치에 있으며, 이것이 엔드투엔드 성능에서 신뢰도 헤드와 일치할 수 있는 이유를 설명합니다.

계수 피팅 방법

계수 ω와 βi는 라이브 서빙 중에 지속적으로 재피팅됩니다. 이전 디코딩 단계에서 제안된 드래프트 토큰은 다음 디코딩 단계에서 대상 모델에 의해 검증되며, 첫 번째 거부(있는 경우)까지의 드래프트 토큰만 훈련에 적합합니다. 대상 모델이 이를 명시적으로 수용 또는 거부로 레이블링했기 때문입니다.

vLLM은 IRLS(Iteratively Reweighted Least Squares)를 사용하여 레이블에 대한 예측의 로그 우도 손실을 최소화하며, 손실의 2차 Taylor 근사에서 최소화합니다. ω와 βi에 대한 최적화 단계는 방정식 시스템을 풀어 얻어지며, 여기서 Δθ는 공유 기울기와 위치별 절편의 델타, H는 모양이 (K + 1) × (K + 1)인 손실 함수의 헤시안, g는 크기 K + 1의 손실 함수의 기울기입니다.

재피팅은 고정된 N 디코딩 단계마다 발생합니다. 해당 간격의 각 디코딩 단계에서 헤시안과 기울기 값은 해당 라운드 동안 수집된 계수, 특징 및 레이블에서 누적됩니다. 이는 원시 레이블을 수집하는 경우의 O(N × B × K)와 대조적으로 라운드 전체 메모리를 O(K²)로 상한합니다. 라운드의 마지막 단계에서 시스템이 풀리고 계수가 업데이트됩니다.

깊은 드래프트는 얕은 드래프트보다 덜 자주 수용되므로 깊은 드래프트 위치는 라운드 동안 레이블이 부족할 수 있습니다. 두 가지 설계 결정이 이를 완화합니다.

  1. 공유 기울기 — 기울기는 모든 드래프트 위치에서 공유되어 깊이에서 데이터 희소로 인한 노이즈 업데이트를 방지합니다. 예측은 기울기 오류에 절편 오류보다 훨씬 민감하므로 공유는 Newton 단계를 잘 결정되게 만듭니다. 경험적 측정에 따르면 기울기 공유는 정확도에 거의 비용이 들지 않습니다: AUC 0.0002 및 log-loss 0.0003만 손실됩니다.
  2. 단계 감쇠 — 각 계수의 업데이트는 지원 증거의 양에 따라 공식 n / (n + 상수)로 조정됩니다. 여기서 n은 평가된 드래프트 수입니다. 따라서 레이블이 적은 깊은 위치는 더 보수적으로 이동하여 노이즈 기반 업데이트를 방지합니다.

기울기와 절편의 역할 분담

모델 쌍을 고정하고 워크로드를 변경: DSV4-Flash + DSpark를 5개 워크로드 각각에 독립적으로 피팅하면 기울기는 거의 움직이지 않으며(0.51~0.55) 워크로드의 어려움과 상관관계가 없습니다(r = −0.08, 평균 드래프트 엔트로피 대비). 절편은 반대입니다. 첫 번째 드래프트 위치 절편은 드래프트 엔트로피와 r = −0.89로 상관관계가 있으며, 예측 가능한 워크로드에서는 ~0.5–0.6에서 가장 덜 예측 가능한 워크로드에서는 0 미만으로 내려갑니다.

데이터셋 수용률 평균 드래프트 엔트로피 기울기 ω 절편 β0
gsm8k 0.781 0.562 0.5365 +0.478
humaneval 0.751 0.669 0.5135 +0.486
speed-bench 2k 저엔트로피 0.755 0.703 0.5087 +0.610
mt-bench 0.714 0.800 0.5495 +0.181
speed-bench 2k 고엔트로피 0.642 1.077 0.5197 −0.089

대신 모델 쌍을 변경: 기울기는 쌍 간에 0.45~0.59 범위이지만 각 쌍 내에서는 밀접하게 유지됩니다. 절편도 쌍 간에 다르므로 기울기와 달리 한 축만의 속성이 아닙니다.

모델 nspec 기울기 ω ω sd 절편 β0
DeepSeek-V4-Flash + DSpark 5 0.5013 0.0250 +0.279
MiMo-V2.5-Pro-FP4 + DFlash 8 0.5197 0.0415 −1.000
Inkling-NVFP4 + MTP 8 0.5859 0.0349 −0.572
Muse-Glimmer-30B + DFlash2 7 0.4450 0.0323 +0.167

두 표를 함께 읽으면 역할 분담이 제안됩니다. 기울기는 드래프트 모델이 자신이 옳을 때를 얼마나 잘 아는지 측정합니다. 이는 대상/드래프트 쌍과 드래프트 샘플링 방법의 속성으로, 워크로드만 변경될 때 거의 움직이지 않는 이유입니다. 절편은 나머지를 흡수합니다: 각 드래프트 위치의 기본 수용률로, 깊이에 따라 감소하고 덜 예측 가능한 콘텐츠에서 더 떨어집니다. 이 기본 수용률은 모델 쌍과 워크로드 모두에 의존하므로 절편은 두 축 모두에서 움직이는 반면 기울기는 한 축에서만 움직입니다.

벤치마크

이전에 AV를 전혀 사용할 수 없었던 세 가지 체크포인트(MiMo-V2.5-Pro-FP4 + DFlash, Inkling-NVFP4 + MTP, Muse-Glimmer-30B + DFlash2)가 DSV4-Flash + DSpark + 추정기 및 DSV4-Flash + DSpark + 신뢰도 헤드를 참조로 하여 벤치마킹되었습니다. 온도 1.0, top-p 0.95, 동시성 64, 4개 데이터셋에서 AV 꺼짐 대 켜짐으로 이득이 측정되었습니다.

고정 검증과 비교할 때, 동일한 스pekulative 길이에서 온라인 추정기는 벤치마킹된 모든 데이터셋에서 승리합니다. 그러나 이 이득만으로는 전체 이야기를 말하지 않습니다: 특정 동시성에서 최대 스pekulative 길이의 AV보다 우수한 더 작은 고정 길이를 종종 찾을 수 있습니다. DSV4 + DSpark로 고정 스pekulative 길이 스윕과 최대 스pekulative 길이에서의 AV에 걸쳐 캡처된 Pareto 곡선은 온라인 추정기와 신뢰도 헤드가 측정된 모든 동시성에서 대략 동등한 성능을 보여줍니다.

온라인 추정기는 신뢰도 헤드를 대체하기 위한 것이 아니라, 신뢰도 헤드가 없을 때 대체 옵션으로 사용하기 위한 것입니다. 현재 신뢰도 헤드가 없는 모델 쌍인 MiMo-V2.5-Pro-FP4 + DFlash에서 AV는 7개 동시성 중 5개에서 처리량-상호작용성 frontier에 있습니다.

제한 사항

  • 대상 모델의 attention 백엔드는 가변 길이 검증을 지원해야 합니다. 이는 DSpark AV가 이미 가지고 있는 것과 동일한 전제 조건입니다.
  • MTP와 EAGLE은 DFlash와 DSpark보다 AV의 이점이 적습니다. 이러한 자동 회귀 스pekulator는 검증 전에 트리밍될 수 있는 드래프트 토큰을 생성하는 데 불균형적으로 더 큰 비용을 지불하기 때문입니다.

vLLM에서 활성화하는 방법

AV는 스pekulative 구성을 통해 활성화됩니다. 신뢰도 헤드가 없고 모든 백엔드에 대해 가변 길이 attention을 지원하는 드래프트 모델에서 온라인 추정기가 자동으로 선택됩니다:

vllm serve <target_model> \
  ...
  --speculative-config '{
    "model": "<draft_model>",
    "method": "<method>",
    "num_speculative_tokens": <num_speculative_tokens>,
    "draft_sample_method": "probabilistic",
    "enable_adaptive_verification": true
  }'

이전 작업 및 감사

드래프터의 자체 신뢰도를 수용의 대리 지표로 사용하는 것은 잘 확립되어 있습니다. EAGLE-2는 EAGLE의 드래프트 확률이 수용률을 밀접하게 추적함을 보여주었고, 이를 사용하여 동적 드래프트 트리를 성장시키고 재순위화했습니다. Draft & Verify 및 여러 후속 연구는 드래프터의 확률이 고정 임계값 아래로 떨어지면 드래프팅을 중단합니다. SpecDec++는 대신 DSpark의 신뢰도 헤드와 유사한 전용 수용 예측 헤드를 훈련합니다. 각 경우에서 드래프트 신뢰도에서 수용으로의 매핑은 있는 그대로 사용되거나 오프라인에서 학습됩니다. AV는 좋은 순위 이상이 필요합니다: 예산 결정은 예측된 수용 확률을 합산하고 측정된 비용과 비교하므로 예측은 서빙 중인 특정 모델 쌍과 워크로드에 대해 보정되어야 합니다.

이 작업은 Giancarlo Delfin(Inferact)이 수행했으며, Lucas Wilkinson(Red Hat)과 Benjamin Chislett(NVIDIA)의 Adaptive Verification을 직접 기반으로 합니다.

무손실성이 가장 높은 AUC 특징을 배제하는 이유

간단한 두 토큰 어휘 [a, b]의 예는 qsampled로 트리밍할 때 도입되는 편향을 보여줍니다. p = [0.5, 0.5], q = [0.2, 0.8]이고 q(x) < 0.5이면 드래프트 토큰이 검증에서 트리밍된다고 가정합니다. a를 그리면 트리밍이 발생하고 대상은 자체 분포 p(x)에서 토큰을 샘플링합니다. b를 그리면 검증이 발생합니다: 토큰은 min(1, p(b)/q(b)) = 0.625의 확률로 수용되고, 그렇지 않으면 거부되고 잔차 norm(max(0, p − q)) = [1, 0]에서 재샘플링되어 a를 생성합니다. rejection sampling 동안 이는 pout(a) = q(a)·p(a) + q(b)·(1 − 0.625) = 0.4 및 pout(b) = q(a)·p(b) + q(b)·0.625 = 0.6을 제공합니다. 이는 대상의 분포 [0.5, 0.5]와 다르며 스pekulative 디코딩의 무손실 보장을 위반합니다.

Sources