Skip to content

DeepSeek-V4: Towards Highly Efficient Million-Token Context Intelligence #58

Description

@eagle705

Abstract

우리는 DeepSeek-V4 시리즈의 프리뷰 버전을 공개한다. 이 시리즈에는 두 개의 강력한 Mixture-of-Experts(MoE) 언어 모델이 포함된다. DeepSeek-V4-Pro는 총 1.6조(1.6T) 개의 파라미터 중 추론 시 490억(49B) 개를 활성화하며, DeepSeek-V4-Flash는 총 2,840억(284B) 개의 파라미터 중 130억(13B) 개를 활성화한다. 두 모델 모두 100만 토큰의 컨텍스트 길이를 지원한다.

DeepSeek-V4 시리즈는 아키텍처와 최적화 측면에서 여러 핵심 업그레이드를 도입했다.

  1. 하이브리드 어텐션 아키텍처: Compressed Sparse Attention(CSA)과 Heavily Compressed Attention(HCA)을 결합하여 긴 컨텍스트 처리 효율을 향상시켰다.
  2. Manifold-Constrained Hyper-Connections(mHC): 기존의 잔차 연결(residual connection)을 개선하여 모델 성능을 높였다.
  3. Muon 옵티마이저: 더 빠른 수렴과 높은 학습 안정성을 제공한다.

두 모델 모두 32조(32T) 개 이상의 다양하고 고품질 토큰으로 사전학습(pre-training)되었으며, 이후 포괄적인 후처리(post-training) 파이프라인을 거쳐 다양한 능력을 발현하고 더욱 향상시켰다.

특히 DeepSeek-V4-Pro-Max는 DeepSeek-V4-Pro의 최대 추론 노력(maximum reasoning effort) 모드로, 핵심 과제들에서 이전 모델들을 뛰어넘으며 오픈 모델 분야의 새로운 최고 수준(State-of-the-Art)을 제시한다.

또한 DeepSeek-V4 시리즈는 긴 컨텍스트 환경에서 매우 높은 효율성을 보인다. 100만 토큰 컨텍스트 설정에서 DeepSeek-V4-Pro는 DeepSeek-V3.2와 비교하여:

  • 단일 토큰 추론 FLOPs의 27%만 사용
  • KV 캐시 사용량의 10%만 사용

한다.

이러한 효율성 덕분에 우리는 100만 토큰 컨텍스트를 일상적으로 지원할 수 있으며, 장기적인(long-horizon) 작업과 더욱 발전된 테스트 타임 스케일링(test-time scaling)을 실현할 수 있게 되었다.

모델 체크포인트는 다음 링크에서 확인할 수 있다.

https://huggingface.co/collections/deepseek-ai/deepseek-v4

Image

Introduction

1. 서론 (Introduction)

추론(reasoning) 모델(DeepSeek-AI, 2025; OpenAI, 2024c)의 등장은 테스트 타임 스케일링(Test-Time Scaling) 이라는 새로운 패러다임을 확립했으며, 이를 통해 대규모 언어 모델(LLM)의 성능이 크게 향상되었다. 그러나 이러한 스케일링 방식은 근본적으로 기존 어텐션(vanilla attention) 메커니즘(Vaswani et al., 2017)의 이차 시간 복잡도(quadratic complexity) 에 의해 제약된다. 이는 초장문 컨텍스트와 복잡한 추론 과정에서 감당하기 어려운 병목 현상을 만든다.

동시에 복잡한 에이전트 워크플로우(agentic workflow)부터 대규모 문서 간 분석(cross-document analysis)에 이르기까지 다양한 장기(long-horizon) 시나리오와 작업이 등장하면서, 초장문 컨텍스트를 효율적으로 지원하는 능력이 미래 발전의 핵심 요소가 되었다.

최근의 오픈소스 모델들(Bai et al., 2025a; DeepSeek-AI, 2024; MiniMax, 2025; Qwen, 2025)은 일반적인 성능을 크게 발전시켰지만, 초장문 시퀀스를 처리하는 데 있어 이러한 핵심적인 아키텍처 비효율성은 여전히 남아 있다. 이 문제는 테스트 타임 스케일링으로부터 얻을 수 있는 추가적인 성능 향상을 제한하며, 장기 작업에 대한 연구와 탐구를 방해하는 주요 장애물로 작용한다.

이러한 초장문 컨텍스트의 효율성 장벽을 극복하기 위해, 우리는 DeepSeek-V4 시리즈를 개발하였다. 여기에는 총 1.6조 개 파라미터(활성화 490억)의 DeepSeek-V4-Pro와 총 2,840억 개 파라미터(활성화 130억)의 DeepSeek-V4-Flash 프리뷰 버전이 포함된다.

아키텍처 혁신을 통해 DeepSeek-V4 시리즈는 초장문 시퀀스 처리 효율성에서 획기적인 도약을 달성하였다. 이 돌파구를 통해 100만 토큰 컨텍스트 길이를 효율적으로 지원할 수 있게 되었으며, 차세대 LLM을 위한 "백만 토큰 컨텍스트 시대"를 열었다.

우리는 초장문 시퀀스를 효율적으로 처리하는 능력이:

  • 테스트 타임 스케일링의 다음 단계 발전을 가능하게 하고,
  • 장기 작업(long-horizon task)에 대한 심층 연구를 촉진하며,
  • 온라인 학습(online learning)과 같은 미래 패러다임을 탐구하기 위한 필수 기반을 제공한다고 믿는다.

DeepSeek-V3 아키텍처(DeepSeek-AI, 2024)와 비교했을 때, DeepSeek-V4 시리즈는 DeepSeekMoE 프레임워크(Dai et al., 2024)와 Multi-Token Prediction(MTP) 전략은 유지하면서도 여러 중요한 아키텍처 및 최적화 혁신을 도입하였다.

장문 컨텍스트 효율성을 높이기 위해 우리는 Compressed Sparse Attention(CSA)Heavily Compressed Attention(HCA) 를 결합한 하이브리드 어텐션 메커니즘을 설계하였다.

CSA (Compressed Sparse Attention)

CSA는 시퀀스 차원에서 KV 캐시를 압축한 뒤, DeepSeek Sparse Attention(DSA)(DeepSeek-AI, 2025)을 수행한다.

HCA (Heavily Compressed Attention)

HCA는 KV 캐시에 대해 더욱 공격적인 압축을 수행하지만, 어텐션 자체는 Dense Attention을 유지한다.


모델링 능력을 강화하기 위해, 우리는 기존 residual connection을 개선한 Manifold-Constrained Hyper-Connections (mHC) (Xie et al., 2026)를 도입하였다.

또한 DeepSeek-V4 시리즈 학습 과정에 Muon 옵티마이저(Jordan et al., 2024; Liu et al., 2025)를 적용하여:

  • 더 빠른 수렴(convergence)
  • 향상된 학습 안정성(training stability)

을 달성하였다.


DeepSeek-V4 시리즈의 효율적인 학습 및 추론, 그리고 생산적인 개발 환경을 위해 여러 인프라 최적화도 도입하였다.

1. 통합 MoE 커널(Fused MoE Kernel)

MoE 모듈을 위한 단일 fused kernel을 설계 및 구현하여:

  • 연산(computation)
  • 통신(communication)
  • 메모리 접근(memory access)

을 완전히 중첩(overlap)시켰다.

2. TileLang 활용

TileLang(Wang et al., 2026)이라는 DSL(Domain-Specific Language)을 도입하여:

  • 개발 생산성
  • 런타임 효율성

사이의 균형을 맞췄다.

3. 결정론적 커널 라이브러리

배치 크기에 영향을 받지 않는(batch-invariant) 결정론적(deterministic) 커널 라이브러리를 제공하여:

  • 학습(training)
  • 추론(inference)

전 과정에서 비트 단위(bitwise) 재현성을 보장하였다.

4. 학습 프레임워크 개선

학습 프레임워크 측면에서는:

  • Tensor 단위 체크포인팅(tensor-level checkpointing)을 지원하도록 autograd를 확장
  • Muon 옵티마이저용 Hybrid ZeRO 전략 적용
  • 재계산(recomputation) 및 fused kernel 기반의 비용 효율적인 mHC 구현
  • 압축 어텐션 처리를 위한 2단계 Contextual Parallelism 도입

등을 통해 학습 효율성을 향상시켰다.

5. 추론 프레임워크 개선

추론 프레임워크에서는:

  • 이종(Heterogeneous) KV Cache 구조
  • 디스크 저장 기반(on-disk) 전략

을 설계하여 shared-prefix 재사용을 효율적으로 지원한다.


또한 후처리(Post-Training) 단계에서는:

  • MoE 전문가(expert) 가중치
  • Indexer QK 경로

에 대해 FP4 Quantization-Aware Training(QAT) 을 적용하여 메모리 사용량과 연산 비용을 줄였다.

하이브리드 CSA/HCA를 통한 효율성 향상

CSA와 HCA를 결합한 하이브리드 구조, 그리고 연산 및 저장 정밀도 최적화를 통해 DeepSeek-V4 시리즈는 특히 긴 컨텍스트 환경에서 DeepSeek-V3.2 대비 훨씬 낮은 추론 FLOPs와 크게 감소된 KV 캐시 크기를 달성했다.

논문의 Figure 1 오른쪽은 DeepSeek-V3.2와 DeepSeek-V4 시리즈의 단일 토큰 추론 FLOPs 및 누적 KV 캐시 크기를 비교한다.

100만 토큰 컨텍스트(1M-token context) 환경에서:

DeepSeek-V4-Pro

활성화 파라미터 수가 더 많음에도 불구하고,

  • 단일 토큰 추론 FLOPs: DeepSeek-V3.2의 27%
  • KV 캐시 크기: DeepSeek-V3.2의 10%

수준에 불과하다.

(FLOPs는 FP8 기준 환산 FLOPs로 측정)

DeepSeek-V4-Flash

활성화 파라미터 수가 더 적기 때문에 효율성은 더욱 높다.

100만 토큰 컨텍스트에서:

  • 단일 토큰 FLOPs: DeepSeek-V3.2의 10%
  • KV 캐시 크기: DeepSeek-V3.2의 7%

만 사용한다.

또한 DeepSeek-V4 시리즈의 라우팅 전문가(Routed Expert) 파라미터는 FP4 정밀도를 사용한다.

현재 하드웨어에서는 FP4×FP8 연산의 최대 처리량이 FP8×FP8과 동일하지만, 미래 하드웨어에서는 이론적으로 약 33% 더 효율적(1/3 추가 효율 향상) 으로 구현될 수 있어 DeepSeek-V4의 효율성은 더욱 높아질 것으로 예상된다.


사전학습(Pre-training)

  • DeepSeek-V4-Flash: 32조(32T) 토큰
  • DeepSeek-V4-Pro: 33조(33T) 토큰

으로 각각 사전학습되었다.

사전학습 이후 두 모델은 별도의 추가 작업 없이도 100만 토큰 컨텍스트를 기본적으로(native) 지원한다.

내부 평가 결과:

DeepSeek-V4-Flash-Base

파라미터 효율성이 향상된 설계 덕분에

  • 대부분의 벤치마크에서
  • DeepSeek-V3.2-Base를 능가

했다.

DeepSeek-V4-Pro-Base

이러한 우위를 더욱 확장하여

  • 추론(Reasoning)
  • 코딩(Coding)
  • 장문 컨텍스트(Long Context)
  • 세계 지식(World Knowledge)

전 영역에서 DeepSeek 기반 모델 중 새로운 최고 성능을 달성했다.


DeepSeek-V4의 Post-Training 파이프라인

DeepSeek-V4의 후처리(Post-Training)는 2단계 구조(Two-stage Paradigm) 를 사용한다.

1단계: 도메인별 전문가 모델 육성

먼저 각 분야별로 별도의 전문가 모델을 학습한다.

예시:

  • 수학(Math)
  • 코딩(Coding)
  • 에이전트(Agent)
  • 지시문 수행(Instruction Following)

Step 1. SFT

기본 모델(Base Model)에 대해

  • 고품질
  • 도메인 특화 데이터

를 사용해 Supervised Fine-Tuning(SFT)을 수행한다.

이를 통해 기본 역량을 확보한다.

Step 2. RL

이후 GRPO(Group Relative Policy Optimization)를 활용한 강화학습(RL)을 수행한다.

각 도메인에 특화된 보상 모델(Reward Model)을 통해

  • 도메인 적합 행동
  • 성공 기준

을 학습시킨다.

결과적으로 각 분야에서 뛰어난 성능을 가진 전문가 모델 집합이 생성된다.


2단계: 전문가 통합 (On-Policy Distillation)

각 전문가의 능력을 하나의 모델로 통합하기 위해

On-Policy Distillation

을 수행한다.

여기서

  • 전문가 모델들 = Teacher
  • 통합 모델 = Student

역할을 맡는다.

Student 모델은 Teacher 모델들을 모방하면서

Reverse KL Loss

를 최소화하도록 학습된다.

결과적으로

  • 수학 전문가
  • 코딩 전문가
  • 에이전트 전문가
  • 지시문 전문가

의 능력이 하나의 통합 모델로 합쳐진다.


핵심 평가 결과 요약

1. 지식(Knowledge)

세계 지식(World Knowledge)

DeepSeek-V4-Pro-Max는

  • SimpleQA
  • Chinese-SimpleQA

벤치마크에서

주요 오픈소스 모델들을 크게 앞선다.

교육 지식(Educational Knowledge)

평가 기준:

  • MMLU-Pro
  • HLE
  • GPQA

DeepSeek-V4-Pro-Max는

오픈소스 경쟁 모델 대비 근소한 우위를 보인다.

또한 최고 수준의 폐쇄형 모델인

Gemini-3.1-Pro

와의 격차도 크게 줄였다.

다만 아직은 Gemini-3.1-Pro가 앞선다.


2. 추론(Reasoning)

추론 토큰 수를 충분히 늘릴 경우

DeepSeek-V4-Pro-Max는

  • GPT-5.2
  • Gemini-3.0-Pro

보다 높은 성능을 보인다.

그러나

  • GPT-5.4
  • Gemini-3.1-Pro

에는 약간 뒤처진다.

논문은 이를 근거로 DeepSeek-V4가 최첨단(Frontier) 모델 대비

약 3~6개월 정도의 기술 격차

를 가진다고 평가한다.

DeepSeek-V4-Flash-Max

  • GPT-5.2
  • Gemini-3.0-Pro

와 비슷한 성능을 달성하며

복잡한 추론 작업에서 매우 높은 비용 효율성을 제공한다.


3. 에이전트(Agent)

공개 벤치마크 기준:

DeepSeek-V4-Pro-Max는

  • Kimi-K2.6
  • GLM-5.1

등 최고 수준의 오픈소스 모델과 동급이다.

하지만 최상위 폐쇄형 모델보다는 약간 낮다.

내부 평가에서는

  • Claude Sonnet 4.5를 능가하고
  • Claude Opus 4.5 수준에 근접

하는 결과를 보였다.


4. 장문 컨텍스트(Long Context)

DeepSeek-V4-Pro-Max는 100만 토큰 컨텍스트 환경에서

  • 합성(Synthetic) 테스트
  • 실제(Real-world) 시나리오

모두 강력한 성능을 보였다.

특히 학술 벤치마크에서는

Gemini-3.1-Pro를 능가했다.


5. DeepSeek-V4-Pro vs DeepSeek-V4-Flash

DeepSeek-V4-Flash-Max

더 작은 모델 규모 때문에 지식(Knowledge) 평가에서는 성능이 낮다. 그러나 충분한 Thinking Budget(추론 토큰)을 제공하면

  • 추론(Reasoning)

에서는 Pro-Max와 유사한 결과를 얻는다.

Agent 평가

일부 벤치마크에서는

DeepSeek-V4-Flash-Max가

DeepSeek-V4-Pro-Max와 동등한 성능을 보인다.

하지만, 고난도 복합 작업에서는 여전히 Pro-Max가 우세하다.

GitHub Issue에 붙여넣기 좋도록 LaTeX 수식은 $...$, 블록 수식은 math 형식으로 변환해서 번역하겠습니다.


2. 아키텍처 (Architecture)

Image

전반적으로 DeepSeek-V4 시리즈는 Transformer(Vaswani et al., 2017) 아키텍처와 Multi-Token Prediction(MTP) 모듈(DeepSeek-AI, 2024; Gloeckle et al., 2024)을 유지하면서도 DeepSeek-V3 대비 몇 가지 핵심 업그레이드를 도입했다.

  1. Manifold-Constrained Hyper-Connections (mHC) 를 도입하여 기존 residual connection을 강화
  2. Compressed Sparse Attention(CSA)Heavily Compressed Attention(HCA) 를 결합한 하이브리드 어텐션 아키텍처 설계
  3. Muon 옵티마이저 채택

Mixture-of-Experts(MoE) 구성은 여전히 DeepSeekMoE(Dai et al., 2024)를 사용하며 DeepSeek-V3 대비 변경은 크지 않다.

Multi-Token Prediction(MTP) 구성 역시 DeepSeek-V3와 동일하다.

그 외 명시되지 않은 세부 설정은 모두 DeepSeek-V3(DeepSeek-AI, 2024)를 따른다.

Figure 2는 DeepSeek-V4 전체 구조를 보여주며 아래에서 상세히 설명한다.


2.1 DeepSeek-V3로부터 계승된 설계

Mixture-of-Experts (MoE)

이전 DeepSeek 시리즈와 마찬가지로 DeepSeek-V4 역시 FFN(Feed-Forward Network)에 DeepSeekMoE 구조를 사용한다.

이 구조는 다음 두 종류의 전문가를 가진다.

  • Routed Experts
  • Shared Experts

DeepSeek-V3 대비 변경점

라우팅 affinity score 계산에 사용되는 활성화 함수를 변경하였다.

기존:

$$\text{Sigmoid}(\cdot)$$

변경:

$$\sqrt{\text{Softplus}(\cdot)}$$

Load Balancing

DeepSeek-V3와 동일하게 Auxiliary-Loss-Free 전략을 사용한다.

추가로 sequence-wise balance loss를 넣어 개별 시퀀스 내부에서 특정 expert로 과도하게 쏠리는 현상을 방지한다.

Routing 제약 제거

DeepSeek-V4에서는

  • routing target node 개수 제한 제거
  • 병렬화(parallelism) 전략 재설계

를 통해 학습 효율성을 유지한다.

Hash Routing 기반 MoE

DeepSeek-V3와 달리 초기 Transformer block 몇 개의 Dense FFN을 Hash Routing 기반 MoE로 교체했다.

Hash Routing은 입력 token ID에 대해 미리 정의된 해시 함수를 적용하여 expert를 선택한다.

DeepSeek V4의 Hash Routing은 기존 MoE(Mixture-of-Experts)의 학습 가능한(router network) expert selection을 일부 레이어에서 고정된 hash function으로 대체한 기법입니다. 특히 처음 3개의 MoE 레이어에서만 사용됩니다. ([Puiching Memory]1)

기존 MoE routing과의 차이

기존 DeepSeek V3나 Switch Transformer에서는 각 token마다 작은 gating network가

[
\text{expert} = \operatorname{TopK}(W x)
]

처럼 hidden state (x)를 입력받아 expert를 선택합니다.

token embedding
      │
   Router MLP
      │
  scores over experts
      │
   Top-K experts

반면 Hash Routing에서는 router를 아예 사용하지 않습니다.

token id
   │
hash(token id)
   │
expert id

논문 표현으로는 "target experts are determined according to a predefined hash function with regard to the input token ID" 입니다. 즉 token ID를 hash하여 expert를 결정합니다. ([Puiching Memory]1)


왜 이런 걸 쓰나?

DeepSeek 팀이 설명하는 핵심 이유는 초기 layer의 routing instability 때문입니다.

초기 layer에서는 hidden representation이 아직 semantic하지 않습니다.

예를 들어

"The cat sat on the mat."

첫 번째 layer에서는

cat

이라는 embedding이

  • 동물인지
  • 변수명인지
  • 코드 identifier인지

아직 잘 분리되지 않은 상태입니다.

이런 representation으로 router를 학습시키면

  • expert collapse
  • load imbalance
  • routing oscillation

등이 쉽게 발생합니다.

Hash Routing은

"초기 layer에서는 semantic routing을 굳이 배우지 말고 deterministic하게 나누자."

라는 아이디어입니다. ([MoltX]2)


실제 routing 예

예를 들어 expert가 8개라고 하면

expert = hash(token_id) % 8

처럼 생각하면 됩니다.

"the" (id=320)
        ↓
hash(320)
        ↓
expert 3

"cat" (id=5832)
        ↓
hash(5832)
        ↓
expert 7

"dog"
        ↓
expert 1

항상 같은 token은 같은 expert로 갑니다.


그런데 semantic이 없어지는 거 아닌가?

초기 layer에서는 그렇습니다.

하지만 DeepSeek V4는 처음 3개 layer만 Hash Routing을 사용합니다.

그 이후부터는 다시 일반적인 learned router를 사용합니다.

Layer 1    Hash
Layer 2    Hash
Layer 3    Hash
Layer 4    Learned Router
Layer 5    Learned Router
...
Layer N

초기에는

representation을 안정적으로 만들고

후반부에서는

semantic routing을 학습합니다.

그래서 semantic specialization은 그대로 얻을 수 있습니다. ([NVIDIA Docs]3)


장점

  1. Router 계산이 없음

    • Router MLP가 필요 없어 계산량이 줄어듭니다.
  2. Training 안정성

    • 초기 routing collapse 감소
    • load balancing이 쉬워짐
  3. Deterministic

    • 같은 token은 항상 같은 expert로 갑니다.
  4. Communication 감소

    • routing이 미리 결정되어 있어 분산 학습 시 토큰 이동을 더 예측하기 쉽습니다. ([MoltX]2)

왜 하필 3개 layer만?

DeepSeek 논문은 "처음 3개의 MoE layer에서 Hash Routing을 사용한다"고 명시하지만, 왜 정확히 3개인지에 대한 근거는 공개하지 않았습니다. Hugging Face 커뮤니티에서도 이 선택이 경험적으로 정해진 것인지, 더 많은 레이어에 적용 가능한지에 대한 질문이 제기되었으나 공식 답변은 아직 없습니다. ([Hugging Face]4)

현재로서는 가장 합리적인 해석은:

  • 초기 몇 개 레이어는 representation이 충분히 성숙하지 않아 learned routing의 이점이 작고,
  • 그 이후에는 semantic routing의 이점이 커지므로 learned router로 전환하는 것이 성능과 안정성의 균형을 맞추는 경험적 설계라는 것입니다.

Multi-Token Prediction (MTP)

DeepSeek-V4는 DeepSeek-V3와 동일하게 MTP 모듈과 학습 목표를 사용한다.

MTP 전략은 이미 DeepSeek-V3에서 효과가 검증되었으므로 별도의 수정 없이 그대로 채택하였다.


2.2 Manifold-Constrained Hyper-Connections (mHC)

Figure 2에서 볼 수 있듯 DeepSeek-V4는 Transformer block 사이의 residual connection을 강화하기 위해 mHC를 도입했다.

기존 Hyper-Connections(HC) 대비 핵심 아이디어는:

Residual Mapping을 특정 manifold 위에 제한하여 신호 전달 안정성을 높이면서도 표현력을 유지하는 것

이다.


Standard Hyper-Connections

기존 HC는 residual stream의 폭(width)을 $n_{hc}$ 배 확장한다.

기존 residual stream:

$$\mathbb{R}^{d}$$

확장 후:

$$\mathbb{R}^{n_{hc} \times d}$$

여기서

  • $d$ = hidden size
  • $n_{hc}$ = HC expansion factor

이다.

Residual state를 다음과 같이 정의한다.

$$X_l = [x_{l,1}; \ldots ; x_{l,n_{hc}}]^T \in \mathbb{R}^{n_{hc}\times d}$$

HC는 세 개의 선형 변환을 도입한다.

  • Input Mapping: $A_l$
  • Residual Transformation: $B_l$
  • Output Mapping: $C_l$

각 행렬의 크기는

$$A_l \in \mathbb{R}^{1\times n_{hc}}$$ $$B_l \in \mathbb{R}^{n_{hc}\times n_{hc}}$$ $$C_l \in \mathbb{R}^{n_{hc}\times1}$$

Residual state 업데이트는 다음과 같다.

$$X_{l+1} = B_l X_l + C_l F_l(A_l X_l)$$

여기서

  • $F_l$ = $l$번째 Transformer Layer

이다.

중요한 점은 실제 layer input인

$$A_l X_l$$

의 차원은 여전히

$$\mathbb{R}^{d}$$

라는 것이다.

즉 residual width만 증가할 뿐 내부 layer 설계는 변경되지 않는다.


HC의 문제점

HC는 적은 연산 비용으로 새로운 scaling axis를 제공하지만,

깊은 네트워크를 구성하면 학습 과정에서 수치적 불안정성(numerical instability)이 자주 발생한다.

이 문제가 HC의 확장을 어렵게 만든다.


Manifold-Constrained Residual Mapping

mHC의 핵심은 Residual Mapping 행렬 $B_l$

Doubly Stochastic Matrix

집합(Birkhoff Polytope) 위로 제한하는 것이다.

$$B_l \in \mathcal{M}$$ $$\mathcal{M} = \{ M \in \mathbb{R}^{n\times n} \mid M\mathbf{1}_n=\mathbf{1}_n, \mathbf{1}_n^T M = \mathbf{1}_n^T, M \ge 0 \}$$

즉,

  • 모든 원소는 양수
  • 모든 행의 합 = 1
  • 모든 열의 합 = 1

을 만족해야 한다.


왜 중요한가?

이 제약으로 인해

$$\|B_l\|_2 \le 1$$

이 보장된다.

따라서 residual mapping은

Non-Expansive Transformation

이 된다.

  • Forward Pass
  • Backpropagation

양쪽 모두 수치적으로 안정해진다.

또한 Doubly Stochastic Matrix 집합은 곱셈에 대해 닫혀 있으므로

$$B_1 B_2 B_3 \cdots B_L$$

을 반복적으로 적용해도 안정성이 유지된다.


추가 안정성 제약

Input Mapping과 Output Mapping도 Sigmoid를 이용하여 제약한다.

이를 통해 signal cancellation 문제를 방지한다.


Dynamic Parameterization

세 개의 선형 변환 파라미터는

  • Dynamic Component
  • Static Component

로 분리된다.

먼저 입력을 flatten 후 RMSNorm 적용:

$$\hat{X}_l = \text{RMSNorm} ( \text{vec}(X_l) ) \in \mathbb{R}^{1\times n_{hc}d}$$

이후 unconstrained parameter를 생성한다.

Input Mapping

$$\tilde{A}_l = \alpha_l^{pre} (\hat{X}_l W_l^{pre}) + S_l^{pre}$$

Residual Mapping

$$\tilde{B}_l = \alpha_l^{res} \, \text{Mat} ( \hat{X}_l W_l^{res} ) + S_l^{res}$$

Output Mapping

$$\tilde{C}_l = \alpha_l^{post} (\hat{X}_l W_l^{post})^T + S_l^{post}$$

여기서

  • $W$ : Dynamic parameter 생성용 가중치
  • $S$ : Static bias
  • $\alpha$ : 작은 값으로 초기화된 learnable gate

이다.


Parameter Constraint 적용

생성된 파라미터에 안정성 제약을 적용한다.

Input Mapping

$$A_l = \sigma(\tilde{A}_l)$$

Output Mapping

$$C_l = 2\sigma(\tilde{C}_l)$$

Residual Mapping

Residual Mapping은 Doubly Stochastic Matrix로 투영된다.

먼저

$$M^{(0)} = \exp(\tilde{B}_l)$$

를 계산하여 양수 행렬을 만든다.

이후 Sinkhorn-Knopp 알고리즘을 적용한다.

$$M^{(t)} = T_r ( T_c ( M^{(t-1)} ) )$$

여기서

  • $T_r$ : Row Normalization
  • $T_c$ : Column Normalization

이다.

반복 수행하면

$$B_l = M^{(t_{max})}$$

에 수렴한다.

DeepSeek-V4에서는

$$t_{max}=20$$

을 사용한다.

기억해둘게요. 아래는 GitHub Issue에 바로 붙여넣기 좋은 형식입니다.


2.3 CSA와 HCA를 사용한 하이브리드 어텐션

컨텍스트 길이가 극단적으로 길어지면, 어텐션 메커니즘은 모델에서 가장 지배적인 계산 병목이 된다.

DeepSeek-V4에서는 두 가지 효율적인 어텐션 구조를 설계했다.

  • Compressed Sparse Attention (CSA)
  • Heavily Compressed Attention (HCA)

그리고 이 둘을 번갈아 사용하는 하이브리드 구성을 적용하여 긴 텍스트 시나리오에서 어텐션 계산 비용을 크게 줄였다.

CSA는 압축과 sparse attention 전략을 모두 통합한다. 먼저 매 $m$개의 토큰에 대한 Key-Value(KV) cache를 하나의 entry로 압축한 뒤, 각 query token이 오직 $k$개의 압축된 KV entry에만 attend하는 DeepSeek Sparse Attention(DSA)을 적용한다.

HCA는 더 극단적인 압축을 목표로 하며, 매 $m'(\gg m)$개의 토큰에 대한 KV cache를 하나의 entry로 통합한다.

CSA와 HCA의 하이브리드 아키텍처는 DeepSeek-V4 시리즈의 장문 컨텍스트 효율성을 크게 향상시켜, 실제로 100만 토큰 컨텍스트를 가능하게 만든다.


2.3.1 Compressed Sparse Attention

Image

CSA의 핵심 구조는 Figure 3에 나타나 있으며, 먼저 매 $m$개의 토큰에 대한 KV cache를 하나의 entry로 압축한 뒤 DeepSeek Sparse Attention을 적용하여 추가 가속을 수행한다.

압축된 Key-Value Entry

입력 hidden state 시퀀스를 다음과 같이 두자.

$$H \in \mathbb{R}^{n \times d}$$

여기서:

  • $n$: sequence length
  • $d$: hidden size

CSA는 먼저 두 종류의 KV entry와 그에 대응하는 compression weight를 계산한다.

$$C^a, C^b \in \mathbb{R}^{n \times c}$$ $$Z^a, Z^b \in \mathbb{R}^{n \times c}$$

여기서 $c$는 head dimension이다.

$$C^a = H \cdot W^{aKV}, \quad C^b = H \cdot W^{bKV}$$ $$Z^a = H \cdot W^{aZ}, \quad Z^b = H \cdot W^{bZ}$$

여기서:

$$W^{aKV}, W^{bKV}, W^{aZ}, W^{bZ} \in \mathbb{R}^{d \times c}$$

는 학습 가능한 파라미터이다.

다음으로, $C^a$$C^b$의 매 $m$개 KV entry를 compression weight와 학습 가능한 positional bias를 이용해 하나의 entry로 압축한다.

$$B^a, B^b \in \mathbb{R}^{m \times c}$$

그 결과 다음의 압축된 KV entry가 생성된다.

$$C^{Comp} \in \mathbb{R}^{\frac{n}{m} \times c}$$

각 compressed entry $C_i^{Comp} \in \mathbb{R}^c$는 다음과 같이 계산된다.

$$[ S^a_{mi:m(i+1)-1}; S^b_{m(i-1):mi-1} ] = \text{Softmax}_{row} ( [ Z^a_{mi:m(i+1)-1} + B^a; Z^b_{m(i-1):mi-1} + B^b ] )$$ $$C_i^{Comp} = \sum_{j=mi}^{m(i+1)-1} S^a_j \odot C^a_j + \sum_{j=m(i-1)}^{mi-1} S^b_j \odot C^b_j$$

여기서:

  • $\odot$는 Hadamard product
  • $\text{Softmax}_{row}(\cdot)$는 row dimension 방향 softmax
  • 이 softmax는 $Z^a$$Z^b$에서 온 총 $2m$개 원소에 대해 정규화를 수행한다

$i = 0$일 때는 $Z^b_{m(i-1):mi-1}$를 negative infinity로 padding하고, $C^b_{m(i-1):mi-1}$는 zero로 padding한다.

$C_i^{Comp}$$2m$개의 KV entry에서 유도되지만, $C_i^{Comp}$에 사용되는 $C^b$의 index와 $C_{i-1}^{Comp}$에 사용되는 $C^a$의 index가 겹친다. 따라서 CSA는 실제로 sequence length를 $1/m$배로 압축한다.


Sparse Selection을 위한 Lightning Indexer

압축된 KV entry $C^{Comp}$를 얻은 뒤, CSA는 DSA 전략을 적용하여 core attention에 사용할 top-$k$ 압축 KV entry를 선택한다.

먼저 CSA는 $C^{Comp}$에 사용한 것과 동일한 압축 연산을 수행하여 compressed indexer key를 얻는다.

$$K^{IComp} \in \mathbb{R}^{\frac{n}{m} \times c_I}$$

여기서 $c_I$는 indexer head dimension이다.

그다음 query token $t$에 대해 indexer query들을 low-rank 방식으로 생성한다.

$$c_t^Q = h_t \cdot W^{DQ}$$ $$[q^I_{t,1}; q^I_{t,2}; \ldots; q^I_{t,n_h^I}] = q_t^I = c_t^Q \cdot W^{IUQ}$$

여기서:

  • $h_t \in \mathbb{R}^d$: query token $t$의 입력 hidden state
  • $c_t^Q \in \mathbb{R}^{d_c}$: query용 compressed latent vector
  • $d_c$: query compression dimension
  • $n_h^I$: indexer query head 수
$$W^{DQ} \in \mathbb{R}^{d \times d_c}$$ $$W^{IUQ} \in \mathbb{R}^{d_c \times c_I n_h^I}$$

는 각각 indexer query의 down-projection 및 up-projection matrix이다.

다음으로 query token $t$와 이전 compressed block $s$ 사이의 index score $I_{t,s} \in \mathbb{R}$를 계산한다.

조건은 다음과 같다.

$$s < \left\lfloor \frac{t}{m} \right\rfloor$$

먼저 head별 weight를 계산한다.

$$[w^I_{t,1}; w^I_{t,2}; \ldots; w^I_{t,n_h^I}] = w_t^I = h_t \cdot W^w$$

그다음 index score는 다음과 같다.

$$I_{t,s} = \sum_{h=1}^{n_h^I} w^I_{t,h} \cdot \text{ReLU} ( q^I_{t,h} \cdot K^{IComp}_s )$$

여기서:

$$W^w \in \mathbb{R}^{d \times n_h^I}$$

이고, $w^I_{t,h} \in \mathbb{R}$$h$번째 indexer head의 weight이다.

query token $t$에 대해 index score $I_{t,:}$가 주어지면, top-$k$ selector를 사용하여 이후 core attention에 사용할 compressed KV entry subset을 선택한다.

$$C^{SprsComp}_t = \{ C^{Comp}_s \mid I_{t,s} \in \text{Top-}k(I_{t,:}) \}$$

Shared Key-Value MQA

Sparse KV entry를 선택한 뒤, CSA는 Multi-Query Attention(MQA) 방식으로 core attention을 수행한다.

이때 $C^{SprsComp}_t$ 안의 각 compressed KV entry는 attention key이자 value로 사용된다.

query token $t$에 대해 먼저 compressed latent vector $c_t^Q$로부터 attention query들을 생성한다.

$$[q_{t,1}; q_{t,2}; \ldots; q_{t,n_h}] = q_t = c_t^Q \cdot W^{UQ}$$

여기서:

  • $n_h$: query head 수
  • $W^{UQ} \in \mathbb{R}^{d_c \times c n_h}$: query용 up-projection matrix

주의할 점은 latent query vector $c_t^Q$가 indexer query에서 사용된 것과 공유된다는 점이다.

다음으로 ${q_{t,i}}$$C^{SprsComp}_t$에 대해 MQA를 수행한다.

$$o_{t,i} = \text{CoreAttn} ( \text{query}=q_{t,i}, \text{key}=C^{SprsComp}_t, \text{value}=C^{SprsComp}_t )$$

여기서 $o_{t,i} \in \mathbb{R}^c$는 token $t$에서 $i$번째 head의 core attention output이다.


Grouped Output Projection

DeepSeek-V4 설정에서는 $cn_h$가 상당히 크다. 따라서 core attention output을 직접 $d$차원 hidden state로 projection하면 계산 부담이 크다.

Core attention output은 다음과 같다.

$$[o_{t,1}; o_{t,2}; \ldots; o_{t,n_h}] = o_t \in \mathbb{R}^{c n_h}$$

이를 줄이기 위해 grouped output projection 전략을 설계한다.

먼저 $n_h$개의 output을 $g$개의 group으로 나눈다. 각 group output은 다음과 같다.

$$o^G_{t,i} \in \mathbb{R}^{\frac{c n_h}{g}}$$

각 group output을 $d_g$차원 intermediate output으로 projection한다.

$$o^{G'}_{t,i} \in \mathbb{R}^{d_g}$$

여기서:

$$d_g < \frac{c n_h}{g}$$

마지막으로 intermediate output들을 이어 붙인 뒤 최종 attention output으로 projection한다.

$$[o^{G'}_{t,1}; o^{G'}_{t,2}; \ldots; o^{G'}_{t,g}] \in \mathbb{R}^{d_g g}$$ $$\hat{o}_t \in \mathbb{R}^{d}$$

2.3.2 Heavily Compressed Attention

Image

HCA의 핵심 구조는 Figure 4에 나타나 있으며, KV cache를 더 강하게 압축하지만 sparse attention은 사용하지 않는다.

압축된 Key-Value Entry

HCA의 압축 전략은 대체로 CSA와 유사하지만, 더 큰 compression rate $m'(\gg m)$를 사용하고 overlap compression은 수행하지 않는다.

입력 hidden state 시퀀스를 다음과 같이 둔다.

$$H \in \mathbb{R}^{n \times d}$$

HCA는 먼저 원래 KV entry와 그에 대응하는 compression weight를 계산한다.

$$C \in \mathbb{R}^{n \times c}$$ $$Z \in \mathbb{R}^{n \times c}$$ $$C = H \cdot W^{KV}$$ $$Z = H \cdot W^Z$$

여기서:

$$W^{KV}, W^Z \in \mathbb{R}^{d \times c}$$

는 학습 가능한 파라미터이다.

그다음 $C$의 매 $m'$개 KV entry를 compression weight와 학습 가능한 positional bias를 이용해 하나로 압축한다.

$$B \in \mathbb{R}^{m' \times c}$$

그 결과 다음의 compressed KV entry를 얻는다.

$$C^{Comp} \in \mathbb{R}^{\frac{n}{m'} \times c}$$

각 compressed entry $C_i^{Comp} \in \mathbb{R}^c$는 다음과 같이 계산된다.

$$S_{m'i:m'(i+1)-1} = \text{Softmax}_{row} ( Z_{m'i:m'(i+1)-1} + B )$$ $$C_i^{Comp} = \sum_{j=m'i}^{m'(i+1)-1} S_j \odot C_j$$

이 압축 연산을 통해 HCA는 sequence length를 $1/m'$배로 압축한다.


Shared Key-Value MQA와 Grouped Output Projection

HCA도 CSA와 동일하게 shared KV MQA와 grouped output projection 전략을 사용한다.

KV 압축 후 query token $t$에 대해 attention query들을 low-rank 방식으로 생성한다.

$$c_t^Q = h_t \cdot W^{DQ}$$ $$[q_{t,1}; q_{t,2}; \ldots; q_{t,n_h}] = q_t = c_t^Q \cdot W^{UQ}$$

여기서:

  • $h_t \in \mathbb{R}^d$: query token $t$의 입력 hidden state
  • $n_h$: query head 수
$$W^{DQ} \in \mathbb{R}^{d \times d_c}$$ $$W^{UQ} \in \mathbb{R}^{d_c \times c n_h}$$

는 각각 query의 down-projection 및 up-projection matrix이다.

그다음 ${q_{t,i}}$$C^{Comp}$에 대해 MQA를 수행한다.

$$o_{t,i} = \text{CoreAttn} ( \text{query}=q_{t,i}, \text{key}=C^{Comp}, \text{value}=C^{Comp} )$$

여기서 $o_{t,i} \in \mathbb{R}^c$는 token $t$에서 $i$번째 head의 core attention output이다.

다음으로 CSA와 동일하게 HCA는 $n_h$개의 output을 $g$개의 group으로 나눈다.

각 group output은 다음과 같다.

$$o^G_{t,i} \in \mathbb{R}^{\frac{c n_h}{g}}$$

각 group output을 $d_g$차원 intermediate output으로 projection한다.

$$o^{G'}_{t,i} \in \mathbb{R}^{d_g}$$

여기서:

$$d_g < \frac{c n_h}{g}$$

마지막으로 intermediate output들을 이어 붙인 뒤 최종 attention output으로 projection한다.

$$[o^{G'}_{t,1}; o^{G'}_{t,2}; \ldots; o^{G'}_{t,g}] \in \mathbb{R}^{d_g g}$$ $$\hat{o}_t \in \mathbb{R}^{d}$$

2.3.3 기타 세부 사항

위에서 설명한 CSA와 HCA의 핵심 아키텍처 외에도, 하이브리드 어텐션에는 몇 가지 추가 기법이 포함된다. 설명의 명확성을 위해 앞선 소개에서는 이러한 추가 기법들을 생략했으며, 본 절에서 간략히 설명한다. 또한 이 절은 핵심 아이디어에만 초점을 맞추며, 단순화를 위해 일부 세부 사항은 생략할 수 있다. 명확한 세부 구현은 오픈소스 구현을 참고하기를 권장한다.

Query 및 Key-Value Entry 정규화

CSA와 HCA 모두에서 core attention 연산 직전에 query의 각 head와 compressed KV entry의 단일 head에 대해 추가적인 RMSNorm 연산을 수행한다.

이 정규화는 attention logit이 폭발하는 것을 방지하며, 학습 안정성을 향상시킬 수 있다.


Partial Rotary Positional Embedding

CSA와 HCA 모두에서 attention query, KV entry, core attention output에 Rotary Positional Embedding(RoPE)을 부분적으로 적용한다.

구체적으로, CSA와 HCA에서 사용되는 각 query vector와 KV entry vector의 마지막 64개 차원에 RoPE를 적용한다.

KV entry는 attention key이자 value로 동시에 사용되기 때문에, 단순한 core attention output ${o_{t,i}}$는 KV entry들의 weighted sum에서 유도된 absolute position embedding을 포함하게 된다.

이에 대한 대응으로, 각 $o_{t,i}$의 마지막 64개 차원에도 position $-i$를 사용한 RoPE를 적용한다.

이렇게 하면 core attention의 output 역시 relative position embedding을 포함하게 된다. 즉, 각 KV entry가 core attention output에 기여하는 정도가 query와 KV entry 사이의 거리에 따라 달라진다.


Sliding Window Attention의 추가 Branch

CSA와 HCA에서 causality를 엄격히 보존하기 위해, 각 query는 오직 이전 compressed KV block에만 attend한다.

그 결과 query는 자기 자신이 속한 compressed block 내부의 다른 token 정보에는 접근할 수 없다.

한편 언어 모델링에서는 최근 token들이 query token과 더 높은 관련성을 가지는 경우가 많다.

이러한 이유로, local dependency를 더 잘 모델링하기 위해 CSA와 HCA 모두에 sliding window 방식의 보조 attention branch를 추가한다.

구체적으로, 각 query token에 대해 최근 $n_{win}$개 token에 해당하는 uncompressed KV entry를 추가로 생성한다.

CSA와 HCA의 core attention에서는 이 sliding window 내부의 KV entry들이 compressed KV entry들과 함께 사용된다.


Attention Sink

CSA와 HCA의 core attention에서는 attention sink 기법을 사용한다.

구체적으로, 학습 가능한 sink logit들의 집합을 둔다.

$$\{z'_1, z'_2, \ldots, z'_{n_h}\}$$

$h$번째 attention head에 대해 $\text{Exp}(z'_h)$가 attention score의 분모에 추가된다.

$$s_{h,i,j} = \frac{ \text{Exp}(z_{h,i,j}) }{ \sum_k \text{Exp}(z_{h,i,k}) + \text{Exp}(z'_h) }$$

여기서 $s_{h,i,j}, z_{h,i,j} \in \mathbb{R}$는 각각 $h$번째 attention head에서 $i$번째 query token과 $j$번째 이전 token 또는 compressed block 사이의 attention score와 attention logit을 의미한다.

이 기법은 각 query head의 전체 attention score 합이 반드시 1이 아니도록 조정할 수 있게 하며, 심지어 0에 가깝게 만드는 것도 가능하게 한다.


2.3.4 효율성 논의

하이브리드 CSA와 HCA, 그리고 low-precision 연산 및 저장 방식을 함께 사용함으로써 DeepSeek-V4 시리즈의 attention module은 특히 long-context 시나리오에서 attention FLOPs와 KV cache 크기 양쪽 모두에서 뛰어난 효율성을 달성한다.

첫째, KV entry에 대해 mixed storage format을 사용한다.

  • RoPE 차원에는 BF16 precision 사용
  • 나머지 차원에는 FP8 precision 사용

이러한 hybrid representation은 순수 BF16 저장 방식과 비교해 KV cache 크기를 거의 절반으로 줄인다.

둘째, lightning indexer 내부의 attention computation은 FP4 precision으로 수행된다. 이는 극도로 긴 context에서 attention 연산을 가속한다.

셋째, DeepSeek-V3.2와 비교해 DeepSeek-V4 시리즈는 더 작은 attention top-$k$를 선택한다. 이를 통해 short- 및 medium-length text에서 모델 효율성이 향상된다.

마지막으로, 가장 중요한 점은 compressed attention과 hybrid attention 기법이 KV cache 크기와 계산 FLOPs를 모두 크게 줄인다는 것이다.

LLM attention에서 흔히 사용되는 구성 중 하나인 head dimension 128의 BF16 GQA8을 baseline으로 삼으면, 1M-context 설정에서 DeepSeek-V4 시리즈의 KV cache 크기는 해당 baseline의 약 2% 수준까지 극적으로 줄어든다.

또한 이미 효율적인 baseline인 DeepSeek-V3.2와 비교하더라도 DeepSeek-V4 시리즈는 여전히 상당한 효율성 우위를 보인다. 두 모델의 inference FLOPs와 KV cache 크기 비교는 Figure 1의 오른쪽에 제시되어 있다.


2.4 Muon Optimizer

Image

DeepSeek-V4 시리즈에서는 더 빠른 수렴과 향상된 학습 안정성 때문에 대부분의 module에 Muon optimizer를 사용한다.

Muon optimization의 전체 알고리즘은 Algorithm 1에 요약되어 있다.

기본 설정

다음 module에는 AdamW optimizer를 유지한다.

  • Embedding module
  • Prediction head module
  • mHC module의 static bias 및 gating factor
  • 모든 RMSNorm module의 weight

그 외 모든 module은 Muon으로 업데이트한다.

Liu et al. (2025)을 따라 Muon parameter에도 weight decay를 적용하고, Nesterov trick을 사용하며, AdamW hyper-parameter를 재사용하기 위해 update matrix의 Root Mean Square(RMS)를 rescale한다.

다만 기존 방식과 달리, orthogonalization에는 hybrid Newton-Schulz iteration을 사용한다.


Hybrid Newton-Schulz Iterations

주어진 행렬 $M$에 대해 Singular Value Decomposition(SVD)을 다음과 같이 둔다.

$$M = U \Sigma V^T$$

Newton-Schulz iteration의 목표는 $M$을 근사적으로 $UV^T$로 orthogonalize하는 것이다.

일반적으로 $M$은 먼저 다음과 같이 정규화된다.

$$M_0 = \frac{M}{\|M\|_F}$$

이는 최대 singular value가 1을 넘지 않도록 하기 위함이다.

그다음 각 Newton-Schulz iteration은 다음 연산을 수행한다.

$$M_k = aM_{k-1} + b(M_{k-1}M_{k-1}^T)M_{k-1} + c(M_{k-1}M_{k-1}^T)^2M_{k-1}$$

DeepSeek-V4의 hybrid Newton-Schulz는 두 단계에 걸쳐 총 10번의 iteration을 수행한다.

처음 8 step에서는 빠른 수렴을 위해 다음 계수를 사용하여 singular value를 1에 가깝게 만든다.

$$(a,b,c) = (3.4445, -4.7750, 2.0315)$$

마지막 2 step에서는 다음 계수로 전환하여 singular value를 정확히 1에 안정화한다.

$$(a,b,c) = (2, -1.5, 0.5)$$

Attention Logit 폭발 방지

DeepSeek-V4 시리즈의 attention architecture는 attention query와 KV entry에 RMSNorm을 직접 적용할 수 있게 해준다.

이는 attention logit이 폭발하는 것을 효과적으로 방지한다.

따라서 DeepSeek-V4의 Muon optimizer에서는 QK-Clip 기법을 사용하지 않는다.

3. General Infrastructure

3.1 Expert Parallelism에서의 세밀한 Communication-Computation Overlap

Mixture-of-Experts(MoE)는 Expert Parallelism(EP)을 통해 가속할 수 있다. 그러나 EP는 복잡한 노드 간 통신을 필요로 하며, interconnect bandwidth와 latency에 큰 부담을 준다.

EP에서 communication bottleneck을 완화하고, 더 낮은 interconnection bandwidth 요구 조건에서도 높은 end-to-end 성능을 달성하기 위해, 우리는 communication과 computation을 하나의 pipelined kernel로 fuse하는 fine-grained EP 방식을 제안한다. 이를 통해 communication-computation overlap을 수행한다.


Communication Latency는 숨길 수 있다

Image

EP 방식의 핵심 통찰은 MoE layer에서 communication latency를 computation 아래에 효과적으로 숨길 수 있다는 점이다.

Figure 5에서 보이듯 DeepSeek-V4 시리즈의 각 MoE layer는 주로 네 단계로 분해된다.

  • Communication-bound stage: Dispatch, Combine
  • Computation-bound stage: Linear-1, Linear-2

Profiling 결과, 단일 MoE layer 내부에서 communication의 총 시간은 computation 시간보다 짧다.

따라서 communication과 computation을 하나의 통합 pipeline으로 fuse하면, computation이 여전히 지배적인 병목으로 남는다. 이는 end-to-end 성능을 저하하지 않으면서도 더 낮은 interconnect bandwidth를 감당할 수 있음을 의미한다.


Fine-Grained EP Scheme

Interconnect bandwidth 요구량을 더 낮추고 overlap의 이점을 확대하기 위해, 더 세밀한 expert partitioning 방식을 도입한다.

여러 관련 연구에서 영감을 받아 expert를 여러 wave로 나누고 스케줄링한다. 각 wave는 expert의 작은 부분집합으로 구성된다.

한 wave 안의 모든 expert가 communication을 완료하는 즉시, 다른 expert를 기다리지 않고 computation을 바로 시작할 수 있다.

Steady state에서는 다음 세 작업이 동시에 진행된다.

  • 현재 wave의 computation
  • 다음 wave를 위한 token transfer
  • 완료된 expert의 result sending

이 방식은 expert 사이에 fine-grained pipeline을 형성하여, wave 전반에 걸쳐 computation과 communication이 계속 유지되도록 한다.

Wave 기반 scheduling은 Reinforcement Learning(RL) rollout처럼 long-tail small batch가 자주 발생하는 극단적인 경우에도 성능을 향상시킨다.


성능 및 오픈소스 Mega-Kernel

Fine-grained EP scheme은 NVIDIA GPU와 HUAWEI Ascend NPU 플랫폼 모두에서 검증되었다.

강력한 non-fused baseline과 비교했을 때:

  • 일반 inference workload에서 1.50~1.73배 speedup
  • RL rollout 및 high-speed agent serving 같은 latency-sensitive scenario에서 최대 1.96배 speedup

을 달성했다.

CUDA 기반 mega-kernel 구현체인 MegaMoE2를 DeepGEMM의 구성 요소로 오픈소스화했다.


관찰 및 제안

Kernel 개발 과정에서 얻은 관찰과 교훈을 공유하고, 효율적인 hardware design 및 더 나은 software-hardware co-design을 돕기 위해 hardware vendor에게 몇 가지 제안을 제시한다.


Computation-Communication Ratio

완전한 communication-computation overlap은 bandwidth 자체가 아니라 computation-communication ratio에 의해 결정된다.

Peak compute throughput을 $C$, interconnect bandwidth를 $B$라고 하자. Communication은 다음 조건에서 완전히 숨겨질 수 있다.

$$\frac{C}{B} \le \frac{V_{comp}}{V_{comm}}$$

여기서:

  • $V_{comp}$: computation volume
  • $V_{comm}$: communication volume

DeepSeek-V4-Pro에서는 각 token-expert pair가 $6hd$ FLOPs를 필요로 한다.

이는 SwiGLU의 gate, up, down projection에 해당한다.

반면 communication은 $3h$ bytes만 필요하다.

이는 FP8 Dispatch와 BF16 Combine에 해당한다.

따라서 위 식은 다음과 같이 단순화된다.

$$\frac{C}{B} \le 2d = 6144 \text{ FLOPs/Byte}$$

즉 interconnect bandwidth가 1 GBps 증가할 때마다, 6.1 TFLOP/s의 compute에 해당하는 communication을 숨길 수 있다.

Bandwidth가 이 threshold를 만족하면 더 이상 병목이 아니며, 추가적인 bandwidth 확보를 위해 silicon area를 더 투입해도 수익은 점점 줄어든다.

따라서 향후 hardware design은 bandwidth를 무조건 늘리기보다 이러한 balance point를 목표로 해야 한다.


Power Budget

극단적인 kernel fusion은 compute, memory, network를 동시에 높은 부하로 구동한다.

이로 인해 power throttling이 핵심적인 성능 제한 요인이 된다.

향후 hardware design에서는 이러한 완전 동시 실행 workload를 위해 충분한 power headroom을 제공하는 것이 바람직하다.


Communication Primitives

Dispatch stage에서는 pull-based approach를 채택한다.

즉 각 GPU가 remote GPU에서 activation을 능동적으로 읽어온다.

이는 fine-grained push 방식에서 발생하는 높은 notification latency를 피하기 위한 것이다.

향후 hardware가 더 낮은 latency의 cross-GPU signaling을 제공한다면, push 방식도 실용적이 되어 더 자연스러운 communication pattern을 가능하게 할 수 있다.


Activation Function

SwiGLU를 더 저렴한 element-wise activation으로 대체할 것을 제안한다.

이 activation은 exponential이나 division operation을 포함하지 않아야 한다.

이는 post-GEMM processing overhead를 직접 줄여, activation function 계산 때문에 GEMM pipeline이 stall되는 것을 방지한다.

결과적으로 전체 computational throughput과 resource utilization을 향상시킬 수 있다.

3.2 TileLang을 활용한 유연하고 효율적인 커널 개발

실제 환경에서 DeepSeek-V4의 복잡한 모델 아키텍처는 수백 개의 세분화된 Torch ATen operator를 생성하게 된다.

우리는 TileLang(Wang et al., 2026)을 사용하여 이들 대부분을 대체하는 fused kernel 집합을 개발했다. 이를 통해 적은 개발 비용으로 최적의 성능을 달성할 수 있었다.

또한 TileLang은 validation 단계에서 다양한 attention variant를 빠르게 프로토타이핑할 수 있게 해준다.

이러한 kernel들은

  • 모델 아키텍처 개발
  • 대규모 학습
  • 실제 추론 서비스 배포

과정에서 중요한 역할을 한다.

TileLang은 DSL(Domain-Specific Language)로서

  • 개발 생산성
  • 런타임 효율성

사이의 균형을 제공한다.

즉 빠른 개발을 가능하게 하면서도 동일한 코드베이스 내에서 깊고 반복적인 최적화를 수행할 수 있다.

또한 DeepSeek 팀은 TileLang 커뮤니티와 긴밀히 협력하여 더 민첩하고 효율적이며 안정적인 kernel 개발 워크플로우를 구축하고 있다.


Host Codegen을 통한 Invocation Overhead 감소

가속기 성능이 지속적으로 향상됨에 따라 CPU 측 orchestration overhead가 점점 더 중요한 병목이 되고 있다.

특히 매우 최적화된 작은 kernel의 경우, host 측 고정 오버헤드만으로도 utilization과 throughput이 제한될 수 있다.

이러한 오버헤드의 주요 원인 중 하나는 runtime contract check와 같은 host-side logic이 일반적으로 Python으로 작성되기 때문이다.

이를 해결하기 위해 Host Codegen을 도입하였다.

Host Codegen은 대부분의 host-side logic을 생성된 host code 내부로 이동시킨다.

구체적으로:

  1. Device kernel과 lightweight host launcher를 IR 수준에서 함께 생성
  2. 데이터 타입, tensor shape, stride/layout 등의 메타데이터를 포함
  3. TVM-FFI 기반 host source code로 lowering

을 수행한다.

Runtime에서는 생성된 host code가

  • validation
  • argument marshaling

을 수행하여 Python 경로의 per-invocation overhead를 제거한다.

실험 결과 CPU-side validation overhead는

  • 수십~수백 μs

에서

  • 1 μs 미만

으로 감소하였다.


SMT Solver 기반 Formal Integer Analysis

TileLang kernel은 복잡한 tensor index 연산을 포함하기 때문에 강력한 정수 분석 능력이 필요하다.

컴파일 과정에서:

  • Layout inference
  • Memory hazard detection
  • Bound analysis

등을 수행할 때 정수 표현식의 성질을 증명해야 최적화를 적용할 수 있다.

이를 위해 TileLang의 algebraic system에 Z3 SMT Solver를 통합하였다.

TileLang의 정수 표현식은 Z3의

QF_NIA
(Quantifier-Free Nonlinear Integer Arithmetic)

형태로 변환된다.

QF_NIA는:

  • 일반적인 선형 정수 표현식
  • Variable tensor shape에서의 vectorization

과 같은 비선형 문제까지 해결할 수 있다.

합리적인 리소스 제한 내에서 Z3는:

  • Vectorization
  • Barrier insertion
  • Code simplification

등 여러 최적화 패스의 성능을 향상시키면서도 컴파일 시간 증가는 수 초 수준으로 제한한다.


수치 정밀도와 Bitwise 재현성

실제 운영 환경에서는 순수한 throughput만큼이나

  • Numerical correctness
  • Reproducibility

가 중요하다.

따라서 TileLang은 기본적으로 정확성을 우선시한다.

Fast-Math 비활성화

컴파일러 수준에서 fast-math 최적화를 비활성화한다.

정밀도 손실이 있는 연산은 명시적으로 opt-in해야 한다.

예시:

T.__exp
T.__log
T.__sin

IEEE-754 준수 연산

엄격한 IEEE-754 동작이 필요한 경우 다음 intrinsic을 제공한다.

T.ieee_fsqrt
T.ieee_fdiv
T.ieee_add

이를 통해 개발자는 수치 동작을 정확하게 지정할 수 있다.


CUDA와의 Bitwise 일치

TileLang kernel을 hand-written CUDA 구현과 비교 검증하기 위해 bitwise reproducibility를 목표로 한다.

이를 위해:

  • Algebraic simplification 규칙
  • Lowering 규칙

을 NVCC와 같은 CUDA toolchain과 정렬시킨다.

또한

T.annotate_layout(...)

같은 annotation을 통해 layout-dependent lowering을 고정할 수 있다.

결과적으로 evaluation 순서와 accumulation 순서를 CUDA 기준 구현과 동일하게 유지하여 필요할 경우 bit-identical output을 생성할 수 있다.

실험 결과 이러한 재현성 중심 설계는 성능을 거의 희생하지 않는다.


3.3 고성능 Batch-Invariant 및 Deterministic Kernel Library

효율적인 학습과 추론을 위해 DeepSeek는 포괄적인 고성능 kernel 라이브러리를 개발하였다.

단순한 기능 구현과 하드웨어 활용 극대화뿐 아니라,

  • 학습 재현성
  • Pre-training / Post-training / Inference 간 bitwise alignment

도 중요한 목표이다.

따라서 end-to-end 수준에서:

  • Bitwise Batch-Invariant
  • Deterministic

한 kernel을 최소한의 성능 손실로 구현하였다.

이는

  • Debugging
  • Stability analysis
  • Consistent post-training

에 매우 유용하다.


Batch Invariance

Batch invariance란

어떤 token의 출력이 batch 내 위치와 무관하게 bitwise 동일함

을 의미한다.

이를 구현하는 과정에서 가장 어려운 문제는 다음과 같다.


Attention

Batch invariance를 달성하려면

Split-KV

방식을 사용할 수 없다.

Split-KV는 하나의 sequence attention 계산을 여러 SM(Stream Multiprocessor)에 분산하는 기법이다.

하지만 이를 포기하면

Wave Quantization

문제가 발생하여 GPU utilization이 저하된다.

이를 해결하기 위해

Dual-Kernel Strategy

를 개발하였다.

Kernel 1

한 sequence 전체를 하나의 SM에서 계산한다.

장점:

  • Full wave 상황에서 높은 throughput

Kernel 2

마지막 partially-filled wave의 latency를 줄이기 위해

하나의 sequence를 여러 SM에 분산한다.

Bitwise 일치를 유지하기 위해 두 번째 kernel은 첫 번째 kernel과 동일한 accumulation 순서를 사용하도록 설계하였다.

또한 thread-block cluster 내부의

Distributed Shared Memory

를 활용하여 SM 간 고속 데이터 교환을 수행한다.

결과적으로 batch-invariant decoding의 오버헤드는 사실상 무시할 수 있는 수준이 된다.


Matrix Multiplication

기존 cuBLAS는 batch invariance를 보장할 수 없다.

따라서 DeepSeek는 전체 경로를

DeepGEMM

으로 대체하였다.


Split-K 제거

작은 batch에서는 일반적으로

Split-K

기법을 사용하여 성능을 높인다.

그러나 Split-K는 batch invariance를 보장하지 못한다.

DeepSeek-V4에서는 이를 핵심 요구사항으로 보기 때문에 대부분의 상황에서 Split-K를 사용하지 않는다.

문제는 성능 저하가 발생할 수 있다는 점이다.

이를 해결하기 위해 여러 최적화를 도입하여 대부분의 주요 시나리오에서

  • 기존 Split-K 성능과 동등하거나
  • 오히려 더 높은 성능

을 달성하였다.

3.3 Determinism

Deterministic training은 하드웨어 또는 소프트웨어 문제를 디버깅하는 데 매우 유용하다.

또한 학습 중 loss spike와 같은 이상 현상이 발생했을 때, determinism은 연구자가 수치적 원인을 쉽게 추적할 수 있도록 해주며 모델 설계 개선에도 도움이 된다.

학습 과정의 non-determinism은 일반적으로 floating-point accumulation 순서가 달라지는 데서 발생하며, 이는 주로 atomicAdd 사용 때문에 생긴다.

이 문제는 주로 backward pass에서 발생하며 대표적으로 다음 세 부분이 있다.


Attention Backward

Sparse attention backward 구현에서는 KV token의 gradient를 누적하기 위해 일반적으로 atomicAdd를 사용한다.

하지만 floating-point 덧셈은 결합법칙(associativity)이 성립하지 않기 때문에 non-determinism이 발생한다.

이를 해결하기 위해 DeepSeek는:

  1. 각 SM(Stream Multiprocessor)마다 별도의 accumulation buffer를 할당
  2. 이후 모든 buffer에 대해 deterministic global summation 수행

방식을 사용한다.


MoE Backward

서로 다른 rank의 여러 SM이 수신 rank의 동일한 buffer에 동시에 데이터를 기록할 때도 non-determinism이 발생한다.

왜냐하면 write position 협상이 실행 순서에 따라 달라질 수 있기 때문이다.

이를 해결하기 위해:

  • rank 내부 token order pre-processing
  • rank 간 buffer isolation

을 도입하였다.

이 방식은:

  • Expert Parallelism의 send 결과
  • MoE backward의 accumulation 순서

를 모두 deterministic하게 만든다.


mHC의 Matrix Multiplication

mHC에는 출력 차원이 24밖에 되지 않는 작은 matrix multiplication이 존재한다.

매우 작은 batch에서는 성능 확보를 위해 Split-K 알고리즘을 사용해야 한다.

하지만 naive Split-K 구현은 non-determinism을 유발한다.

이를 해결하기 위해:

  1. 각 split 결과를 별도로 출력
  2. 후속 kernel에서 deterministic reduction 수행

방식을 사용한다.

이를 통해 determinism과 성능을 동시에 유지한다.


3.4 Training Framework

DeepSeek-V4의 학습 프레임워크는 DeepSeek-V3에서 구축된 확장 가능하고 효율적인 인프라를 기반으로 한다.

이 기반 위에 다음의 새로운 구조를 지원하기 위한 여러 혁신을 추가하였다.

  • Muon Optimizer
  • mHC
  • Hybrid Attention

목표는 학습 효율성과 안정성을 유지하는 것이다.


3.4.1 Muon의 효율적 구현

Muon은 parameter update를 계산하기 위해 전체 gradient matrix를 필요로 한다.

이는 ZeRO(Zero Redundancy Optimizer)와 함께 사용할 때 문제가 된다.

기존 ZeRO는 AdamW 같은 element-wise optimizer를 위해 설계되었기 때문이다.

즉 하나의 parameter matrix를 여러 rank에 나누어 업데이트할 수 있다.

반면 Muon은 matrix 전체를 필요로 한다.

이를 해결하기 위해 DeepSeek는

Hybrid ZeRO Bucket Assignment

전략을 설계하였다.


Dense Parameter 처리

Dense parameter에 대해서는:

  • ZeRO parallelism의 최대 크기 제한
  • Knapsack 알고리즘을 사용한 matrix 분배

를 수행한다.

각 rank는 비슷한 양의 parameter를 담당한다.

또한 reduce-scatter 효율성을 위해 모든 bucket을 가장 큰 bucket 크기에 맞춰 padding한다.

실제 환경에서는:

  • rank당 최대 5개 matrix 관리
  • padding overhead < 10%

수준이다.

Data Parallel 규모가 ZeRO 제한을 초과하는 경우:

  • 추가 DP 그룹에서 Muon update를 중복 계산

하여:

  • 계산량 증가
  • bucket memory 감소

의 tradeoff를 선택한다.


MoE Parameter 처리

MoE parameter는 expert별로 독립적으로 최적화된다.

먼저 모든 layer의 모든 expert에 대해:

  1. SwiGLU Down Projection
  2. Up Projection
  3. Gate Matrix

순으로 flatten한다.

그 후 padding을 적용하여:

  • 모든 rank에 균등 분배
  • 논리적으로 독립적인 matrix 분할 방지

를 수행한다.

Expert 수가 매우 많기 때문에:

  • ZeRO parallelism 제한 없음
  • Padding overhead 무시 가능

하다.


Newton-Schulz Batch 처리

동일한 shape의 연속 parameter는 자동으로 merge된다.

이를 통해 Newton-Schulz iteration을 batch로 실행하여 hardware utilization을 높인다.


BF16 기반 Muon

실험 결과 Newton-Schulz iteration은 BF16 matrix multiplication에서도 안정적이었다.

이를 활용하여:

  • MoE gradient synchronization
  • BF16 quantization
  • stochastic rounding

을 적용하였다.

결과:

  • 통신량 50% 감소

FP32 Local Summation

저정밀도 adder의 누적 오차를 피하기 위해:

기존

  • Tree Reduce
  • Ring Reduce-Scatter

대신 다음 방식을 사용한다.

Phase 1

All-to-All

로 gradient 교환

Phase 2

각 rank가 FP32에서 local summation 수행

이를 통해 수치적 안정성을 유지한다.


3.4.2 mHC의 저비용·메모리 효율적 구현

mHC는 기존 residual connection보다:

  • Activation Memory 증가
  • Pipeline 통신량 증가

를 유발한다.

이를 완화하기 위해 여러 최적화를 적용하였다.


1. Fused Kernel

Training과 Inference 모두에 대해 mHC 전용 fused kernel을 설계하였다.


2. Recomputation

중간 tensor를 선택적으로 checkpointing한다.

구체적으로:

재계산:

  • 대부분의 hidden state
  • 모든 normalized layer input

재계산하지 않음:

  • 계산 비용이 큰 연산

이를 통해:

  • Memory 절약
  • Computation overhead

사이 균형을 맞춘다.


3. DualPipe 1F1B 수정

증가한 pipeline communication을 처리하기 위해

DualPipe 1F1B overlap scheme을 수정하였다.

일부 mHC 연산은 pipeline과 동시에 실행된다.


결과

이러한 최적화 덕분에 mHC가 추가하는 wall-time overhead는

$$6.7\%$$

수준에 불과하다.

(Overlapped 1F1B pipeline stage 기준)


3.4.3 Long-Context Attention을 위한 Contextual Parallelism

기존 Context Parallelism(CP)은 sequence dimension을 분할한다.

각 rank는 연속된

$$s$$

개의 token을 유지한다.


문제 1: 압축 길이가 일정하지 않음

Training sample은 여러 sequence를 pack하여 구성된다.

각 sequence는 독립적으로:

$$m$$

또는

$$m'$$

배 압축된다.

남은 token 수가 압축 단위보다 작으면 버려진다.

따라서 압축된 KV 길이는 보통

$$\frac{s}{m}$$

보다 작으며 rank마다 다르다.


문제 2: Rank Boundary

압축에는 연속된

$$m$$

개의 KV entry가 필요하다.

하지만 이 구간이 두 CP rank의 경계를 넘을 수 있다.


해결책: Two-Stage Communication

Stage 1

Rank $i$는 마지막 $m$개의 uncompressed KV를 Rank $i+1$로 전송한다.

Rank $i+1$는:

  • 받은 KV
  • 자신의 $s$개 KV

를 함께 압축한다.

그 결과:

$$\frac{s}{m} + 1$$

개의 compressed entry를 생성한다.

이 중 일부는 padding이다.


Stage 2

모든 CP rank에 대해 All-Gather 수행

그 후:

Fused Select-and-Pad

연산을 수행한다.

최종 compressed KV 길이는

$$cp\_size \cdot \frac{s}{m}$$

이다.

Padding entry는 마지막으로 이동된다.


Visibility 처리

HCA 및 CSA Indexer

각 query token에 대해 보이는 compressed KV 범위는 규칙 기반으로 사전 계산 가능하다.

CSA Sparse Attention

Top-k selector가 직접 visible compressed KV index를 지정한다.


3.4.4 Flexible Activation Checkpointing을 위한 확장된 Automatic Differentiation

기존 activation checkpointing은 module 단위로 동작한다.

즉:

  • activation 저장
  • activation 재계산

을 module 전체 단위로 결정한다.

이 방식은 memory와 recomputation 사이의 tradeoff가 최적이 아닐 수 있다.


기존 대안

Forward/Backward를 직접 구현하고 tensor 상태를 수동 관리할 수 있다.

하지만:

  • AutoDiff 이점 상실
  • 개발 복잡도 증가

문제가 있다.


DeepSeek의 해결책

Tensor-Level Activation Checkpointing

을 AutoDiff와 통합하였다.

개발자는:

  • Forward만 구현
  • Checkpoint할 tensor만 표시

하면 된다.


구현 방식

TorchFX를 사용하여 전체 computation graph를 추적한다.

각 checkpoint tensor에 대해:

  1. Backward traversal
  2. 최소 재계산 subgraph 탐색

을 수행한다.

이를

Recomputation Graph

라고 부른다.

그리고 gradient 계산 직전에 삽입한다.


장점

수동 구현 대비 추가 overhead가 없다.

재계산은:

  • GPU memory free
  • Storage pointer 재사용

방식으로 수행된다.

따라서 GPU memory copy가 발생하지 않는다.


Storage 공유 Tensor 최적화

Graph tracing 과정에서 storage pointer를 추적할 수 있다.

예를 들어:

reshape(x)

의 입력과 출력은 같은 storage를 공유한다.

이 경우 recomputation을 자동으로 deduplicate한다.

즉 개발자가 메모리 레벨 세부사항을 고려할 필요가 없다.


3.5 Inference Framework

DeepSeek-V4의 inference framework는 대부분 DeepSeek-V3를 계승한다.

주요 차이점은 KV Cache 관리 방식이다.


3.5.1 KV Cache 구조와 관리

Image

Hybrid Attention 때문에 DeepSeek-V4는 여러 종류의 KV Cache를 사용한다.

이를 효율적으로 관리하기 위해 Figure 6과 같은 KV Cache Layout을 설계하였다.


DeepSeek-V4의 이종(Heterogeneous) KV Entry

Hybrid Attention은 서로 다른 종류의 KV Entry를 생성한다.

예를 들면:

Lightning Indexer

Sparse selection용 indexer는 추가 embedding dimension을 가진다.


CSA / HCA

압축으로 인해 sequence 길이가 각각

$$\frac{1}{m}$$

$$\frac{1}{m'}$$

배로 감소한다.

따라서 layer마다 KV Cache 크기가 달라진다.


Sliding Window Attention

SWA layer는:

  • KV cache 크기
  • Cache hit 정책
  • Cache eviction 정책

모두 다르다.


Compression Buffer

압축 branch에서는

$$m$$

개 token마다 하나의 KV가 생성된다.

남은 token 수가 부족하면:

  • Token
  • Hidden State

를 buffer에 저장해 두었다가 나중에 압축한다.

이 buffer 역시 KV Cache 관리 대상이다.


왜 PagedAttention이 어려운가?

Hybrid Attention은 PagedAttention 계열의 기본 가정을 깨뜨린다.

대표적인 문제는 두 가지이다.

1. 서로 다른 Cache Policy

예:

Sliding Window Attention

2. 고성능 Kernel 제약

예:

  • Memory Alignment
  • Layout Requirement

따라서 DeepSeek-V4는 이러한 문제를 해결하기 위한 전용 KV Cache 관리 전략을 설계하였다.

3.5.1 KV Cache 구조와 관리

SWA 및 Uncompressed Tail Token을 위한 State Cache

첫 번째 장애물을 해결하기 위해, 우리는 대안적인 cache management mechanism을 채택한다.

SWA는 제한된 KV cache 크기에서 성능을 향상시키기 위해 설계되었으므로, compression branch의 uncompressed tail token과 함께 이를 state-space model처럼 다루는 것이 합리적이다.

따라서 해당 KV cache는 현재 position에만 의존하는 sequence-specific state로 볼 수 있다.

이에 따라 고정 크기이면서 제한된 크기의 state cache pool을 미리 할당하고, 이를 각 sequence에 동적으로 할당한다.


Sparse Attention Kernel Co-Design

두 번째 장애물과 관련하여, 기존 고성능 attention kernel은 일반적으로 성능 최적화를 위해 block당 고정된 수 $B$개의 token을 가정한다.

이는 CSA에서는 $B \cdot m$개의 original token에, HCA에서는 $B \cdot m'$개의 original token에 해당한다.

고성능 sparse-attention kernel을 사용하면, 서로 다른 layer가 block당 variable token 수를 가져도 성능 저하 없이 처리할 수 있다.

이를 달성하려면 KV cache layout과 sparse attention kernel을 함께 설계해야 한다.

예를 들어 cache line에 맞게 block을 padding하면 성능을 향상시킬 수 있다.

따라서 compression ratio가 $m$인 CSA와 ratio가 $m'$인 HCA에 대해, block당 original token 수는 두 compression ratio의 최소공배수인 $\mathrm{lcm}(m, m')$의 임의의 배수가 될 수 있다.


3.5.2 On-Disk KV Cache Storage

DeepSeek-V4를 serving할 때, shared-prefix request에 대한 반복적인 prefilling을 제거하기 위해 on-disk KV cache storage mechanism을 활용한다.

CSA/HCA의 compressed KV entry와 Sliding Window Attention(SWA)의 uncompressed KV entry에 대해 각각 별도의 storage management solution을 설계하였다.


CSA 및 HCA

CSA와 HCA의 경우, compressed KV entry 전체를 disk에 저장한다.

Request가 저장된 prefix에 hit하면, 마지막 complete compression block까지 해당 prefix에 대응하는 compressed KV entry를 읽어 재사용한다.

다만 tail에 있는 incomplete block의 prefix token은 다시 recompute해야 한다.

이는 CSA와 HCA의 uncompressed KV entry를 저장하지 않기 때문에, 해당 uncompressed KV entry를 복원해야 하기 때문이다.


SWA KV Entry

SWA KV entry는 압축되지 않고 모든 layer에 존재하기 때문에, 그 크기는 compressed CSA/HCA KV entry보다 약 8배 크다.

이 큰 SWA KV entry를 효율적으로 처리하기 위해, on-disk SWA KV entry를 관리하는 세 가지 전략을 제안하고 구현한다.

각 전략은 storage overhead와 computational redundancy 사이의 서로 다른 trade-off를 제공한다.


Full SWA Caching

이 전략은 모든 token에 대한 완전한 SWA KV entry를 저장한다.

따라서 계산 중복은 0이다.

Prefix가 hit하면, 해당 prefix 안의 마지막 $n_{win}$개 token에 대한 on-disk cache만 읽어 SWA KV entry를 복원할 수 있다.

하지만 계산 중복이 없다는 장점에도 불구하고, 이 전략은 현대 SSD 기반 storage system에서는 비효율적이다.

각 hit request마다 저장된 SWA KV cache 중 작은 일부만 접근되기 때문에 write-intensive access pattern이 불균형하게 발생한다.


Periodic Checkpointing

이 전략은 매 $p$개 token마다 마지막 $n_{win}$개 token의 SWA KV entry를 checkpoint한다.

여기서 $p$는 조정 가능한 parameter이다.

Prefix가 hit하면 가장 최근 checkpointed state를 load한 뒤, 남은 tail token을 recompute한다.

$p$를 조정함으로써 storage와 computation 사이의 trade-off를 필요에 따라 선택할 수 있다.


Zero SWA Caching

이 전략은 SWA KV entry를 전혀 저장하지 않는다.

Prefix가 hit하면 SWA KV entry를 복원하기 위해 더 많은 recomputation이 필요하다.

구체적으로, 각 attention layer에서 각 token의 SWA KV entry는 이전 layer의 가장 최근 $n_{win}$개 token에 대한 SWA KV entry에만 의존한다.

따라서 cached CSA/HCA KV entry를 활용하면, $L$-layer model에서 마지막 $n_{win}$개의 SWA KV entry를 복원하기 위해 마지막 $n_{win} \cdot L$개 token만 recompute하면 충분하다.

배포 시나리오에 따라 storage와 computation 사이에서 원하는 trade-off를 달성할 수 있는 가장 적합한 전략을 선택한다.


4. Pre-Training

4.1 Data Construction

DeepSeek-V3의 pre-training data를 기반으로, 우리는 더 다양하고 품질이 높으며 effective context가 더 긴 training corpus를 구축하고자 했다.

이를 위해 data construction pipeline을 지속적으로 개선하였다.

Web-sourced data의 경우, batch 방식으로 자동 생성된 content와 templated content를 제거하는 filtering strategy를 구현하였다. 이를 통해 model collapse 위험을 완화한다.

수학 및 프로그래밍 corpus는 여전히 training data의 핵심 구성 요소이며, mid-training phase에서 agentic data를 추가하여 DeepSeek-V4 시리즈의 coding capability를 더욱 강화하였다.

Multilingual data의 경우, DeepSeek-V4를 위해 더 큰 corpus를 구축하여 다양한 문화권의 long-tail knowledge를 더 잘 포착하도록 하였다.

DeepSeek-V4에서는 특히 long-document data curation을 강조하였으며, scientific paper, technical report, 기타 고유한 학술적 가치를 반영하는 자료를 우선시하였다.

이 모든 요소를 결합하여 pre-training corpus는 32T token 이상으로 구성되며, 다음과 같은 고품질 category를 포함한다.

  • Mathematical contents
  • Codes
  • Web pages
  • Long documents
  • 기타 고품질 데이터

Pre-training data에 대해서는 대체로 DeepSeek-V3와 동일한 preprocessing strategy를 따른다.

Tokenization의 경우, DeepSeek-V3 tokenizer를 기반으로 context construction을 위한 몇 가지 special token을 추가했으며, vocabulary size는 여전히 128K로 유지하였다.

또한 DeepSeek-V3의 token-splitting과 Fill-in-Middle(FIM) strategy를 계승하였다.

Ding et al. (2024)의 영감을 받아, sample truncation을 최소화하기 위해 서로 다른 source의 document를 적절한 sequence로 packing하였다.

DeepSeek-V3와 달리, pre-training 동안 sample-level attention masking을 사용하였다.


4.2 Pre-Training Setups

4.2.1 Model Setups

DeepSeek-V4-Flash

Transformer layer 수는 43개, hidden dimension $d$는 4096으로 설정하였다.

처음 두 layer에는 pure sliding window attention을 사용한다.

이후 layer에서는 CSA와 HCA를 interleaved 방식으로 사용한다.

CSA 설정은 다음과 같다.

  • Compression rate $m = 4$
  • Indexer query head 수 $n_h^I = 64$
  • Indexer head dimension $c_I = 128$
  • Sparse attention에서 선택되는 KV entry 수, 즉 attention top-$k = 512$

HCA 설정은 다음과 같다.

  • Compression rate $m' = 128$

CSA와 HCA 공통 설정은 다음과 같다.

  • Query head 수 $n_h = 64$
  • Head dimension $c = 512$
  • Query compression dimension $d_c = 1024$

Output projection group 수 $g$는 8로 설정하였다.

각 intermediate attention output의 dimension $d_g$는 1024로 설정하였다.

Sliding window attention의 추가 branch에서는 window size $n_{win}$을 128로 설정하였다.

모든 Transformer block에서 MoE layer를 사용하지만, 처음 3개의 MoE layer에는 Hash routing strategy를 사용한다.

각 MoE layer는 다음으로 구성된다.

  • Shared expert 1개
  • Routed expert 256개
  • 각 expert의 intermediate hidden dimension 2048

Routed expert 중 token마다 6개 expert가 활성화된다.

Multi-token prediction depth는 1로 설정하였다.

mHC의 경우:

  • Expansion factor $n_{hc} = 4$
  • Sinkhorn-Knopp iteration 수 $t_{max} = 20$

이 설정에서 DeepSeek-V4-Flash는 총 284B parameter를 가지며, token마다 13B parameter가 활성화된다.


DeepSeek-V4-Pro

Transformer layer 수는 61개, hidden dimension $d$는 7168로 설정하였다.

처음 두 layer에는 HCA를 사용한다.

이후 layer에서는 CSA와 HCA를 interleaved 방식으로 사용한다.

CSA 설정은 다음과 같다.

  • Compression rate $m = 4$
  • Indexer query head 수 $n_h^I = 64$
  • Indexer head dimension $c_I = 128$
  • Sparse attention에서 선택되는 KV entry 수, 즉 attention top-$k = 1024$

HCA 설정은 다음과 같다.

  • Compression rate $m' = 128$

CSA와 HCA 공통 설정은 다음과 같다.

  • Query head 수 $n_h = 128$
  • Head dimension $c = 512`
  • Query compression dimension $d_c = 1536$

Output projection group 수 $g$는 16으로 설정하였다.

각 intermediate attention output의 dimension $d_g$는 1024로 설정하였다.

Sliding window attention의 추가 branch에서는 window size $n_{win}$을 128로 설정하였다.

모든 Transformer block에서 MoE layer를 사용하지만, 처음 3개의 MoE layer에는 Hash routing strategy를 사용한다.

각 MoE layer는 다음으로 구성된다.

  • Shared expert 1개
  • Routed expert 384개
  • 각 expert의 intermediate hidden dimension 3072

Routed expert 중 token마다 6개 expert가 활성화된다.

Multi-token prediction depth는 1로 설정하였다.

mHC의 경우:

  • Expansion factor $n_{hc} = 4$
  • Sinkhorn-Knopp iteration 수 $t_{max} = 20$

이 설정에서 DeepSeek-V4-Pro는 총 1.6T parameter를 가지며, token마다 49B parameter가 활성화된다.


4.2.2 Training Setups

DeepSeek-V4-Flash

대부분의 parameter에는 Muon optimizer를 사용한다.

다만 다음 module에는 AdamW optimizer를 사용한다.

  • Embedding module
  • Prediction head module
  • 모든 RMSNorm module의 weight

AdamW의 hyper-parameter는 다음과 같이 설정한다.

$$\beta_1 = 0.9,\quad \beta_2 = 0.95,\quad \epsilon = 10^{-20},\quad \text{weight\_decay} = 0.1$$

Muon의 경우 momentum과 weight decay를 다음과 같이 설정한다.

$$\text{momentum} = 0.95,\quad \text{weight\_decay} = 0.1$$

AdamW learning rate를 재사용하기 위해 각 update matrix의 RMS를 0.18로 rescale한다.

DeepSeek-V4-Flash는 32T token으로 학습하였다.

DeepSeek-V3와 마찬가지로 batch size scheduling strategy를 사용한다.

Token 기준 batch size를 작은 크기에서 시작해 75.5M까지 증가시킨 뒤, 학습 대부분 동안 75.5M으로 유지한다.

Learning rate는 처음 2000 step 동안 linear warmup을 수행하고, 학습 대부분 동안 다음 값으로 유지한다.

$$2.7 \times 10^{-4}$$

학습 마지막에는 cosine schedule에 따라 다음 값까지 decay한다.

$$2.7 \times 10^{-5}$$

Training은 sequence length 4K에서 시작하고, 점진적으로 다음 길이까지 확장한다.

  • 16K
  • 64K
  • 1M

Sparse attention 설정의 경우, 처음 1T token 동안은 dense attention으로 model을 warmup한다.

그 후 sequence length 64K에서 sparse attention을 도입하고, 나머지 학습 동안 sparse attention을 유지한다.

Attention sparsity를 도입할 때는 먼저 CSA의 lightning indexer를 warmup하는 짧은 stage를 둔 뒤, 학습 대부분 동안 sparse attention으로 model을 학습한다.

Auxiliary-loss-free load balancing에서는 bias update speed를 0.001로 설정한다.

Balance loss의 weight는 단일 sequence 내부의 extreme imbalance를 방지하기 위해 다음으로 설정한다.

$$0.0001$$

MTP loss weight는 학습 대부분 동안 0.3으로 설정하고, learning rate decay가 시작되면 0.1로 낮춘다.


DeepSeek-V4-Pro

Hyper-parameter의 구체적인 값만 제외하면, DeepSeek-V4-Pro의 training setup은 대체로 DeepSeek-V4-Flash와 동일하다.

대부분의 parameter에는 Muon optimizer를 사용한다.

다만 다음 module에는 AdamW optimizer를 사용한다.

  • Embedding module
  • Prediction head module
  • 모든 RMSNorm module의 weight

AdamW와 Muon의 hyper-parameter는 DeepSeek-V4-Flash와 동일하다.

DeepSeek-V4-Pro는 33T token으로 학습하였다.

Batch size scheduling strategy도 사용하며, 최대 batch size는 94.4M token이다.

Learning rate scheduling strategy는 DeepSeek-V4-Flash와 대체로 동일하지만, peak learning rate는 다음으로 설정한다.

$$2.0 \times 10^{-4}$$

End learning rate는 다음으로 설정한다.

$$2.0 \times 10^{-5}$$

Training은 sequence length 4K에서 시작하며, 점진적으로 다음 길이까지 확장한다.

  • 16K
  • 64K
  • 1M

DeepSeek-V4-Flash와 비교하면, DeepSeek-V4-Pro는 더 긴 dense attention stage로 시작한다.

Sparse attention 도입 방식은 DeepSeek-V4-Flash와 동일하게 two-stage training method를 따른다.

Auxiliary-loss-free load balancing에서는 bias update speed를 0.001로 설정한다.

Balance loss의 weight는 단일 sequence 내부의 extreme imbalance를 방지하기 위해 다음으로 설정한다.

$$0.0001$$

MTP loss weight는 학습 대부분 동안 0.3으로 설정하고, learning rate decay가 시작되면 0.1로 낮춘다.


4.2.3 Training Instability 완화

Trillion-parameter MoE model을 학습하는 것은 상당한 stability challenge를 동반하며, DeepSeek-V4 시리즈도 예외는 아니다.

학습 중 뚜렷한 instability 문제를 경험하였다.

단순 rollback은 일시적으로 training state를 복구할 수 있었지만, loss spike의 재발을 막지 못하기 때문에 장기적인 해결책으로는 부족했다.

경험적으로 spike의 발생은 MoE layer의 outlier와 일관되게 연결되어 있음을 확인하였다.

또한 routing mechanism 자체가 이러한 outlier의 출현을 악화시키는 것으로 보인다.

따라서 다음 두 방향에서 문제를 해결하고자 했다.

  • Routing으로 유도되는 악순환 차단
  • 비정상적인 값 직접 억제

다행히 학습 안정성을 효과적으로 유지하는 두 가지 실용적인 기법을 발견하였다.

그 근본 메커니즘에 대한 포괄적인 이론적 이해는 아직 열린 문제지만, 커뮤니티의 추가 탐구를 촉진하기 위해 이를 공개한다.


Anticipatory Routing

Backbone network와 routing network의 synchronous update를 decouple하면 학습 안정성이 크게 향상된다는 것을 발견하였다.

따라서 step $t$에서 feature computation에는 현재 network parameter $\theta_t$를 사용하지만, routing index는 historical network parameter $\theta_{t-\Delta t}$를 사용하여 계산하고 적용한다.

실제로는 model parameter를 두 번 load하는 overhead를 피하기 위해, step $t$의 data를 step $t-\Delta t$에서 미리 가져온다.

그리고 step $t$에서 나중에 사용할 routing index를 “anticipatory”하게 계산하고 cache한다.

그래서 이 방식을 Anticipatory Routing이라고 부른다.

Infrastructure level에서도 이를 크게 최적화하였다.

첫째, routing index의 pre-computation은 data에 대한 single forward pass만 필요하므로, pipeline execution과 Expert Parallelism(EP) communication overlap을 세심하게 조율하였다.

그 결과 Anticipatory Routing의 추가 wall-clock time overhead를 약 20%로 제한하였다.

둘째, loss spike가 발생했을 때만 짧은 rollback을 trigger하고 Anticipatory Routing을 활성화하는 automatic detection mechanism을 도입하였다.

이 mode로 일정 기간 동작한 뒤 system은 standard training으로 복귀한다.

결과적으로 model performance를 손상시키지 않으면서, 전체 추가 training overhead는 사실상 무시할 수 있는 수준으로 loss spike를 방지할 수 있었다.


SwiGLU Clamping

이전 연구에서는 numerical range를 제한하여 training stability를 높이기 위해 clamping을 명시적으로 사용하였다.

실제 training run에서, SwiGLU clamping을 적용하면 outlier를 효과적으로 제거하고 성능 저하 없이 training process 안정화에 크게 도움이 된다는 것을 경험적으로 확인하였다.

DeepSeek-V4-Flash와 DeepSeek-V4-Pro 학습 전체에서 SwiGLU의 linear component를 다음 범위로 clamp하였다.

$$[-10, 10]$$

Gate component의 upper bound는 다음으로 제한하였다.

$$10$$

4.3 Evaluations

4.3.1 Evaluation Benchmarks

Base model 평가를 위해 네 가지 핵심 dimension에 걸친 benchmark를 고려하였다.

  • World knowledge
  • Language understanding and reasoning
  • Coding and mathematics
  • Long-context processing

World Knowledge Benchmarks

World knowledge benchmark에는 다음이 포함된다.

  • AGIEval
  • C-Eval
  • CMMLU
  • MMLU
  • MMLU-Redux
  • MMLU-Pro
  • MMMLU
  • MultiLoKo
  • Simple-QA verified
  • SuperGPQA
  • FACTS Parametric
  • TriviaQA

Language Understanding and Reasoning Benchmarks

Language understanding 및 reasoning benchmark에는 다음이 포함된다.

  • BigBench Hard (BBH)
  • DROP
  • HellaSwag
  • CLUEWSC
  • WinoGrande

Coding and Mathematical Benchmarks

Coding 및 mathematical benchmark에는 다음이 포함된다.

  • BigCodeBench
  • HumanEval
  • GSM8K
  • MATH
  • MGSM
  • CMath

Long Context Benchmarks

Long context benchmark에는 다음이 포함된다.

  • LongBench-V2

4.3.2 Evaluation Results

Table 1에서는 DeepSeek-V3.2, DeepSeek-V4-Flash, DeepSeek-V4-Pro의 base model을 상세히 비교한다.

모든 모델은 엄격히 동일한 설정의 unified internal framework에서 평가되었다.


DeepSeek-V4-Flash-Base vs DeepSeek-V3.2-Base

DeepSeek-V4-Flash-Base와 DeepSeek-V3.2-Base를 비교하면 강력한 efficiency story가 드러난다.

DeepSeek-V4-Flash-Base는 activated parameter와 total parameter 수가 훨씬 적음에도 불구하고, 광범위한 benchmark에서 DeepSeek-V3.2-Base를 능가한다.

이 장점은 특히 다음 영역에서 두드러진다.

  • World knowledge task
  • Challenging long-context scenario

이 결과는 DeepSeek-V4-Flash-Base의 다음 요소들이 더 작은 parameter budget에서도 우수한 성능을 낸다는 점을 보여준다.

  • Architectural improvement
  • 개선된 data quality
  • Training optimization

결과적으로 더 큰 DeepSeek-V3.2-Base를 대부분의 evaluation에서 효과적으로 능가한다.


DeepSeek-V4-Pro-Base

DeepSeek-V4-Pro-Base는 능력 면에서 한층 더 결정적인 도약을 보여준다.

DeepSeek-V3.2-Base와 DeepSeek-V4-Flash-Base 모두에 대해 거의 전 영역에서 우위를 확립하였다.

거의 모든 category에서 향상된 성능을 보이며, 가장 어려운 benchmark들에서 DeepSeek base model 중 새로운 최고 성능을 달성하였다.

Knowledge-intensive evaluation에서는 극적인 성능 향상을 보였고, long-context understanding에서도 상당한 발전을 이루었다.

대부분의 reasoning 및 code benchmark에서도 DeepSeek-V4-Pro-Base는 이전 두 모델을 능가한다.

이 종합적인 향상은 DeepSeek-V4-Pro-Base가 DeepSeek 시리즈에서 가장 강력한 foundation model임을 확인해준다.

즉 다음 전 영역에서 이전 모델들을 능가한다.

  • Knowledge
  • Reasoning
  • Coding
  • Long-context capability

5. Post-Training

5.1 Post-Training Pipeline

Pre-training 이후, DeepSeek-V4 시리즈의 최종 모델을 만들기 위해 post-training phase를 수행하였다.

Training pipeline은 대체로 DeepSeek-V3.2와 유사하지만, 중요한 방법론적 변경이 있었다.

기존 mixed Reinforcement Learning(RL) stage를 전부 On-Policy Distillation(OPD)로 대체하였다.


5.1.1 Specialist Training

Domain specialist 개발은 DeepSeek-V3.2 training pipeline을 적용하여 수행되었다.

구체적으로 각 model은 다음 두 단계를 거쳐 순차적으로 최적화되었다.

  1. Initial fine-tuning phase
  2. Domain-specific prompt 및 reward signal에 의해 guide되는 Reinforcement Learning(RL)

RL stage에서는 Group Relative Policy Optimization(GRPO) algorithm을 사용하였다.

Hyper-parameter는 이전 연구와 가깝게 유지하였다.


Reasoning Efforts

Reasoning task에서 model performance는 사용하는 computational effort에 의해 근본적으로 좌우된다는 점이 널리 알려져 있다.

따라서 다양한 reasoning capacity에 최적화된 model을 개발하기 위해, 서로 다른 RL configuration으로 distinct specialist model을 학습하였다.

Table 2에 자세히 나타나 있듯이, DeepSeek-V4-Pro와 DeepSeek-V4-Flash는 모두 세 가지 reasoning effort mode를 지원한다.

각 mode마다 RL training 동안 서로 다른 length penalty와 context window를 적용한다.

그 결과 reasoning output token length가 달라진다.

이러한 서로 다른 reasoning mode를 통합하기 위해, <think></think> token으로 구분되는 specialized response format을 사용한다.

또한 “Think Max” mode의 경우, Table 3에 보인 것처럼 model의 reasoning process를 guide하기 위해 system prompt의 시작 부분에 특정 instruction을 추가한다.


Generative Reward Model

일반적으로 검증하기 쉬운 task는 simple rule-based verifier나 test case를 통해 효과적으로 최적화할 수 있다.

반면 검증하기 어려운 task는 전통적으로 RLHF에 의존해 왔다.

RLHF는 scalar reward model을 학습하기 위해 광범위한 human annotation을 필요로 한다.

그러나 DeepSeek-V4 시리즈의 post-training phase에서는 이러한 기존 scalar-based reward model을 사용하지 않는다.

대신 검증하기 어려운 task를 처리하기 위해 rubric-guided RL data를 curated하고, Generative Reward Model(GRM)을 사용하여 policy trajectory를 평가한다.

핵심적으로, GRM 자체에도 RL optimization을 직접 적용한다.

이 paradigm에서는 actor network가 native하게 GRM으로 기능한다.

이를 통해 model의 evaluative, 즉 judging 능력과 일반적인 generative capability를 함께 최적화할 수 있다.

이 두 역할을 통합함으로써 model의 internal reasoning capability가 평가 과정에 자연스럽게 결합된다.

그 결과 매우 robust한 scoring이 가능해진다.

또한 이 접근법은 다양한 human annotation을 최소한만 사용해도 더 우수한 성능을 달성한다.

이는 model이 자신의 logic을 활용하여 복잡한 task 전반에 generalize하기 때문이다.


Interleaved Thinking

DeepSeek-V3.2는 tool-result round 전체에서는 reasoning trace를 유지하되, 새로운 user message가 도착하면 이를 버리는 context management strategy를 도입했다.

이 방식은 효과적이었지만, 복잡한 agentic workflow에서는 여전히 불필요한 token 낭비를 유발했다.

새로운 user turn이 올 때마다 누적된 reasoning content가 모두 flush되어, model이 problem-solving state를 처음부터 다시 구성해야 했기 때문이다.

DeepSeek-V4 시리즈의 확장된 1M-token context window를 활용하여, agentic environment에서 interleaved thinking의 효과를 극대화하도록 이 mechanism을 더욱 개선하였다.


Tool-Calling Scenarios

Figure 7(a)에 나타난 것처럼, 전체 conversation 동안 모든 reasoning content를 완전히 보존한다.

DeepSeek-V3.2는 각 new user turn에서 thinking trace를 버렸지만, DeepSeek-V4 시리즈는 user message boundary를 넘어 모든 round에서 complete reasoning history를 유지한다.

이를 통해 model은 long-horizon agent task에서 coherent하고 cumulative한 chain of thought를 유지할 수 있다.


General Conversational Scenarios

Figure 7(b)에 나타난 것처럼, 기존 strategy를 유지한다.

즉 new user message가 도착하면 previous turn의 reasoning content를 버린다.

이는 persistent reasoning trace의 이점이 제한적인 setting에서 context를 간결하게 유지하기 위함이다.

DeepSeek-V3.2와 마찬가지로, user message를 통해 tool interaction을 simulate하는 agent framework, 예를 들어 Terminus는 tool-calling context path를 trigger하지 않을 수 있다.

따라서 enhanced reasoning persistence의 이점을 얻지 못할 수 있다.

이러한 architecture에는 계속해서 non-think model을 권장한다.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions