Kimi K3 성능 최적화: vLLM에서의 성과

vLLM는 Kimi K3에 대한 포괄적인 성능 최적화를 구현하여 최대 2.8배의 처리량 증가와 Time to First Token (TTFT)을 최대 85% 감소시켰습니다. 이러한 개선은 KDA 반복 상태, LatentMoE, MXFP4 전문가 커널, 그리고 사전 추측 디코딩에 걸친 전체 서빙 스택의 병목을 해결함으로써 달성되었습니다.

서빙 성능 향상

B300 노드(CUDA 13.3)에서 8K/1K 워크로드와 TP8, 8토큰 DSpark 추측을 사용하여 vLLM v0.27.1과 9월 13일 메인 커밋(82a85dc1)을 비교한 결과, 상당한 성능 향상이 확인되었습니다.

동시성 v0.27.1 평균 지연 시간 (s) 0913 main 평균 지연 시간 (s) v0.27.1 처리량 (tok/s) 0913 main 처리량 (tok/s) v0.27.1 평균 TTFT (ms) 0913 main 평균 TTFT (ms)
1 12.37 5.30 (−57.2%) 83.3 183.3 (+120.0%) 2262.9 376.3 (−83.4%)
4 23.67 10.50 (−55.6%) 166.7 416.7 (+150.0%) 2314.9 640.5 (−72.3%)
16 55.90 22.17 (−60.3%) 258.3 725.0 (+180.6%) 7601.1 1121.0 (−85.3%)

주요 기술적 최적화

적응형 스케줄링 예산

낮은 요청 수가 max_num_batched_tokens를 사용하지 않게 되는 것을 방지하기 위해, vLLM은 적응형 스케줄링 토큰 예산을 도입했습니다. 이 전략은 요청 수가 적을 때 단일 요청이 여러 번의 프로퍼게이션 호출에 나누어지지 않도록 보장하여, TTFT를 55%~65% 감소시키고 8K/1K 워크로드에서 처리량을 최대 41.5% 증가시켰습니다.

내부 KDA 접두사 체크포인트

이전에는 Mamba 스타일의 접두사 캐시 분할이 짧은 접미사에 대해 두 번째 전체 모델 통과가 필요했습니다. vLLM은 이제 단일 프리필 통과 내에서 체크포인트 내보내기를 지원합니다. 8K 입력에 대해 이는 한 번의 FlashKDA 호출로 8,000개 토큰을 모두 처리하고, 같은 반복 내에서 토큰 7,680에서 체크포인트 상태를 내보내는 것을 가능하게 하여, 어텐션, MoE, 라우팅, TP 컬렉티브를 다시 통과할 필요 없이 두 번째 통과를 피할 수 있습니다. 이로 인해 TTFT가 9%~25% 감소했습니다.

제로-코피 혼합 KDA 배치

이전에는 사전 추측과 비사전 추측 토큰을 포함하는 혼합 배치가 각 레이어당 여러 index_selectindex_copy_ 연산을 필요로 했습니다. vLLM은 연속적인 제로-코피 슬라이스와 직접 출력 쓰기를 구현하여, 동시성 4와 16에서 처리량을 5.2%~7.7% 증가시켰습니다.

지연된 MXFP4 최종화

MXFP4 top-k 최종화를 잠재적 꼬리 커널에 융합함으로써, vLLM은 하나의 커널 실행을 제거하고 중간 텐서를 쓰고 다시 읽는 필요성을 피하여 엔드투엔드 지연 시간을 약 5% 감소시켰습니다.

고급 메모리 및 상태 관리

ReplaySSM을 통한 상태 재구성

사전 추측 디코딩은 롤백을 가능하게 하기 위해 각 드래프트 위치에서 KDA 반복 상태를 기록해야 합니다. ReplaySSM은 최근 SSM 입력을 버퍼링하고, 커밋 지점에서만 수락된 상태를 재구성함으로써 이를 최적화합니다. Kimi K3의 Model Runner V2에서 TP8 하에서 정확도에 영향을 주지 않으면서 유효 캐시 용량을 10.97% 증가시켰습니다.

프리필/디코딩 분리 및 하이브리드 상태 오프로드

vLLM은 Kimi K3에 대해 PD 분리 및 캐시 오프로드를 지원하게 되었으며, 이는 MLA KV와 KDA 상태 모두를 전송해야 합니다. KDA 상태는 헤드와 차원에 따라 분할되며, Mamba align 블록 테이블은 희소하고 변경 가능할 수 있으므로, vLLM은 스케줄러가 선택한 경계 상태를 Mooncake에 저장하고, 모든 랭크에서 비동기 쓰기가 완료될 때까지 고정합니다.

디코딩 컨텍스트 병렬화 (DCP)

텐서 병렬화(TP)는 MLA 잠재 KV를 모든 랭크에 복제하므로 KV 캐시 용량을 늘리지 않습니다. 디코딩 컨텍스트 병렬화(DCP)는 KV 캐시를 시퀀스 차원에 따라 분할합니다. Kimi K3의 융합된 MLA 경로에서는 출력/LSE 축소에 대해 대칭 메모리 A2A를 사용하고, 쿼리 수집에 NVLS 멀티캐스트를 사용합니다.

120k 토큰 워크로드(114k 공유 접두사, 6k 접미사, 400 출력 토큰)에서 KV 캐시 용량은 1.93M에서 19.75M 토큰으로 증가했으며, 동시성 1에서 TPOT p50는 13.8ms에서 10.5ms로 감소했습니다.

더 넓은 구현 노력

성능 향상은 메모리 레이아웃, 시퀀스 및 파이프라인 병렬화, KDA 프리필, 그리고 소규모 배치 GPU 경로의 강화를 포함한 광범위한 노력의 결과입니다. 이에는 GitHub 이슈 #50587에서 추적된 DeepEPv2와 DeepGEMM MXFP4, 시퀀스 병렬 GEMM 경로의 통합이 포함됩니다.

Sources