Overlay

어떤 설정으로 vLLM을 빠르게 할 것인가?

그 설정, 다른 모델에서도 통한다. 거의. — vLLM Performance · Engineering Notes
vLLM Performance · Engineering Notes — 2편

그 설정, 다른 모델에서도 통한다. 거의.

전편에서 정리한 suffix 구성을 10개 모델 × 7개 실측 corpus × 6개 측정점 — B200×8 위 406셀(420셀 중 96.7%)로 재검증한 기록. 그리고 vLLM 기본 설정의 처리량을 +36% 흔든 새 변수 하나, 호스트 DSA.


전편의 결론은 단순했다. 코드 한 줄 고치지 않고 vLLM 내장 설정 — speculative_config의 suffix decoding, 적절한 cudagraph mode — 만으로 Llama-3.3-70B를 모든 워크로드에서 가속할 수 있다는 것. 하지만 그건 모델 하나, 하드웨어 하나에서의 결론이었다. 이번에는 질문을 뒤집었다. 같은 처방이 7B부터 671B MoE까지, 10개 모델에서도 살아남는가? B200×8에서 10개 모델 × 7개 corpus × 6개 측정점, 406셀을 채워 답했다. 결과를 먼저 말하면 — suffix는 70셀 중 36셀에서 이겼고, 두 개의 분명한 예외를 만났다. 그리고 측정 도중, 설정과 무관하게 vLLM 기본 설정의 throughput을 +33~36% 흔드는 호스트 변수를 하나 발견했다.

01

전체 결과부터

10개 모델 × 7개 corpus × 6개 측정점, 70셀 전부.

같은 GPU, 같은 harness, 같은 real-trace prompt다. 먼저 운영 분포 proxy인 mix corpus에서 vLLM 기본 설정 그대로인 van(OFF)와 suffix decoding을 켠 suf(OFF)를 비교하면 이렇다. 라벨 괄호 안의 OFF/ON은 vLLM 설정이 아니라 호스트 DSA의 상태다 — 여기서는 둘 다 호스트 DSA OFF로 맞춘 동일 조건 비교이고, 자세한 정의는 §02에 있다.

mix corpus에서 10개 모델의 vLLM 기본 설정 대비 suffix decoding throughput 비교
dense 9개 모델은 7B부터 405B까지 전부 net-positive(+83~+232%). 단 하나의 예외 — 671B MoE는 suffix가 회귀한다. 본 실험 + TSK_042

그리고 아래가 70셀 전체다. 각 측정 조건의 자세한 정의는 §02에 있고 — 짧게는 호스트 DSA OFF/ON × vLLM 기본 설정(van) / suffix(suf) / vllm-DSA-env(dsa) 조합이다 — 굵은 셀이 각 행의 winner다. 단위 tok/s.

modelcorpus van(OFF)van(ON)DSA(ON) suf(OFF)suf(ON)suf+dsa(ON)winner
Qwen2.5-7B-Instructsharegpt4,1895,6005,6406,1676,0586,164suf(OFF)
swebench4,1205,8715,9735,4165,3225,551DSA(ON)
humaneval3,7545,3315,3365,2134,8634,989DSA(ON)
mbpp3,8145,9315,9655,5065,3465,390DSA(ON)
wildchat4,1845,6945,6446,2855,9746,293suf+dsa(ON)
lmsys4,0905,4095,4275,9565,9066,038suf+dsa(ON)
mix4,1695,5645,5727,8037,4787,457suf(OFF)
DS-R1-Distill-Qwen-7Bsharegpt8,72412,23212,17011,96111,23411,240van(ON)
swebench8,83511,89111,88815,42214,67114,682suf(OFF)
humaneval8,15911,27311,24011,45911,03510,519suf(OFF)
mbpp8,44011,69411,67612,39811,48112,260suf(OFF)
wildchat8,92512,31912,21011,71710,79511,263van(ON)
lmsys8,81112,05512,05711,36011,05211,390DSA(ON)
mix9,05812,27712,30124,45822,46722,193suf(OFF)
Llama-3.1-8B-Instructsharegpt8,86812,09112,08819,05418,07319,328suf+dsa(ON)
swebench8,34811,97011,51821,35320,73520,518suf(OFF)
humaneval9,04810,96711,06115,12614,79415,601suf+dsa(ON)
mbpp8,73012,19012,06617,82517,97617,360suf(ON)
wildchat9,00212,21012,19719,85619,60219,451suf(OFF)
lmsys9,07412,52811,99319,86219,36118,905suf(OFF)
mix8,85012,08912,05827,85124,40726,615suf(OFF)
Qwen2.5-32B-Instructsharegpt3,0794,5914,6074,6624,4994,474suf(OFF)
swebench2,8924,1484,2445,0024,3484,566suf(OFF)
humaneval2,5713,6023,5274,8594,3254,269suf(OFF)
mbpp2,9154,2954,4255,1384,8264,817suf(OFF)
wildchat3,1284,8044,7384,8844,6514,504suf(OFF)
lmsys3,0534,6864,6284,4784,5784,249van(ON)
mix3,0564,6944,6986,5975,9796,256suf(OFF)
DS-R1-Distill-Qwen-32Bsharegpt4,8034,9314,9024,9964,6824,613suf(OFF)
swebench4,4094,5244,5615,2415,5895,444suf(ON)
humaneval3,4623,7294,2083,7713,9353,435DSA(ON)
mbpp4,6904,9054,8065,6905,0975,221suf(OFF)
wildchat4,8915,0665,1025,7295,3635,539suf(OFF)
lmsys4,8984,9935,0115,3564,9805,116suf(OFF)
mix4,9385,1345,0609,0568,3789,240suf+dsa(ON)
Qwen2.5-72B-Instructsharegpt2,6882,8302,9063,2193,0953,006suf(OFF)
swebench2,3612,4742,4442,6472,7432,635suf(ON)
humaneval8061,9892,5422,4892,3582,022DSA(ON)
mbpp3,3953,4173,4413,2342,9762,910DSA(ON)
wildchat2,8032,9292,9092,6212,4342,591van(ON)
lmsys2,8073,1693,0833,4292,9783,153suf(OFF)
mix2,7352,9672,9025,2685,6435,266suf(ON)
Llama-3.1-70B-Instructsharegpt3,0913,1773,1394,8644,5424,634suf(OFF)
swebench2,8782,8092,9686,0265,9495,455suf(OFF)
humaneval3,3913,4562,8994,7284,5984,549suf(OFF)
mbpp1,7731,6991,7783,2663,2432,273suf(OFF)
wildchat3,1723,2133,2685,2615,1424,966suf(OFF)
lmsys3,0403,1453,1233,9583,6773,818suf(OFF)
mix3,1293,2063,19210,40010,2478,829suf(OFF)
DS-R1-Distill-Llama-70Bsharegpt3,0333,0183,1422,6602,5792,503DSA(ON)
swebench3,2363,1423,1822,7392,7392,642van(OFF)
humaneval2,8522,8282,8122,7882,8092,718van(OFF)
mbpp2,7772,9892,9542,4262,3282,265van(ON)
wildchat3,1273,2083,1662,6582,5442,661van(ON)
lmsys2,9923,0463,0452,8482,7562,844van(ON)
mix3,1643,2443,1986,1276,1755,818suf(ON)
Llama-3.1-405B-FP8sharegpt1,2171,2391,2292,061suf(OFF)
swebench1,2041,2111,2392,639suf(OFF)
humaneval1,2531,2371,1922,112suf(OFF)
mbpp9168838151,725suf(OFF)
wildchat1,2801,2671,2632,290suf(OFF)
lmsys1,2201,2471,2212,243suf(OFF)
mix1,2521,2521,2712,829suf(OFF)
DeepSeek-R1 (671B MoE)sharegpt1,4751,5651,559797730794van(ON)
swebench1,4741,5361,518538496542van(ON)
humaneval1,0049618586061,219670suf(ON)
mbpp1,4371,4821,490677661669DSA(ON)
wildchat1,5561,6141,614858880824van(ON)
lmsys1,5331,5871,592811808773DSA(ON)
mix1,5381,5991,601781754727DSA(ON)
winner 분포 (70 cells): suf(OFF) 36 · van(ON) 11 · DSA(ON) 11 · suf(ON) 6 · suf+dsa(ON) 4 · van(OFF) 2. — = 405B-FP8 engine init fail.

여기까지가 요약이다. suf(OFF)가 70셀 중 36셀의 winner — 전편의 처방은 dense 모델에서는 크기를 가리지 않고 이식되었다. 대신 두 개의 새 경계(405B-FP8의 부팅 한계, 671B MoE의 전면 회귀)와, 설정이 아닌 호스트 상태가 만든 +36%의 정체를 따져야 했다. 차례로 간다.

02

여섯 개의 측정점

전편과 무엇이 다른가. 축이 세 개 늘었다.

전편이 H100×8에서 모델 하나(+경계 탐색용 small model들)와 synthetic 워크로드로 답했다면, 본 sweep은 세 축을 바꿨다. 하드웨어는 B200×8(sm_100, HBM3e 183 GiB), 모델은 7B dense부터 671B MoE까지 10개, corpus는 sonnet 같은 합성 분포 대신 real trace 7종 — ShareGPT, WildChat, LMSYS, HumanEval, MBPP, SWE-Bench, 그리고 운영 proxy인 mix다.

그리고 축이 하나 더 있다. 측정 도중 호스트의 Intel DSA(Data Streaming Accelerator) work queue 상태가 vllm 설정과 무관하게 결과를 흔든다는 사실이 확인되어, 이를 별도 차원으로 분리했다. 그 결과가 모델×corpus 당 6개의 측정점이다.

IDlabelhost DSA WQspec decodevllm DSA env출처
van(OFF)disabledTSK_042 baseline
van(ON)enabled본 실험
DSA(ON)enabledVLLM_LHC_DSA=1본 실험
suf(OFF)disabledsuffix K=32TSK_042 baseline
suf(ON)enabledsuffix K=32본 실험
suf+dsa(ON)enabledsuffix K=32on본 실험
10 models × 7 corpora × 6 points = 420셀 중 406셀 측정 완료(96.7%). 미측정 14셀은 전부 405B-FP8의 ⑤⑥(§06).

suffix 설정은 전편의 dominant 구성을 그대로 승계했다 — {"method":"suffix","num_speculative_tokens":32}, tree depth·cache 등 나머지는 default. vllm DSA env(③⑥)는 host↔pinned memcpy를 DSA로 오프로드하는 lever로, VLLM_LHC_DSA=1 VLLM_LEVER_N9=1 VLLM_LHC_DSA_MIN=65536(64 KiB 미만 copy는 CPU 경로 유지)이다. 벤치마크는 real trace prompt에 concurrency 32, max_tokens 8,192, streaming — 7개 corpus 전부 동일 harness다.

suffix speculative decoding 동작 다이어그램 — step당 1토큰에서 K토큰으로
vLLM 기본 설정은 forward step당 1토큰. suffix는 prompt와 이미 생성한 토큰 양쪽을 suffix tree로 인덱싱해 draft를 뽑고, 한 번의 forward step에서 K̄개를 한꺼번에 확정한다. 가속·회귀는 K̄가 step overhead 배수 R을 넘느냐(K > R)로 갈린다 — 전편 §03.
03

전편의 결론은 살아남았는가

36/70셀. 부등식은 살아남았고, 상수는 이동했다.

70개 (모델, corpus) 셀에서 6개 측정점 중 winner의 분포는 다음과 같다.

winner셀 수비고
④ suf(OFF)36전체의 절반 이상. suffix decoding이 dominant lever
② van(ON)11대부분 DS-Distill-Llama-70B와 671B MoE
③ DSA(ON)11②와 통계적으로 구분 어려움(§05)
⑤ suf(ON)6조합 lever가 이기는 셀은 소수, corpus-dependent
⑥ suf+dsa(ON)4
① van(OFF)2DS-Distill-Llama-70B 일부 corpus

전편의 첫 번째 결론 — 가속의 대부분은 suffix decoding을 켜는 것 자체에서 나온다 — 은 모델 10개로 확장해도 그대로다. 표준 dense 모델(Qwen 7B/32B/72B, Llama 8B/70B/405B)에서 suffix는 corpus를 불문하고 +50~+232%의 suf-gain을 만들었고, DSA 계열 lever들은 그 위에서 ±10% 안쪽을 오갔다.

다만, 7B 경계는 이동했다

전편에서 가장 단호하게 썼던 문장이 하나 있다. “7B 이하 모델에서는 무엇을 켜도 느려진다.” 본 sweep에서 이 문장은 깨졌다. Qwen2.5-7B는 mix에서 +87.2%, Llama-3.1-8B는 +214.7%, DS-Distill-Qwen-7B는 +170.0% — 전부 suffix가 큰 폭의 net-positive다.

모순처럼 보이지만, 전편의 mechanism으로 돌아가면 오히려 일관적이다. 가속·회귀를 가르는 건 모델 크기가 아니라 부등식 K > R — 평균 채택 토큰 수가 spec step overhead 배수를 넘느냐 — 이고, 모델 크기는 R을, corpus는 K를 움직이는 변수일 뿐이다. 전편의 7B 회귀는 word-salad code 같은 synthetic corpus에서 K가 바닥이었던 환경의 결론이고, 본 실험의 real chat trace(ShareGPT·WildChat)는 반복 구조가 풍부해 suffix tree의 K가 충분히 커진다. 하드웨어가 H100에서 B200으로 바뀐 것도 상수를 움직였을 것이다. 즉 부등식은 환경을 건너 살아남았고, “7B”라는 숫자는 그 환경의 상수였다. 경계를 모델 크기로 외우지 말고, 자기 corpus에서 K를 재라는 것이 수정된 교훈이다.

corpus별 결이 남아 있다는 점도 같다. DS-Distill-Qwen-7B는 mix에서 +170%지만 sharegpt·wildchat에서는 van(ON)이 suffix를 이긴다. mix 셀의 suf-gain이 개별 corpus보다 일관되게 큰 것도 눈에 띄는 패턴인데 (Llama-70B: per-corpus 최대 6,026 vs mix 10,400), 이질적 요청이 섞일 때 global suffix tree의 hit 기회가 늘어나는 효과로 보이나 본 실험에서 분리 검증하지는 않았다 — mix 수치를 단일 corpus 운영에 그대로 외삽하면 안 된다(§08).

04

+36%의 정체

설정을 하나도 바꾸지 않았는데, 기본 설정 측정값이 빨라졌다.

이번 측정에서 가장 시간을 쓴 건 suffix가 아니라 이쪽이다. TSK_042 baseline(6월 2일)과 본 실험(6월 10일~)의 vLLM 기본 설정을 비교하니, vllm 설정이 동일한데도 7~8B 모델에서 +33~+36%, Qwen-32B에서는 +53.6%의 차이가 났다. 두 측정 사이에 바뀐 호스트 상태는 하나 — 6월 8일, LHC Phase 작업의 일환으로 /sys/bus/dsa/devices/wq*/state의 DSA work queue 8개(dsa0/dsa1 × 4)가 enable된 것이다.

측정 시점host DSA WQ해당 측정점
2026-06-02 (TSK_042)DISABLED① van(OFF) · ④ suf(OFF)
2026-06-08 00:40wq enable (sysfs mtime 실측) — LHC Phase 작업
2026-06-10+ (본 실험)ENABLED② ③ ⑤ ⑥
host DSA 구성 다이어그램 — dsa0/dsa1, WQ 8개 enable
디바이스당 8개 WQ 중 4개만 enable(녹색), 나머지는 size=0 disabled(점선). enabled WQ는 mode=shared(SWQ)·type=user로 ENQCMD 유저공간 제출이 가능한 상태였다 — 그러나 실제로 쓰는 프로세스는 없었다는 것이 ②⑤의 +36%를 “DSA 효과”로 읽을 수 없는 이유다.

효과는 method에 따라 차등적이다. host-bound regime인 vLLM 기본 설정에서는 +33~+36%(소형 모델 기준 — 70B급은 +2~8%, 405B는 0%로 모델이 클수록 희석), step-bound regime인 suffix에서는 −5~+10%로 효과가 없거나 약한 손해다. 즉 이 효과가 실재한다면 “host memcpy가 병목인 구간”에서만 작동하는 lever라는 해석과 부합한다.

단, 이 +36%를 “DSA를 켜면 빨라진다”로 읽으면 안 된다. sweep 시점 sysfs 실측에서 enabled WQ 8개 전부 clients=0 — 즉 어떤 프로세스도 WQ를 실제로 사용하고 있지 않았다. 한편 ①④의 출처인 TSK_042와 본 실험은 cudagraph 경로가 다를 수 있어(PIECEWISE → FULL_AND_PIECEWISE), +36%의 진짜 원인이 cudagraph_mode 차이라는 가설이 현재 유력하다(SUB_213). 본 글에서 ON/OFF는 “그 시점 호스트 상태”의 라벨로만 쓰며, 인과는 격리 검증(verify_dsa.sh C1/C2/C3) 결과를 기다린다.

운영 관점의 함의는 인과와 무관하게 분명하다. vllm 인자 바깥의 호스트 상태가 측정을 수십 % 단위로 흔들 수 있다는 것. 전편 §09-6에서 “측정 조건이 다른 값끼리 직접 비교하지 말라”고 썼는데, 그 목록에 sysfs 레벨의 호스트 구성까지 들어가야 한다는 걸 이번에 측정으로 배웠다. 참고로 이 WQ 구성은 /etc/accel-config/에 저장돼 있지 않은 수동 enable 상태라 재부팅하면 소실된다 — 재현이 필요하면 accel-config save-config가 선행돼야 한다.

05

vllm 레벨 DSA env는 부차적이다

호스트가 driver, env는 noise.

그렇다면 vllm 프로세스가 명시적으로 DSA lane을 쓰도록 하는 env(③⑥)는 어떤가.

VLLM_LHC_DSA=1        # LHC DSA lane 활성 (default off)
VLLM_LEVER_N9=1       # host↔pinned memcpy DSA 오프로드
VLLM_LHC_DSA_MIN=65536 # 64 KiB 미만 copy는 CPU 경로 유지
vllm DSA lane copy 경로 분기 흐름도
VLLM_LEVER_N9=1이 켜진 프로세스의 host↔pinned copy는 64 KiB를 기준으로 DSA lane과 CPU 경로로 분기한다. 경로 자체는 동작하지만, throughput에 남기는 흔적은 vLLM 기본 설정 위 0%, suffix 위 ±5%였다.

결과는 깔끔하게 심심하다. vLLM 기본 설정 위(③ vs ②)에서는 0% — 10개 모델의 mix 기준 −2.2~+1.5%로 noise 범위다. suffix 위(⑥ vs ⑤)에서는 ±5% 안팎의 corpus-dependent 진동이 있을 뿐 dominant signal이 없다 (Llama-8B +9.0%와 Llama-70B −13.8%가 공존한다). §04의 호스트 상태 효과가 +36%였던 것과 비교하면 결론은 하나다 — 이 축에서는 호스트 구성이 driver이고, vllm env는 부차적이다. ⑥이 winner인 셀이 70개 중 4개 있긴 하지만, 운영 정책의 default로 삼을 근거는 못 된다.

06

새로 만난 두 개의 경계

하나는 부팅에서, 하나는 아키텍처에서.

경계 1 — Llama-405B-FP8은 suffix로 부팅이 안 된다

405B-FP8에 suffix K=32를 붙이면 engine init에서 num_gpu_blocks=0 → override=512 후 core proc가 crash한다. 405B-FP8 + suffix K=32 + B200 단일 노드 TP=8 + gmu 0.85 조합의 호환성 한계로, ⑤⑥ 14셀이 영구 미측정으로 남았다(406/420의 결손이 전부 여기다). 흥미로운 건 host-OFF 시점의 ④는 멀쩡히 측정되어 +125.9%라는, 9개 dense 모델 중에서도 상위권의 suf-gain을 보였다는 점이다. 즉 405B에서 suffix는 “효과가 없는” 게 아니라 “현재 빌드·메모리 구성에서 못 켜는” 상태다 — gmu·K를 낮춘 재시도가 후속 과제다.

경계 2 — 671B MoE에서 suffix는 전면 회귀한다

DeepSeek-R1(671B MoE, active 37B)은 본 실험에서 suffix가 7개 corpus 전부 net-negative인 유일한 모델이다. mix 기준 −49.2%, swebench에서는 1,474 → 538 tok/s로 거의 1/3토막이다. dense 405B가 +126%인 것과 정확히 대비된다. 메커니즘 규명은 본 실험의 범위 밖이라 단정하지 않겠다 — 관측 사실로서 기록하는 것은, “크면 클수록 spec decoding이 유리하다”는 dense에서의 직관이 MoE에는 이식되지 않는다는 점이다. 전편에서 same-size cross-vendor 차이(Llama 70B vs Qwen 72B)를 “architecture가 spec 효과를 가른다”는 신호로 읽었는데, MoE는 그 신호의 극단값인 셈이다. 671B MoE의 운영 정답은 현재로선 vLLM 기본 설정이다.

DeepSeek-R1 671B MoE의 corpus별 suffix 전면 회귀 차트
같은 host state(OFF)에서 7개 corpus 전부 suffix가 vLLM 기본 설정을 밑돈다 — 최대 −63.5%(swebench). dense 405B의 +125.9%와 정확히 대비되는, 본 실험 통틀어 유일한 전면 회귀.
07

실전 적용 — production decision tree, 갱신판

전편의 트리에 행을 추가하고, 한 행을 수정한다.

모델군권장 lever근거 (mix, vs van 동일 host state)
표준 dense 7B~405B
Qwen 7/32/72B · Llama 8/70/405B
④ suf(OFF) — suffix K=32 +50 ~ +232%
reasoning distill 32B
DS-Distill-Qwen-32B
⑥ suf+dsa(ON) mix 9,240으로 최고치 — 단 corpus-dependent, 분리 측정 후 적용
reasoning distill 70B
DS-Distill-Llama-70B
⑤ suf(ON) mix +90%, 단 개별 corpus에서는 vLLM 기본 설정과 백중 — mix성 트래픽일 때만
671B MoE
DeepSeek-R1
vLLM 기본 설정 — suffix 금지 suffix 시 −49 ~ −53%
405B-FP8 + suffix 현 빌드에서 부팅 불가 gmu/K 하향 재시도 전까지 ④ 구성은 host-OFF baseline 수치로만 참고

전편 대비 수정 사항은 두 가지다. 첫째, “≤7B는 vLLM 기본 설정” 행을 삭제한다 — real trace corpus에서는 7~8B도 suffix가 분명한 net-positive다(§03). 둘째, “MoE는 별도 검증 전까지 vLLM 기본 설정” 행을 추가한다. 부팅 인자는 전편과 동일 골격이고, 본 실험에서 쓴 형태는 이렇다.

# server boot (sweep_corpus.sh)
--speculative-config '{"method":"suffix","num_speculative_tokens":32}'
# gpu_memory_utilization=0.85, max_model_len=16384, cudagraph FULL_AND_PIECEWISE

# 공통 env
export ARCTIC_INFERENCE_ENABLED=0 VLLM_PLUGINS=""
export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
export VLLM_NGRAM_NUM_THREADS_CAP=8 VLLM_NGRAM_DIVIDE_BY_TP=0

vllm DSA env(③⑥용 VLLM_LHC_DSA=1 ...)는 §05의 결론대로 default-off를 권장한다.

08

회피해야 할 함정들

이번 실험에서 새로 추가된 목록.

  1. 시점이 다른 측정을 같은 baseline으로 합치기. vllm 인자가 동일해도 호스트 sysfs 상태(DSA WQ)나 cudagraph 경로가 다르면 vLLM 기본 설정부터 +36% 어긋난다. baseline 재사용 전에 호스트 구성의 diff를 박제하라.
  2. 671B MoE에 dense의 직관으로 suffix를 켜기. 7개 corpus 전원 회귀, 최대 −53%. dense에서의 +232%와 같은 설정이다.
  3. 405B-FP8에 suffix K=32를 그대로 붙이기. engine init 단계에서 crash. gmu 0.85 기준이며, 켜기 전에 KV block 수부터 확인.
  4. vllm DSA env에 기대를 걸기. vLLM 기본 설정 위 0%, suffix 위 ±5% noise. 이 축의 driver는 호스트 구성이다.
  5. 호스트 DSA WQ 구성을 영속이라고 믿기. accel-config save-config 없이는 재부팅 시 소실 — 어느 날 갑자기 “성능이 예전과 다른” 미스터리의 씨앗이 된다.
  6. mix corpus 수치를 단일 corpus 운영에 외삽하기. mix의 suf-gain은 개별 corpus보다 일관되게 크다. 자기 트래픽 분포로 분리 측정이 먼저다.
09

정리하면

세 줄로.

첫째, 전편의 처방은 dense 모델에서는 크기를 가리지 않고 이식된다. suffix K=32 하나로 7B부터 405B까지 +50~+232%, 70셀 중 36셀의 winner. 전편의 “7B 경계”는 모델의 속성이 아니라 그 corpus·하드웨어의 상수였고, K > R 부등식만이 환경을 건너 살아남았다.

둘째, 설정 바깥의 호스트 상태가 측정을 흔든다. DSA WQ enable 전후로 vLLM 기본 설정이 +33~36% 차이 났지만 clients=0이 확인되어 cudagraph mode 차이가 진범이라는 가설이 유력하다 — 인과는 격리 검증으로 가린다. 확실한 교훈은 하나다: baseline을 재사용하려면 vllm 인자만이 아니라 호스트 구성까지 같아야 한다.

셋째, 아키텍처가 새 경계를 만든다. dense 405B는 +126%인데 671B MoE는 전 corpus −49%. “클수록 spec이 유리하다”는 dense의 직관은 MoE 앞에서 멈춘다. vllm 레벨 DSA env는 어느 쪽에서도 부차적이었다.

CLOSING 전편의 문장을 한 번 더 쓴다 — vLLM은 이미 빠르다. 이번에 확인한 건 그 문장의 적용 범위다. 내장 설정의 가속은 모델 하나의 행운이 아니라 dense 일반의 성질이었고, 그 범위의 끝(MoE, 그리고 vllm 바깥의 호스트 상태)이 어디인지를 406셀이 격자로 채워 넣었다.

측정 환경: DGX B200 – NVIDIA B200×8 (sm_100, HBM3e 183 GiB, NVLink5) · Intel Xeon Platinum 8570 ×2 (224 thread, AMX/AVX-512/DSA) · 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.
10개 모델(Qwen2.5 7/32/72B · DS-R1-Distill 7/32/70B · Llama-3.1 8/70/405B-FP8 · DeepSeek-R1) × 7개 corpus (sharegpt · wildchat · lmsys · humaneval · mbpp · swebench · mix) × 6개 측정점 = 406/420셀. · 본 실험: 2026-06-10+.

답글 남기기

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