Overlay

vLLM 마른 수건 쥐어 짜기

vLLM Performance · Engineering Notes — 4편

bestKpad 위의 두 방법 — W4A4와 동적-K

3편에서 확립한 bestKpad를 기준선으로 두고, 양자화(W4A4)와 런타임 동적-K가 그 처리량을 넘어서는지 측정했다. W4A4는 11개 모델 중 Llama-3.1-70B에서만 기하평균 +7%였고, 동적-K는 offline best-K에 미달했다(70B 기준 −8%).


3편은 bestKpad(suffix, 균일 K 패딩, FaP cudagraph, corpus별 best-K의 조합)를 기준 구성으로 확립하고, 양자화와 동적-K의 검증을 다음 편 과제로 남겼다. 이번 편은 두 방법을 동일한 하드웨어와 측정 하니스에서 bestKpad와 비교한다. 결론부터 적으면, 두 방법 모두 bestKpad의 처리량을 넘어서지 못했다. W4A4는 등가 게이트를 통과한 한 모델에서만 이득을 냈고, 동적-K는 대체하려던 offline best-K를 재현하지 못했다.

01

기준선: bestKpad

3편에서 확립한 기준 구성. 11개 모델 × 7개 corpus 중 68셀에서 행 최대.

3편의 결론은 bestKpad가 기존의 모든 설정을 상회한다는 것이었다(70셀 중 68셀에서 행 최대). 구성은 두 요소로 이루어진다. 첫째, draft를 K로 균일 패딩해 FULL cudagraph를 적중시킨다. 둘째, 그 K를 (모델, corpus)별 best-K로 선택한다. 패딩 토큰은 rejection sampler가 기각하므로 출력은 패딩 전과 비트 단위로 동일하다. 따라서 bestKpad는 정확도 저하 없이 처리량만 높인다.

이번 편의 질문은 이 기준선 위에 처리량을 더 높일 수 있는지다. 후보는 두 가지로, 모델 가중치를 4-bit로 양자화하는 W4A4와 offline best-K를 런타임에 추정하는 동적-K다. 두 방법 모두 bestKpad를 기준선으로 두고, 그 처리량을 넘어서는지로 판정한다.

02

W4A4: 출력을 바꾸는 양자화

bestKpad와 달리 W4A4는 출력 분포를 바꾸므로 등가 게이트가 필요하다.

W4A4는 weight와 activation을 모두 4-bit로 양자화한다(B200이 native로 지원하는 NVFP4 포맷, AWQ+GPTQ 보정). 16-bit(bf16) 대비 메모리 사용이 줄고, 좁은 비트폭이 연산량과 대역폭을 아껴 처리량이 오를 여지가 있다. 다만 이 이득에는 비용이 따른다.

두 방법의 차이는 출력 분포에 있다. bestKpad의 패딩 토큰은 기각되므로 출력 분포가 비트 단위로 동일하다. 반면 W4A4는 가중치를 근사하므로 출력 분포가 바뀐다. 따라서 무조건 적용할 수 없고, 양자화 전후의 출력이 통계적으로 등가인지 검사하는 분포 동등성 게이트를 통과해야 한다. bestKpad가 정확도를 유지하는 반면, W4A4는 정확도 손실 가능성을 감수하고 처리량과 메모리를 얻는 방법이다.

bestKpad(출력 보존) vs W4A4(출력 변경, 게이트 필요)
Figure 1 · 두 방법의 성격 차이. bestKpad는 출력을 보존한 채 처리량을 높인다. W4A4는 가중치를 근사해 출력이 바뀌므로 등가 게이트를 통과한 모델에서만 적용할 수 있다.
03

W4A4 결과: 70B만 게이트 통과

11개 모델 중 10개는 적용 불가. 통과한 70B도 mix에서는 하락.

W4A4를 11개 모델에 적용한 결과, 등가 게이트를 통과한 모델은 Llama-3.1-70B 하나였다. 나머지 10개는 두 유형으로 나뉜다.

W4A4 적용 결과모델사유
통과 (1개)Llama-3.1-70B분포 동등성 게이트 PASS → 측정 가능
게이트 탈락 (7개)7B~72B dense·distill, distill-70B출력 분포가 등가가 아님(정확도 손실)
양자화 불가 (3개)405B-FP8, DeepSeek-R1(MoE), K-EXAONE(FP8)이미 FP8이거나 MoE라 4-bit 양자화 경로 자체 실패

W4A4는 모든 모델에 적용되는 방법이 아니다. 7개 모델은 출력 분포가 등가가 아니어서 탈락했고, 3개 모델(이미 FP8이거나 MoE)은 4-bit 양자화 경로 자체가 성립하지 않았다.

게이트를 통과한 70B의 결과는 corpus에 따라 갈린다. bestKpad에 W4A4를 더하면 코드 corpus에서 크게 상승한다(humaneval +16.1%, mbpp +28.7%). 반면 mix에서는 −9.6%로 하락한다. 전 corpus 기하평균은 bestKpad 대비 +7.1%다.

Llama-3.1-70BbestKpadW4A4Δ
sharegpt6,0926,183+1.5%
swebench7,1797,328+2.1%
humaneval6,2187,216+16.1%
mbpp3,8144,909+28.7%
wildchat6,8837,497+8.9%
lmsys6,0606,418+5.9%
mix14,38913,011−9.6%
기하평균기준+7.1%

W4A4는 코드 corpus(humaneval·mbpp)에서 이득이 크다. 출력이 짧고 결정적일수록 4-bit 근사의 처리량 이득이 정확도 손실을 상회하기 때문이다. 반대로 긴 혼합 트래픽(mix)에서는 bestKpad가 더 높다.

Llama-3.1-70B — bestKpad vs W4A4 vs 동적-K corpus별 막대
Figure 2 · 70B의 세 구성 비교. W4A4(주황)는 코드 corpus에서 bestKpad(청록)를 넘지만 mix에서는 하락한다. 동적-K(회색)는 대부분의 corpus에서 bestKpad 이하이며, mix에서 특히 낮다.

W4A4를 단독으로(speculative decoding 없이) 적용하면 vanilla 대비 +55% 수준이지만, bestKpad에 추가하면 +7.1%로 줄어든다. 이미 큰 이득을 낸 구성 위에 다른 방법을 더할 때 나타나는 수확체감이다. bestKpad가 host-bound 병목을 상당 부분 제거했으므로, W4A4가 추가로 얻을 여지가 그만큼 작다.

04

동적-K: 런타임 K 컨트롤러

bestKpad의 K는 offline sweep으로 고른 best-K다. 런타임 컨트롤러가 이를 재현할 수 있는지 검증한다.

3편에서 K는 (모델, corpus)마다 미리 sweep해 고른 best-K였다. 운영에서 corpus를 사전에 알 수 없는 경우에는 런타임에 K를 조정하는 컨트롤러가 필요하다. 동적-K가 그 방법으로, 후보 K∈{4,6,12} 사이를 채택률 기반(α-EMA)으로 조정하며 매 시점의 K를 선택한다. upstream vLLM이 개발 중인 적응형 speculative decoding(eagle 계열 dynamic proposer)과 같은 계열이다.

검증할 질문은 런타임 컨트롤러가 offline best-K의 처리량을 재현하거나 넘어서는지다. 넘어선다면 사전 sweep이 불필요해진다. 넘어서지 못한다면, 적어도 이 워크로드에서는 offline sweep이 여전히 필요하다는 결론이 된다.

# 동적-K — 런타임 K 컨트롤러
export VLLM_SUFFIX_DYN_K=1 # K를 런타임에 조정
# 후보 KS={4,6,12}, 채택률 기반 α-EMA 갱신
# 나머지 설정은 bestKpad와 동일 (suffix + FaP, bf16)
05

동적-K 결과: offline best-K 미달

11개 모델 중 mix에서 bestKpad를 넘은 모델은 DeepSeek-R1 하나.

동적-K는 출력을 바꾸지 않으므로 게이트 제약 없이 11개 모델 전부에서 측정했다. 결과는 일관된다. mix 기준으로 bestKpad를 넘은 모델은 DeepSeek-R1(+3.1%) 하나이고, 나머지는 모두 미달했다. Llama-3.1-70B는 −32.9%로 가장 큰 하락을 보였다.

동적-K의 mix 처리량, bestKpad 대비 % — 11개 모델, DeepSeek-R1만 양수
Figure 3 · 동적-K의 bestKpad 대비 증감(mix). DeepSeek-R1(+3%)만 양수이고, K-EXAONE은 보합(−0%), 나머지 9개는 −6 ~ −33%로 모두 음수다. 70B 기하평균은 −7.9%.

원인은 기능 중복에 있다. suffix decoding은 step마다 suffix tree에서 match된 길이만큼만 draft를 생성하므로, 실효 draft 길이가 이미 입력에 따라 변한다. 여기에 별도의 K 컨트롤러를 더하면, offline에서 이미 확정된 최적 K를 런타임 추정으로 뒤따라가는 형태가 되어 추정 지연과 과소추정으로 손실이 발생한다. 특히 이질적 요청이 섞인 mix에서 offline best-K는 큰 K(K12)를 선택하지만, 컨트롤러는 이를 즉시 따라가지 못해 격차가 가장 크다.

DeepSeek-R1이 예외인 것은 이 모델의 특성 때문으로 보인다. suffix가 회귀했던(3편 §05) 이 MoE에서는 offline 단일 best-K보다 런타임 적응이 근소하게 유리했다. 다만 이는 11개 중 하나의 예외이며, 전체 결과는 동적-K(upstream 적응형 계열)가 bestKpad를 넘지 못한다는 것이다.

범위 주의. 동적-K가 절대적으로 느리다는 뜻은 아니다. 고정-K6 같은 단순 기준과 비교하면 동적-K도 +1% 안팎으로 앞선다. 다만 이번 편의 기준선은 그 단순 기준이 아니라 offline best-K인 bestKpad이며, 그 기준선을 넘지는 못했다.

06

두 방법이 막힌 이유

출력 보존, 출력 변경, 기능 중복.

세 방법을 성격별로 구분하면 결과가 설명된다.

  1. bestKpad — 출력 보존. 출력 분포를 바꾸지 않고 처리량만 높인다. 전 모델·전 corpus에 적용 가능하므로 기준 구성이 된다.
  2. W4A4 — 출력 변경. 정확도 손실 가능성을 감수하고 처리량·메모리를 얻는다. 게이트를 통과한 모델(여기서는 70B)에서만, 그리고 corpus에 따라(코드 이득, mix 손해) 효과가 갈린다. 일반적으로 적용되는 방법이 아니라 조건부 이득이다.
  3. 동적-K — 기능 중복. suffix가 이미 수행하는 런타임 가변 draft를 별도 컨트롤러로 반복하면서 offline best-K에 미달한다. bestKpad의 offline sweep을 대체하지 못한다.

즉 bestKpad를 넘지 못한 이유는 추가 여지가 없어서가 아니라, 남은 두 방법이 각각 적용 조건(게이트)기능 중복이라는 제약을 가졌기 때문이다.

07

적용 기준 (decision tree)

기본 구성은 bestKpad. W4A4는 조건부 적용, 동적-K는 보류.

상황권장근거
대부분의 모델·트래픽bestKpad출력 보존·전 모델 적용, 기본 구성 유지
70B + 코드 위주 트래픽bestKpad + W4A4humaneval·mbpp +16~29% (정확도 게이트 통과 후)
70B + 혼합(mix) 트래픽bestKpadmix에선 W4A4가 −9.6%
동적-K(런타임 적응)보류oracle 못 넘음(−7.9%) — DeepSeek-R1만 예외
FP8·MoE 모델(405B·R1·EXAONE)bestKpadW4A4 양자화 불가 → bestKpad가 상한

정리하면 bestKpad를 기본 구성으로 두고, 70B에서 코드 트래픽 비중이 높으며 정확도 검증을 통과한 경우에 한해 W4A4를 추가한다. 동적-K는 offline best-K를 넘지 못하므로, corpus를 사전에 알 수 있는 환경에서는 offline sweep을 유지한다.

08

주의할 해석 오류

이번 편 결과에서 특히 주의할 점.

  1. W4A4를 모든 모델에 일반화하는 것. 11개 중 70B만 게이트를 통과했다. 7개는 출력 변화로 탈락했고, 3개(FP8·MoE)는 양자화가 불가능했다. “70B에서 +7%”를 다른 모델로 확대 적용해서는 안 된다.
  2. W4A4를 출력 보존 방법으로 오해하는 것. bestKpad와 달리 W4A4는 출력 분포를 바꾼다. 정확도 검증 없이 적용하면 품질이 저하될 수 있다.
  3. W4A4의 mix 하락을 간과하는 것. 코드 corpus의 +16~29%만 보고 적용하면 운영 분포(mix)에서 −9.6%가 될 수 있다. 실제 트래픽 분포를 기준으로 판단해야 한다.
  4. 동적-K가 offline best-K를 넘으리라 기대하는 것. suffix 자체가 런타임 가변 draft를 수행하므로, 별도 K 컨트롤러는 대부분 손해다. 단순 기준보다 낫다는 것과 offline best-K를 넘는다는 것은 다르다.
  5. 단일 예외를 일반 규칙으로 확대하는 것. 동적-K가 앞선 것은 DeepSeek-R1 mix뿐이다. 이 한 셀로 동적-K가 우수하다고 결론지어서는 안 된다.
4편 정리

이번 편의 결론은 두 방법 모두 bestKpad를 넘지 못한다는 것이다. W4A4는 등가 게이트를 통과한 70B에서, 그중에서도 코드 corpus에서만 이득을 냈고 mix에서는 손해였다. 동적-K는 suffix가 이미 수행하는 런타임 가변 draft와 기능이 겹쳐 offline best-K를 넘지 못했다. 따라서 기본 구성은 bestKpad로 유지하고, W4A4는 조건을 만족하는 경우에만 추가한다. 시리즈 전체의 누적 성과와 적용 절차는 다음 편에서 정리한다.

측정 환경 — DGX B200 · NVIDIA B200×8 (sm_100, HBM3e 183 GiB, NVLink5) · Intel Xeon Platinum 8570 ×2 (224 thread, AMX/AVX-512) · vLLM 1.7.dev (sm_100) · cudagraph FULL_AND_PIECEWISE · gmu 0.85 · max_model_len 16,384 · real-trace prompts, concurrency 32, max_tokens 8,192, streaming.
11개 모델 × 7개 corpus · bestKpad(bf16, suffix+FaP+best-K) / W4A4(Llama-3.1-70B, AWQ+GPTQ NVFP4 4-bit, 등가 게이트 통과) / 동적-K(bf16, 런타임 K 컨트롤러 KS={4,6,12}). 2026-06 측정.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다