
MiMo-V2.5 시리즈를 위한 풀 파이프라인 추론 최적화 (Full-Pipeline Inference Optimization)
요약
MiMo-V2.5 모델 제품군의 이론적 아키텍처 효율성을 프로덕션 환경에서 실현하기 위한 풀 파이프라인 추론 최적화 기술을 다룹니다. Hybrid SWA와 MoE 구조에서 발생하는 KVCache 관리, 스케줄링, 멀티모달 처리 병목 현상을 해결하는 엔지니어링 실무를 제시합니다.
핵심 포인트
- Hybrid SWA를 통한 KVCache 저장 공간의 획기적 압축
- 장거리 의존성 유지를 위한 로컬 및 글로벌 어텐션 교차 배치
- KVCache 관리 및 계층형 캐싱 시스템 최적화 전략
- MoE 및 멀티모달 인코더의 분산 스케줄링 및 처리량 개선
MiMo-V2.5 및 MiMo-V2.5-Pro를 포함하는 V2.5 모델 제품군은 몇 가지 아키텍처 설계 선택을 결합합니다. 하이브리드 슬라이딩 윈도우 어텐션 (Hybrid Sliding Window Attention, Hybrid SWA)은 KVCache 저장 공간을 Full Attention의 약 1/7 수준으로 압축하며, 희소 MoE (sparse MoE) 활성화는 모델 용량을 유지하면서 토큰당 연산량을 줄입니다. 또한 멀티모달 인코더 (multimodal encoders)는 시각, 오디오, 비디오를 아우르는 교차 모달 이해를 가능하게 합니다. 이러한 기능들이 결합되어 MiMo-V2.5 시리즈는 긴 문맥 (long-context) 및 멀티모달 시나리오에서 상당한 성능과 효율성 잠재력을 제공합니다.
처음부터 우리의 목표는 명확했습니다. 긴 문맥 추론 (long-context reasoning)을 위해 강력하면서도 효율적인 모델을 훈련하는 것이었습니다. 이 두 가지 목표는 본질적으로 상충 관계에 있습니다. 강력한 추론을 위해서는 장거리 의존성 (long-range dependencies)을 모델링해야 하며, 이는 일반적으로 더 큰 규모의 어텐션 연산과 더 높은 KVCache 오버헤드를 요구합니다. 전통적인 Full Attention 아키텍처에서는 어텐션 연산과 KVCache 저장 공간 모두 문맥 길이(context length)에 따라 급격히 증가하므로, 긴 문맥의 훈련과 추론 비용이 지나치게 높아집니다. Hybrid SWA는 레이어 전반에 걸쳐 로컬 슬라이딩 윈도우 어텐션 (Sliding Window Attention, SWA)과 글로벌 Full Attention을 교차 배치함으로써 작동합니다. 대부분의 레이어는 로컬 윈도우 내에서만 어텐션을 계산하는 반면, 소수의 핵심 레이어는 글로벌 뷰를 유지합니다. 이론적으로 이 구조는 장거리 의존성을 모델링하는 능력을 유지하면서 어텐션 복잡도를 거의 선형(near-linear) 수준으로 줄여줍니다.
하지만 이론적인 아키텍처의 장점이 자동으로 프로덕션 효율성으로 이어지지는 않습니다. Hybrid SWA는 KVCache 히트율 (hit rates), 접두사 매칭 (prefix matching), 그리고 Full Attention과 SWA 레이어 간의 이중 의미론적 일관성 (dual-semantic consistency)을 유지하는 데 있어 새로운 복잡성을 도입합니다. 실제 엔지니어링 시스템은 다단계 저장소 간의 데이터 이동, 정렬되지 않은 비동기 프리페치 (async prefetch) 및 스케줄링, 분산 캐시 상태 동기화의 어려움 등 이론적 이득이 직접적으로 달성되는 것을 방해하는 추가적인 과제들에 직면해 있습니다.
Hybrid SWA를 넘어, MoE (Mixture of Experts)는 분산 스케줄링 (distributed scheduling) 및 부하 분산 (load balancing)에 상당한 요구 사항을 부과하며, 멀티모달 인코더 (multimodal encoders)는 대형 이미지 및 긴 비디오 시나리오에서 처리량 (throughput) 병목 현상으로 남아 있습니다. 스케줄링 전략과 Prefill/Decode 실행 파이프라인 (execution pipeline) 또한 세심한 최적화가 필요합니다. 본 기사는 KVCache 관리, 계층형 캐싱 시스템 (tiered caching systems), SWA 인지 프리픽스 캐시 트리 (SWA-aware prefix cache trees), 스케줄링 전략, Prefill/Decode 실행 파이프라인, 그리고 멀티모달 최적화를 아우르는 MiMo-V2.5 시리즈 추론 시스템을 위한 엔드 투 엔드 (end-to-end) 엔지니어링 실무를 제시하며, 이를 통해 아키텍처의 이론적 효율성 잠재력(특히 Hybrid SWA)을 프로덕션 환경에서 체계적으로 실현합니다.
구체적인 최적화 단계로 들어가기에 앞서, 먼저 Hybrid SWA의 이론적 효율성 경계 (theoretical efficiency bounds)를 정량화해 보겠습니다. 이는 설계 선택의 아키텍처적 근거이자, 이후의 모든 최적화가 측정되는 기준점이 됩니다.
MiMo-V2.5-Pro를 예로 들면, 이 모델은 총 70개의 레이어(layer)를 가지고 있습니다: 10개의 Full Attention 레이어와 128의 슬라이딩 윈도우 크기(sliding window size)를 가진 60개의 SWA 레이어입니다. Full Attention과 비교했을 때, Hybrid SWA의 연산 비용은 아래 그림에 설명되어 있습니다. SWA 레이어가 전체 레이어의 6/7을 차지하므로, Hybrid SWA 아키텍처의 총 연산량은 Full Attention의 약 1/7 수준입니다. Prefill이 주로 연산 제한적 (compute-bound)인 Chunked Prefill 시나리오에서, 이는 Prefill 비용의 비례적인 감소로 직접 이어집니다.
SWA 레이어는 전체 시퀀스가 아닌 슬라이딩 윈도우 내의 KV만을 유지하면 되기 때문에, KVCache 메모리 사용량 또한 유사하게 1/7 근처로 떨어집니다. 디코드 (decode) 단계는 주로 메모리 제한적 (memory-bound)이며, 그 지연 시간 (latency)은 모델 파라미터와 KVCache를 위해 읽어들이는 결합된 바이트 수에 비례합니다. 긴 시퀀스의 경우 KVCache 볼륨이 모델 파라미터를 훨씬 초과할 수 있으므로, KVCache 저장 공간의 감소는 긴 시퀀스 시나리오에서 디코드 비용의 감소로 거의 직접적으로 전환됩니다.
KVCache 저장 공간은 모델 아키텍처에 따라 크게 다르며, 액세스 패턴(access patterns) 또한 다릅니다. 아래에 나타난 바와 같이, MiMo-V2.5-Pro와 MiMo-V2.5는 DeepSeek-V4-Pro와 DeepSeek-V4-Flash에 이어 KVCache 효율성 측면에서 2위를 차지했습니다.
실제 비용 차이가 KVCache 크기 비율과 엄격하게 일치하지는 않는다는 점에 주목할 필요가 있습니다. 시퀀스 길이와 무관하게 발생하는 고정된 연산(compute) 및 메모리 액세스(memory access) 비용이 존재하기 때문입니다. 하지만 롱 컨텍스트 (long-context) 시나리오에서는 전체적인 추세가 유지됩니다: 짧은 시퀀스에서는 이득이 미미하지만, 시퀀스가 길어질수록 추론 비용의 이점은 더욱 커집니다.
MiMo-V2 및 MiMo-V2.5 시리즈는 Hybrid SWA 아키텍처를 채택한 초기 모델 중 하나였으나, 당시에는 주요 오픈 소스 추론 프레임워크나 캐싱 시스템 모두 완전한 SWA 지원을 제공하지 않았습니다. MiMo API를 출시할 때, 저희는 서빙 백엔드 코드베이스로 SGLang v0.5.5를 선택했으며, 그 즉시 심각한 문제에 직면했습니다. 해당 버전에서 SGLang의 HiCache는 SWA를 지원하지 않았거나, 정확히 말하면 호환성을 유지하기 위해 전체 KVCache를 저장하는 방식으로 초기 SWA 지원이 구현되어 있었습니다. SWA를 더 유용하게 만들기 위한 몇 가지 임시 방편(workarounds)이 있었지만, 저희는 더 높은 성능 한계치와 더 나은 사용성을 가진 KVCache 시스템을 구축하고자 했습니다.
Hybrid SWA는 근본적인 저장 충돌을 야기합니다: Full Attention 레이어는 전체 시퀀스의 KV를 저장해야 하는 반면 (O(N)), SWA 레이어는 슬라이딩 윈도우 (sliding window) 내의 KV만 유지하면 됩니다 (O(W)). 전통적인 단일 KV 풀 (single KV pool) 설계 하에서는 시스템이 모든 레이어에 대해 O(N) 규모로 GPU 메모리를 할당해야 하므로, SWA의 윈도우 희소성 (window sparsity)을 활용할 수 없게 되어 사실상 거의 전체 KVCache를 사용하는 구현으로 퇴보하게 됩니다.
자연스러운 해결책은 KVCache를 Full Attention과 SWA를 위한 두 개의 독립적인 풀로 분리하고, 시스템 레벨에서 통합된 추상화 (unified abstraction)를 제공하는 것입니다:
이러한 설계를 통해, SWA KVCache는 시스템 레벨에서 엄격한 O(W) 저장 공간 제약을 달성하여 전체 KVCache 용량 효율을 약 7배 향상시키고 Hybrid SWA의 구조적 이점을 활용할 수 있게 합니다. 주요 추론 프레임워크(Mainstream inference frameworks)들도 이와 유사한 구현 방식을 채택하고 있습니다.
SWA KVCache 저장 최적화가 적용됨에 따라, SWA 레이어는 최소한의 KVCache만을 프리페치(prefetch)하면 됩니다. 이를 통해 레이어별 스케줄링(layerwise scheduling)을 통해 Host-to-Device KVCache 프리페치와 연산 사이의 거의 완벽한 오버랩(overlap)을 구현할 수 있으며, 추론 중 캐시 읽기 비용을 거의 제로(zero)에 가깝게 낮출 수 있습니다.
전통적인 RadixAttention 히트 규칙(hit rule)은 다음과 같은 단순한 가정에 기반합니다: 동일한 토큰 시퀀스 → 동일한 KV. 이 가정은 Full Attention 환경에서는 유효합니다. 즉, 두 요청이 동일한 토큰 ID를 공유하는 한, 그에 대응하는 KV가 풀(pool)에 남아 있으며 직접 재사용 가능하다는 것이 보장됩니다.
하지만 SWA 환경에서는 이 가정이 깨집니다. 그 이유는 프리픽스 트리(prefix tree)의 논리적 생명 주기와 SWA KV의 물리적 생명 주기가 일치하지 않기 때문입니다. 프리픽스 트리 노드의 길이는 SWA 윈도우(window)에 의해 제약받지 않습니다. 즉, 노드의 시퀀스 길이는 윈도우보다 짧을 수도 있고 훨씬 더 길 수도 있으며, 요청의 병합(merging), 분할(splitting), 제거(removal)를 통해 노드는 지속적으로 변화합니다. 결과적으로, 프리픽스 트리 노드가 논리적으로는 여전히 완전한 토큰 시퀀스를 나타낼 수 있지만, 그에 대응하는 SWA KV는 꼬리 부분(tail portion)만 남아 있거나 완전히 제거(evicted)되었을 수 있습니다. 만약 프리픽스 트리가 여전히 "토큰 일치 → 히트" 규칙에 기반하여 재사용 길이를 제공한다면, 스케줄러는 제거된 꼬리 KV를 가진 가짜 히트(pseudo-hit)를 전달받을 수 있습니다. 이 경우 후속 어텐션(attention) 연산은 유효하지 않거나 덮어씌워진 슬롯을 읽게 되어 모델의 정확도를 직접적으로 저하시키게 됩니다.
SWA 환경에서 프리픽스 재사용을 정확하고 효율적으로 유지하기 위해서는, 프리픽스 트리의 의미론(semantics)을 세 가지 방식으로 수정해야 합니다:
SWA의 KV 볼륨을 1/7로 압축하는 것은 **용량 수준 (capacity-level)**의 이점인 반면, 히트율 (hit rate)은 **재사용 수준 (reuse-level)**의 이점입니다. 이 두 가지가 결합되어 실제 프리필 (prefill) 연산 비용 곡선을 결정합니다. "윈도우 안전 길이 (window-safe length)" 매칭 규칙을 도입한 후, 주어진 토큰 용량에 대한 원시 히트율 (raw hit rate)은 약간 감소하지만, 동일한 저장 예산 내에 들어가는 토큰의 수는 몇 배로 증가합니다. 고정된 저장 예산과 비교했을 때, 유효 히트율 (effective hit rate)은 극적으로 향상됩니다.
세 가지 HiCache 티어 (tier)가 모두 SWA를 인식하도록 리팩토링된 후, 디바이스 (device), 호스트 (host), 그리고 스토리지 백엔드 (storage backend)는 각각 "어느 위치에 유효한 SWA가 있는지"에 대한 자체적인 상태를 유지합니다. 그러나 HiCache의 데이터 이동 파이프라인은 비동기적이며, 배포 환경에 따라 캐시가 다르고, 세션 간 공유되는 프리픽스 (prefix) 길이 또한 다양합니다. 이로 인해 Full Attention Cache와 티어 전반의 유효 SWA 인덱스 (indices)가 쉽게 동기화되지 않을 수 있습니다. SWA 인식 프리픽스 캐시 트리 매칭 규칙에 따르면, 시퀀스가 Full Attention Cache에서는 히트(hit)되지만 SWA Cache에서는 미스(miss)될 경우 심각한 매칭 길이 절단 (match-length truncation)이 발생합니다. 절단이 심할수록 더 긴 재연산 (recomputation)이 필요하며, SWA Cache 최적화 효과는 낮아집니다. 따라서 우리는 다양한 시나리오에 걸쳐 분산 일관성 (distributed consistency)과 캐시 히트율을 최적화했습니다.
이러한 최적화를 통해 우리는 KVCache 용량 확장을 더 긴 유효 히트 길이로 전환하여, 세션 간 긴 프리픽스 재사용을 가능하게 했습니다. 이는 특히 긴 에이전트 (agent) 세션, 다중 사용자 공유 시스템 프롬프트 (system prompts), 그리고 동일한 코드베이스에 대한 반복적인 도구 호출 (tool calls)에 매우 유익합니다.
GCache는 Xiaomi 스토리지 팀이 개발한 고성능 범용 캐시 시스템으로, 통합 훈련-추론 스토리지 아키텍처 (unified training-inference storage architecture)의 핵심적인 부분을 형성합니다. 초기 훈련 시나리오 단계에서 스토리지 팀은 특정 오픈 소스 캐싱 프로젝트들이 분산 파일 시스템 (distributed file systems)에 대해 제한적인 가속을 제공하며 성능 잠재력을 완전히 활용하지 못한다는 점을 인식하였고, 이에 따라 자체 솔루션 개발을 시작했습니다. 이후 MiMo 대규모 모델 (large model)의 출시와 추론 서비스의 시작에 따라, 팀은 GCache를 모델 배포를 위한 독립적인 스토리지 제품 및 추론 엔진을 위한 L3 KVCache로 변형하여 적용했습니다.
GCache는 파일 및 KV 시맨틱 (semantics)을 모두 지원하며, 메모리/디스크/원격 계층 (memory/disk/remote tiers)에 걸친 다단계 캐싱 (multi-level caching), 공유 메모리 지속성 (shared-memory persistence) 및 전체 경로 제로 카피 (full-path zero-copy), 고동시성 비차단 IO (high-concurrency non-blocking IO) 및 RDMA 통신을 지원합니다. 이를 통해 우수한 확장성을 유지하면서 상위 계층 서비스의 높은 처리량 (throughput) 및 낮은 지연 시간 (low latency) 요구 사항을 충족합니다.
GCache는 다음과 같은 몇 가지 주요 특징을 가집니다:
현재 주류 GPU 머신들은 8× 400G 고성능 NIC (Network Interface Card)를 갖추고 있습니다. 그러나 Prefill-Decode (PD) 분리 배포 (disaggregated deployment)를 적용하더라도, 현재의 추론 프레임워크들은 네트워크 대역폭을 포화시키는 데 어려움을 겪고 있으며, 이로 인해 업계에서는 비용 절감을 위해 NIC 사양을 낮추어야 한다는 목소리까지 나오고 있습니다.
고속 네트워킹을 완전히 활용하기 위해, GCache는 통신 시 프런트엔드 NIC보다 GPU NIC를 우선시하며, NUMA 바인딩 (NUMA binding) 및 동일 레일 어피니티 (same-rail affinity)를 포함하여 통신 모듈에서 광범위한 최적화를 수행합니다. 벤치마크 결과, 1MB IO 크기에서 단일 프로세스 RDMA 읽기 처리량은 단 280μs의 지연 시간으로 170 GB/s에 도달합니다. GDR (GPU Direct RDMA) 시나리오에서는 더 높은 HBM 대역폭 덕분에 단일 프로세스 처리량이 약 350 GB/s에 달하며, 이는 추론 프레임워크의 통신 요구 사항을 충족하고도 충분한 수준입니다.
2026년에는 스토리지 비용에 대한 업계의 우려가 커지고 있습니다. 전용 스토리지 머신을 사용하는 다른 벤더들과 달리, GCache는 GPU 머신 상의 공동 배포 (co-deployment)를 우선시하며, 머신의 내장 NVMe SSD와 함께 Prefill 및 Decode 노드로부터 메모리의 일부를 할당받아 사용합니다. 이를 통해 추가적인 스토리지 비용 없이 운영됩니다.
공동 배포 방식의 특성상, GPU 머신의 높은 장애율은 신뢰성 측면에서 도전 과제가 됩니다. 출시 이후 GCache는 거의 매일 호스트 머신 장애를 경험했습니다. 이를 해결하기 위해 첫째, 팀은 결함 처리 (fault-handling) 로직을 강화하는 데 상당한 노력을 기울였습니다. 둘째, 키(key)가 일관된 해싱 (consistent hashing)을 통해 완전히 분산되므로, 세션 ID를 논리적 세트로 사전 그룹화하여 관련 세션들이 서로 다른 노드에 분산되도록 함으로써 단일 노드 장애의 영향 범위 (blast radius)를 줄였습니다. 셋째, 기반 플랫폼의 하드웨어 감지 기능을 활용하여 선제적인 결함 발견 및 자동화된 데이터 마이그레이션을 가능하게 했습니다. 선제적으로 대응할 수 없는 드문 갑작스러운 충돌 (crash)의 경우, 짧은 SDK 타임아웃을 통해 추론 프레임워크가 미스 (miss)를 즉시 감지하고 재계산할 수 있도록 하여 온라인 추론에 미치는 영향을 최소화했습니다.
이러한 노력들을 바탕으로, GCache는 가용성을 위해 다중 복제본 (multi-replica) 중복성을 사용할 필요 없이, 공동 배포 환경에서도 단일 복제본 (single-replica) 스토리지를 유지하며, 이는 낮은 스토리지 비용을 달성하는 핵심 요소입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Lobste.rs AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기