K-Exaone 4.7배 빠르게 하기
이번 편은 앞선 1~4편에서 검증한 방법을 종합한다. 기본 vLLM 대비 누적 처리량, 내 모델에 적용하는 절차, 그리고 시리즈 전체의 결론을 내린다.
이 시리즈는 동일한 모델과 동일한 입력으로 vLLM에서 처리량을 얼마나 높일 수 있는지를 다뤘다. 2편에서 speculative decoding(suffix), 3편에서 bestKpad, 4편에서 W4A4와 동적-K를 차례로 검증했다. 이번 편은 그 결과를 종합해 기본 vLLM 대비 누적 성과와 적용 절차를 정리하고, 시리즈를 마무리한다.
누적 성과: vLLM 기본 설정 – van(OFF) 대비
모델별 최종 구성의 처리량과 기본 vLLM(van(OFF))의 비교. mix 기준.
2편의 suffix, 3편의 bestKpad, 4편의 W4A4·동적-K를 종합해 모델별 최종 구성을 적용했을 때, 기본 vLLM(van(OFF)) 대비 처리량 증가를 정리했다. 대부분 모델의 최종 구성은 bestKpad이며, DeepSeek-R1만 동적-K가 근소하게 앞선다.
| model (mix) | van(OFF) | 최종 | 최종 lever | van(OFF) 대비 |
|---|---|---|---|---|
| K-EXAONE-236B | 2,491 | 11,702 | bestKpad | +369.8% (4.70×) |
| Llama-3.1-70B | 3,129 | 14,389 | bestKpad (+코드 corpus W4A4) | +359.9% (4.60×) |
| Llama-3.1-8B | 8,850 | 33,531 | bestKpad | +278.9% (3.79×) |
| DS-R1-Distill-Qwen-7B | 9,058 | 27,664 | bestKpad | +205.4% (3.05×) |
| Llama-3.1-405B-FP8 | 1,252 | 3,446 | bestKpad | +175.2% (2.75×) |
| Qwen2.5-72B | 2,735 | 6,897 | bestKpad | +152.2% (2.52×) |
| Qwen2.5-32B | 3,056 | 7,274 | bestKpad | +138.0% (2.38×) |
| DS-R1-Distill-Qwen-32B | 4,938 | 11,750 | bestKpad | +138.0% (2.38×) |
| DS-R1-Distill-Llama-70B | 3,164 | 6,493 | bestKpad | +105.2% (2.05×) |
| Qwen2.5-7B | 4,169 | 7,488 | bestKpad | +79.6% (1.80×) |
| DeepSeek-R1 (671B MoE) | 1,538 | 2,294 | 동적-K | +49.2% (1.49×) |
전체평균 2.7× (+169%). van(OFF)는 speculative decoding·패딩·양자화를 모두 적용하지 않은 기본 vLLM이다. 최종은 모델별 mix 기준 최고 구성으로, 10개는 bestKpad, DeepSeek-R1은 동적-K(+3% 차)다. 70B는 mix 기준 bestKpad이며, 코드 corpus에서는 W4A4 추가 시 +16~29%가 더해진다.
적용 절차
vanilla에서 최종 구성까지의 적용 순서와 선택 지점.
2~4편의 방법을 다른 모델에 적용하는 순서다(1편은 합성 데이터로 정리에서는 제외 한다). 원칙은 양자화를 진행하지 않는 방법을 먼저 적용하고, 양자화는 성능 기준을 만족 할때만 추가하며, suffix와 기능이 겹치는 방법은 적용하지 않는다는 것이다. 아래 순서도와 각 단계의 작업·주의점을 정리한다.
적용 순서
- vanilla baseline. 아무 방법도 적용하지 않은 기본 vLLM으로 자기 트래픽(또는 corpus별)을 측정해 기준선을 정한다. 이후 모든 비교는 이 값을 기준으로 한다.
- suffix 적용. speculative decoding(suffix)을 적용한다. 대부분 모델에서 가장 큰 향상이 이 단계에서 나온다. 다만 MoE 계열은 회귀할 수 있으므로(3편의 671B 사례) 적용 후 vanilla와 비교해 확인한다.
- K-pad + FaP. draft를 K로 균일 패딩해 FULL cudagraph(FULL_AND_PIECEWISE)를 적중시킨다. 패딩 토큰은 rejection sampler가 기각하므로 출력이 보존된다. 출력 동일성만 확인하면 적용한다.
- best-K sweep. 자기 corpus에서 K∈{4,6,8,12}를 sweep해 best-K를 선택한다. 혼합 트래픽(mix)은 대체로 큰 K(K12), 단일 chat·짧은 코드는 작은 K가 유리하다. 모델 크기가 아니라 실제 트래픽으로 측정해 정한다.
- 선택 단계. (a) W4A4: 양자화가 성립하고(FP8·MoE는 대체로 불가) 출력 등가 게이트를 통과하면 코드 트래픽에서 추가 이득이 있다. 출력이 바뀌고 mix에서는 손해일 수 있으므로 자기 분포로 판단한다. (b) 동적-K: offline best-K를 넘지 못하므로, corpus를 알 수 있는 환경에서는 4단계의 offline best-K를 유지한다(적용 보류).
- 최종 구성 확정. 모델별로 위 조합을 확정한다. vLLM vanilla 대비 평균 2.7×다.
측정 방법
- 운영에 가까운 부하로 측정한다. 실제 트래픽(real-trace) 프롬프트, concurrency 32, max_tokens 8,192, streaming 등 운영 조건을 반영한다. 합성된 짧은 프롬프트는 결과를 왜곡한다.
- corpus를 구분해 측정하고 mix를 별도로 둔다. chat·코드 등 corpus별로 측정하고, 운영 분포를 반영한 mix(여러 corpus를 고정 seed로 셔플)를 따로 구성한다. best-K와 각 방법의 효과가 corpus마다 다르기 때문이다.
- best-K는 한 변수만 바꿔 sweep한다. 동일 조건에서 K만 4/6/8/12로 바꿔 최대값을 best-K로 선택한다. 여러 설정을 동시에 바꾸면 원인을 분리할 수 없다.
- W4A4는 적용 전에 출력 등가 게이트를 통과시킨다. 양자화 전후 출력 분포를 비교해 등가가 아니면 적용하지 않는다. 처리량이 올라도 품질이 저하되면 의미가 없다.
측정 시 주의점
- 세션 간 drift. 다른 시점·세션의 측정은 동일 머신·하니스라도 ±몇 % 변동한다. 작은 차이는 drift로 간주하고 큰 차이만 실효과로 해석한다. 비교군은 가능하면 같은 세션에서 측정한다.
- taskset과 절대값. 일부 CPU 코어를 고정(taskset)한 측정은 절대값의 직접 비교에 제약이 있다. 동일한 측정 조건끼리만 비교한다.
- cudagraph warmup. FULL cudagraph는 첫 캡처·워밍업 비용이 있다. 정상상태(steady-state) 측정 전에 warmup을 충분히 수행해 초기 구간의 오버헤드를 제외한다.
- MoE는 모델마다 거동이 다르다. suffix 수용도가 MoE마다 갈린다(671B 회귀, EXAONE 4.4×). 한 MoE의 결과를 다른 MoE로 일반화하지 않는다.
- 처리량만으로 판단하지 않는다. 특히 W4A4는 코드 corpus의 이득만 보고 적용하면 mix에서 손해가 발생한다. 처리량과 품질(등가 게이트)을 함께 확인한다.
시리즈 정리
2편부터 4편까지의 결과 종합.
이 시리즈의 질문은 동일한 모델과 동일한 출력으로 vLLM에서 처리량을 얼마나 높일 수 있는가였다. suffix에서 출발해 bestKpad를 기준 구성으로 확립했고, 4편에서 그 위를 넘으려는 두 방법을 검증했다. 전체 결과를 한 표로 정리하면 다음과 같다.
| 편 | 다룬 것 | 핵심 레버 | 한 줄 결론 |
|---|---|---|---|
| 2편 | speculative decoding | suffix | 첫 대폭 향상. MoE는 회귀 가능 |
| 3편 | bestKpad | FaP cudagraph + 균일 K패딩 + corpus별 best-K | 출력 보존, 70셀 중 68셀에서 행 최대 |
| 4편 | W4A4 · 동적-K | 두 도전자 | 기준선 미달. W4A4는 70B만 +7%, 동적-K는 best-K 미달 |
| 누적 | vanilla → 최종 | 위 조합 | van(OFF) 대비 전체평균 2.7× |
요약
- 방법은 성격에 따라 구분된다. 출력을 보존하는 방법(suffix·bestKpad)을 먼저 적용하고, 출력을 바꾸는 방법(W4A4)은 게이트를 통과할 때만 추가하며, 기존 기능과 겹치는 방법(동적-K)은 적용하지 않는다. 적용 순서가 전략의 핵심이다.
- 판단 기준은 측정이다. best-K 선택, W4A4 적용 여부, 동적-K의 효용은 모두 자기 corpus와 real-trace 측정으로 결정됐다. 모델 크기나 직관에 근거한 규칙은 자주 어긋났다. 작은 K가 유리한 모델, MoE 간 상반된 거동(671B 회귀, EXAONE 4.7×)이 그 예다.
- 음의 결과도 결과다. 4편의 두 방법은 대부분 기준선에 미달했고, 그 결과가 bestKpad를 기본 구성으로 확정하는 근거가 됐다. 적용하지 말아야 할 것을 아는 것은 적용할 것을 아는 것만큼 운영에 중요하다.
- 최종 결과. 추가 하드웨어 없이, 대부분의 모델에서 정확도 손실 없이 vanilla 대비 평균 2.7×의 처리량을 얻었다. 출력은 그대로 유지된다.
이 시리즈의 질문은 동일한 출력을 유지한 채 처리량을 얼마나 높일 수 있는가였다. 결과는 균일 패딩과 corpus별 측정만으로 평균 2.7×였다. 더 복잡한 방법인 양자화와 런타임 적응은 대부분 이 구성을 넘지 못했다. 이번 결과가 보여주는 것은, 처리량 향상의 상당 부분이 새로운 기법이 아니라 기존 구성을 자기 워크로드에서 정확히 측정하는 데서 나온다는 점이다. 셀별 전체 측정치는 별도의 자료편 포스트 「전체 결과표」로 옮겼다.
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 측정.