Huny's Dev Blog
huny.dev

DeepSeek Multi-Head Latent Attention(MLA) 아키텍처 해부: KV 캐시 98% 압축·저순위 결합 투영·디커플드 RoPE와 추론 시 가중치 흡수(Weight Absorption)

DeepSeek-V2/V3/R1의 핵심 혁신인 Multi-Head Latent Attention(MLA)의 내부 수식과 아키텍처를 분석한다. MHA·GQA의 KV 캐시 메모리 병목 한계, 저순위 잠재 벡터(c^{KV}) 압축, RoPE 위치 임베딩 분리(Decoupled RoPE), 추론 시 가중치 흡수(Weight Absorption)를 통한 무복원 고속 어텐션 연산과 로컬 Python 6대 수학적 동등성 검증을 살펴본다.

Hun Jang
Hun Jang Nov 15, 2026

DeepSeek Multi-Head Latent Attention(MLA)의 다차원 텐서 공간과 저순위 잠재 벡터 수렴을 상징하는 기하학적 추상 아트워크. 실제 코드나 다이어그램 화면이 아니다.

대규모 언어 모델(LLM)이 64k, 128k를 넘어 수백만 토큰의 초장문 컨텍스트를 다루게 되면서, 추론 서빙 인프라의 가장 치명적인 병목은 연산량(FLOPs)이 아니라 KV(Key-Value) 캐시의 GPU 고대역폭 메모리(HBM) 점유와 메모리 대역폭 한계로 이동했다 (DeepSeek-V2 Paper, DeepSeek-V3 Technical Report). 표준 Multi-Head Attention(MHA)은 모든 생성 단계마다 과거 토큰의 고차원 Key와 Value 텐서를 메모리에 유지해야 하므로 동시 서빙 가능한 배치 크기가 급격히 축소된다. 이를 완화하기 위해 도입된 Grouped-Query Attention(GQA)은 KV 헤드를 묶어 메모리를 줄였지만, 여전히 상당한 캐시를 소모할 뿐 아니라 표현력 손실을 피할 수 없었다. DeepSeek은 이 한계를 정면으로 돌파하기 위해 Multi-Head Latent Attention (MLA) 아키텍처를 고안했다 (DeepSeek-R1 Paper).

핵심 판단 기준을 먼저 요약하면, DeepSeek MLA는 토큰의 은닉 상태(Hidden State)를 저순위 결합 투영(Low-Rank Joint Compression)을 통해 512차원의 극히 압축된 잠재 벡터(c_t^{KV})로 축소하여 캐싱하고, 회전 위치 임베딩(RoPE)과의 비트 충돌을 막기 위해 64차원의 전용 RoPE 키(k_t^R)를 분리하는 디커플드 RoPE(Decoupled RoPE) 구조를 취한다. 이를 통해 1개 토큰당 캐시 크기를 576 floats(1,152 Bytes) 수준으로 줄여, 표준 MHA 대비 98.2%, GQA 대비 71.9%의 압도적인 메모리 절감(128k 컨텍스트 61개 레이어 기준 488 GB → 8.58 GB)을 달성한다. 특히 추론(Inference) 단계에서는 행렬 결합 법칙을 활용한 '가중치 흡수(Weight Absorption)' 기법을 적용하여, 업 투영 행렬을 현재 생성 쿼리(Query) 및 출력 가중치(W_O)에 미리 흡수시킴으로써 과거 토큰의 수백 개 헤드 Key/Value 텐서를 메모리에 전혀 복원하지 않고도 O(1) 인라인 행렬곱으로 어텐션을 완수한다. 이 글은 DeepSeek-V2, V3, R1 공식 기술 보고서와 오픈소스 커널 명세를 바탕으로 정리한 글이며, 부동소수점 오차 1e-14 수준으로 입증된 로컬 Python 6대 수학적 동등성 및 런타임 불변식 검증을 기준으로 설명한다.

1. MHA vs GQA vs DeepSeek MLA 한눈에 보기

표준 MHA, GQA, 그리고 DeepSeek MLA의 아키텍처 및 추론 서빙 특성 차이는 아래 표와 같다 (DeepSeek-V3 Technical Report).

비교 항목
표준 MHA (Multi-Head Attention)
GQA (Grouped-Query Attention)
DeepSeek MLA (Multi-Head Latent Attention)
실무 영향 및 아키텍처 차이
기본 구조
모든 Query 헤드마다 개별 Key/Value 헤드 매핑
여러 Query 헤드가 소수의 Key/Value 헤드 그룹 공유
저순위 잠재 벡터(c^{KV}) 결합 압축 + Decoupled RoPE
헤드 그룹화의 표현력 손실 없이 완전 압축 달성
캐시 저장 대상
모든 헤드의 Key(k) 및 Value(v) 텐서 전체
그룹화된 Key(k) 및 Value(v) 텐서 전체
압축 잠재 벡터(c^{KV}) + 분리된 RoPE 키(k^R)만 저장
고차원 텐서 대신 단일 저순위 벡터만 캐싱
1토큰당 캐시 크기 (FP16)
65,536 Bytes (128 헤드 × 128 차원 × 2 × 2)
4,096 Bytes (8개 KV 헤드 기준)
1,152 Bytes (512차원 c^{KV} + 64차원 k^R)
MHA 대비 98.24%, GQA 대비 71.87% 절감
128k 컨텍스트 전체 캐시
약 488.00 GB (61개 레이어 기준)
약 30.50 GB
약 8.58 GB
1장의 80GB GPU에서도 수십 개 동시 세션 서빙 가능
위치 인코딩(RoPE)
Key 벡터 전체에 RoPE 회전 적용
Key 벡터 전체에 RoPE 회전 적용
의미론적 c^{KV}와 분리된 전용 k^R에만 RoPE 적용
저순위 잠재 공간의 내적 보존과 위치 직교성 동시 확보
추론 시 Key/Value 복원
불필요 (이미 복원된 상태 저장)
불필요 (이미 복원된 상태 저장)
가중치 흡수(Weight Absorption)로 복원 없이 직접 연산
GPU HBM 로드량 극소화, 중간 텐서 메모리 할당 0
모델 수용력 (표현력)
기준 베이스라인 (100%)
MHA 대비 미세한 성능 저하 발생
MHA와 동등하거나 능가하는 벤치마크 점수
메모리는 1/50 수준이면서 고품질 추론 품질 유지

2. MLA의 5가지 핵심 기술 경계와 수학적 동작 원리

DeepSeek MLA 아키텍처 내부에서 작동하는 핵심 메커니즘과 추론 가속의 비결은 다음 5가지 원리에 집중되어 있다:

DeepSeek Multi-Head Latent Attention(MLA) 아키텍처 요약 다이어그램: 레거시 MHA/GQA 메모리 병목 극복, 저순위 결합 압축, Decoupled RoPE 및 추론 시 Weight Absorption 원리 비교

  • 저순위 결합 압축(Low-Rank Key-Value Joint Compression)과 잠재 벡터 c_t^{KV}: 기존 트랜스포머는 입력 토큰의 은닉 상태 h_t \in \mathbb{R}^d로부터 n_h \times d_h 차원의 Key와 Value를 각각 독립 투영했다. DeepSeek MLA는 학습 가능한 다운 투영 가중치 W_D^{KV} \in \mathbb{R}^{d_c \times d}를 사용해 은닉 상태를 차원이 대폭 축소된 단일 잠재 벡터 c_t^{KV} = W_D^{KV} h_t(DeepSeek-V3 기준 d_c = 512)로 압축한다. Key와 Value를 각각 따로 저장하는 대신 이 압축된 잠재 벡터만 KV 캐시에 보관하므로, 레이어당 저장 공간이 기존 수만 바이트에서 수백 바이트로 축소된다 (DeepSeek-V2 Paper).
  • 회전 위치 임베딩(RoPE)의 충돌 극복: 디커플드 RoPE(Decoupled RoPE): 표준 RoPE는 두 토큰의 Key와 Query 간 원소별 회전 행렬을 곱해 상대적 거리 정보를 주입한다. 그러나 Key를 저순위 잠재 벡터 c_t^{KV}로 압축해버리면, 위치 회전 행렬 R_{\theta}가 저순위 투영 행렬과 결합 법칙을 만족하지 않아 선형성이 깨지고 만다. DeepSeek은 이를 해결하기 위해 위치 정보를 다루는 전용 경로를 분리했다. 즉, 의미론적 내용(Content)을 담당하는 무위치 잠재 벡터 c_t^{KV}와 별도로, 64차원의 전용 위치 키 k_t^R = \text{RoPE}(W_{kR} h_t) \in \mathbb{R}^{d_R}(d_R = 64)를 독립 생성한다. 캐시에는 오직 c_t^{KV}(512-d)와 k_t^R(64-d)만 저장되므로 불과 576개의 실수(Float)만으로 완벽한 위치 인식 능력을 유지한다 (DeepSeek-V3 Technical Report).
  • 추론 시 Key 가중치 흡수(Key Weight Absorption): 무복원(No-Up-Projection) 인라인 연산: 만약 생성 단계마다 과거의 모든 캐시 벡터 c_j^{KV}를 업 투영 가중치 W_U^K와 곱해 원본 Key 텐서로 복원해야 한다면, 연산량과 GPU 메모리 쓰기 병목이 발생해 압축의 이점이 사라진다. DeepSeek은 행렬 연산의 결합 법칙(Associativity)을 이용해 이를 우회했다. q_t^\top (W_U^K c_j^{KV}) = (q_t^\top W_U^K) c_j^{KV}이므로, 과거의 모든 c_j^{KV}를 복원하는 대신 현재 생성 단계의 단일 Query 벡터 q_t에 업 투영 가중치 W_U^K를 먼저 곱해 q_{absorbed} \in \mathbb{R}^{d_c}를 한 번만 계산해 둔다. 이후 캐시 메모리에 있는 수만 개의 c_j^{KV}와 즉시 내적을 수행함으로써, 과거 토큰의 Key 텐서를 단 1바이트도 복원하지 않고 고속 어텐션 스코어를 도출한다 (FlashMLA Design).
  • Value 가중치 흡수(Value Weight Absorption) 및 출력 프로젝션 융합: Value 경로 역시 동일한 결합 법칙이 적용된다. 어텐션 가중치 \alpha_{t, j}와 업 투영된 Value W_U^V c_j^{KV}를 곱하고 최종 출력 가중치 W_O를 곱하는 연산은 다음과 같이 재구성된다: \sum_j \alpha_{t, j} (W_U^V c_j^{KV}) W_O = \left( \sum_j \alpha_{t, j} c_j^{KV} \right) (W_U^V W_O). 즉, 캐시된 잠재 벡터들의 가중치 합을 먼저 구한 뒤, 사전에 행렬곱해 둔 융합 가중치 \tilde{W}_O = W_U^V W_O와 단 1회 행렬곱을 수행한다. 이로써 어텐션의 전체 파이프라인에서 수백 개 헤드의 중간 고차원 텐서가 완전히 제거된다.
  • 128k+ 긴 컨텍스트 서빙과 GPU 메모리 대역폭 한계(Memory-Bound) 극복: 거대 언어 모델의 토큰 생성(Decode) 단계는 산술 연산량(Compute)보다 HBM에서 과거 KV 캐시를 읽어오는 메모리 대역폭(Memory Bandwidth)에 의해 속도가 결정되는 대표적인 메모리 바운드(Memory-Bound) 작업이다. MLA는 캐시 데이터 이동량을 98% 이상 절감함으로써 GPU의 메모리 버스 포화를 방지하고, HBM 읽기 대기 시간을 획기적으로 단축하여 초당 생성 토큰 수(TPS)를 극대화한다.

3. 실무 예제: PyTorch 및 추론 서빙 최적화 패턴

3.1 DeepSeek MLA 모듈 및 추론 가중치 사전 흡수(Weight Pre-fusion) 코드

아래 코드는 DeepSeek MLA의 핵심 레이어 정의와 추론(Inference) 시 가중치 흡수(Weight Absorption)를 적용하여 Key/Value 복원 없이 어텐션을 계산하는 PyTorch 패턴이다.

3.2 vLLM 및 고성능 추론 엔진 서빙 설정

vLLM 및 SGLang 환경에서 DeepSeek-V3 / R1 모델을 서빙할 때는 FlashMLA 전용 Triton/CUDA 커널을 활성화하여 초장문 배치 처리를 최적화할 수 있다 (vLLM DeepSeek Optimization).

4. 로컬 Python 6대 런타임 불변식 검증 시뮬레이션

아래 Python 스크립트는 DeepSeek MLA의 6대 핵심 내부 불변식(저순위 결합 압축 및 복원, Decoupled RoPE 위치 분리 직교성, 추론 시 Key 가중치 흡수의 수학적 동등성, Value 가중치 흡수 및 출력 프로젝션 동등성, MHA 대비 98.2% 메모리 절감 불변식, 엔드투엔드 자기회귀 스텝 및 Softmax 정규화)을 시뮬레이션하여 검증한다.

로컬 환경에서 위 스크립트를 실행한 결과는 다음과 같았다:

5. 실무 마이그레이션 및 도입 점검 체크리스트

추론 엔진의 MLA 전용 네이티브 커널(FlashMLA / Triton) 지원 확인: 기존 vLLM이나 SGLang 배포 환경에서 표준 PagedAttention 커널 대신 DeepSeek MLA 전용 커널(FlashMLA 등)이 탑재되어 있는지 확인한다. 일반 MHA 커널로는 잠재 벡터 직접 내적 최적화를 온전히 활용할 수 없다.

오프라인 가중치 사전 흡수(Weight Pre-fusion) 파이프라인 구성: 서빙 시작 시점에 W_O와 W_U^V를 미리 곱해 단일 융합 행렬 \tilde{W}_O로 변환해 두는 전처리 과정을 파이프라인에 포함시켜, 실시간 디코딩 시 불필요한 중간 행렬곱 연산 오버헤드를 사전에 제거한다.

Decoupled RoPE 전용 버퍼 및 회전 캐시 정렬 검증: 분리된 64차원 RoPE 키(k_t^R)가 연속된 메모리 블록에 정렬되어 있는지 점검한다. 의미론적 잠재 벡터(c_t^{KV})와 RoPE 벡터가 인터리빙되거나 비정렬 접근될 경우 메모리 스트라이드 지연이 발생할 수 있다.

FP8 혼합 정밀도(FP8 Mixed-Precision) 양자화와의 결합 검증: DeepSeek-V3와 R1은 MLA와 더불어 FP8 포맷(E4M3 / E5M2)을 전면 도입했다. 512차원 잠재 공간에 FP8 양자화를 적용할 때 비정상적인 언더플로우나 어텐션 맵 왜곡이 발생하지 않는지 스케일 팩터(Per-tensor / Per-token)를 검증한다.

초장문(128k) 동시 서빙 시 동적 배치(Dynamic Batching) 튜닝: 캐시 크기가 1/50 수준으로 축소됨에 따라 단일 노드에서 수용 가능한 동시 토큰 수가 폭증하므로, 스케줄러의 토큰 버짓(Token Budget)과 동적 배치 임계치를 상향 조정하여 GPU 연산 유닛 가동률을 극대화한다.

6. 참고 자료 및 공식 출처 (확인 기준일: November 15, 2026)

추천 글