AI/ Paper/ DeepSeek-V3

Abstract

우리는 DeepSeek-V3을 소개한다. 이것은 각 토큰별로 37B 파라미터가 활성화된 총 671B 파라미터를 갖는 강력한 Mixture-of-Experts(MoE) 언어 모델이다. 효율적인 inference와 비용 효율적인 학습을 달성하기 위해 DeepSeek-V3는 DeepSeek-V2에서 철저하게 검증된 Multi-head Latent Attention(MLA)와 DeepSeekMoE 아키텍처를 채택한다. 게다가 DeepSeek-V3은 load balancing을 위해 auxiliary-loss-free 전략을 개척하고 강력한 성능을 위해 multi-token prediction 학습 목적을 설정한다. 우리는 DeepSeek-V3를 14.8 trillion 분산된 고품질 토큰으로 pre-train하고 Supervised Fine-Tuning(SFT)와 강화 학습 단계를 거쳐 그 능력을 극대화했다. 종합적인 평가 결과 DeepSeek-V3이 다른 오픈 소스 모델을 능가하고 leading closed 소스 모델과 비교할 만한 성능을 달성하는 것을 드러낸다. 훌륭한 성능에도 DeepSeek-V3는 full training에 2.799M H800 GPU 시간만 필요하다. 게다가 이것의 학습 프로세스는 놀라울 정도로 안정적이다. 전체 학습 프로세스 내내 회복불가능한 loss spike를 경험하지 않았으며 임의의 롤백도 수행하지 않았다. 모델 체크 포인트는 github에서 사용 가능하다. https://github.com/deepseek-ai/DeepSeek-V3

1. Introduction

최근 몇 년 동안, LLM은 빠른 반복과 진화를 겪으며 AGI 방향으로의 격차가 점차 감소하고 있다. closed-source 모델을 너머 DeepSeek 시리즈와 LLaMA 시리즈, Qwen 시리즈와 Mistral 시리즈를 포함하여 open-source 모델 또한 상당한 걸음을 만들어서 그들의 closed-source 대응 모델과 격차를 줄이기 위해 노력한다. open-source 모델 능력의 범위를 더 밀어 붙이기 위해 우리는 우리의 모델을 대규모로 확장하여 DeepSeek-V3를 소개한다. 이것은 각 토큰 별로 37B 파라미터가 활성화 되는 총 671B 파라미터의 large Mixture-of-Experts(MoE) 모델이다.
미래 지향적인 관점으로, 우리는 강력한 모델 성능과 경제적 비용을 위해 일관되게 노력한다. 그러므로 DeepSeek-V3는 효율적인 inference를 위해 아키텍쳐의 측면에서 Multi-head Latent Attention(MLA)와, 비용 효율적인 학습을 위해 DeepSeekMoE를 채택한다. 이 두 아키텍쳐는 DeepSeek-V2에서 검증되었고, 그들이 견고한 모델 성능을 유지하면서 효율적인 학습과 inference를 달성할 수 있음을 시연했다. 기본 아키텍쳐를 넘어 우리는 모델 능력을 추가로 진보시키기 위해 2가지 추가적인 전략을 구현한다. 먼저 DeepSeek-V3는 load balancing을 위해 auxiliary-loss-free 전략을 개척한다. 이것은 load balancing을 유지하려는 과정에서 드러나는 모델 성능에 대한 부정적인 영향을 최소화하는데 초점을 맞춘다. 두번째, DeepSeek-V3는 multi-token prediction 학습 목적을 활용한다. 이를 통해 평가 벤치마크에서 전체적인 성능이 향상되는 것을 관찰했다.
효율적 학습을 달성하는 측면에서 우리는 FP8 mixed precision 학습을 지원하고 학습 프레임워크에 대해 포괄적인 최적화를 구현한다. Low-precision 학습은 효율적인 학습을 위한 유망한 해법으로 등장했으며, 이것의 발전은 하드웨어 능력의 발전과 밀접하게 관련된다. 이 연구에서 우리는 FP8 mixed precision 학습 프레임워크를 도입하고 초 거대 모델에서 그 효율성을 처음으로 검증한다. FP8 계산과 저장을 위한 지원을 통해 우리는 학습을 가속화하고 GPU 메모리 사용량을 줄이는 것을 모두 달성한다. 우리는 효율적인 파이프라인 병렬화를 위해 DualPipe 알고리즘을 설계한다. 이것은 pipeline 버블을 최소화하고, 계산-커뮤니케이션 overlap을 통해 학습하는 동안 대부분의 커뮤니케이션을 숨긴다. 이 overlap은 일정한 computation-to-communication 비율을 유지하는 한 모델이 추가로 스케일을 키우는 것을 보장한다. 우리는 노드에 걸쳐 0에 가까운 all-to-all 커뮤니케이션 오버헤드를 달성하면서도 여전히 fine-grained expert를 활용할 수 있다. 추가적으로 우리는 InfiniBand(IB)와 NVLink 대역폭을 최대한 활용하기 위해 효율적인 cross-node all-to-all communication 커널을 개발한다. 또한 메모리 사용량을 세밀하게 최적화 하여 비용이 많이 드는 tensor 병렬화 없이 DeepSeek-V3 학습을 가능하게 한다. 이러한 노력을 결합하여 우리는 매우 높은 학습 효율성을 달성했다.
pre-training 동안 우리는 14.8T 고품질의 다양한 토큰에 대해 DeepSeek-V3를 학습한다. pre-training 절차는 놀랍게도 안정적이다. 전체 학습 절차를 통해 우리는 복구 불가능한 loss spike를 마주하지 않았고 rollback 하지 않았다. 다음으로 우리는 DeepSeek-V3에 대해 two-stage context length 확장을 구성한다. 첫 단계에서 최대 context 길이는 32k로 확장되고, 두 번째 단계에서 이것은 추가로 128k로 확장된다. 이것 다음에 DeepSeek-V3의 기본 모델에 대해 Supervised Fine-Tuning(SFT)와 Reinforcement Learning(RL)을 포함하여 post-training을 구성한다. 이것은 인간 선호와 정렬하고 모델의 잠재성을 unlock 한다. post-training 단계 동안 우리는 DeekSeek-R1 시리즈 모델에서 reasoning 능력을 distill 하고 모델 정확성과 생성 길이 사이의 균형을 조심스럽게 조정한다.
우리는 포괄적인 벤치마크에 대해 DeepSeek-V3를 평가한다. 경제적 학습 비용에도 불구하고 포괄적인 평가는 DeepSeek-V3-Base 가 현재 사용 가능한 open-source 중 강력한 기본 모델임을 드러냄을 보인다. 특히 코드와 수학에서 뛰어나다. 이것의 채팅 버전 또한 다른 오픈 소스 모델을 능가하며 GPT-4o와 Claude-3.5-Sonnet을 포함하여 선두 closed 소스 모델과 비교할만한 성능을 달성한다.
마지막으로 우리는 표 1에 요약된 DeepSeek-V3의 경제적 학습 비용을 다시 강조한다. 이것은 우리의 최적화된 알고리즘, 프레임워크, 하드웨어의 co-design을 통해 달성된다. pre-training 단계 동안 DeepSeek-V3를 학습하는데 각 trillion 토큰 당 단지 180K H800 GPU 시간만 필요 했다. 즉 2048개 H800 GPU를 갖는 우리의 클러스터에서 3.7일 걸린다. 결론적으로 우리의 pre-training 단계는 두 달이 안 걸렸고 비용은 2664K GPU 시간이 걸렸다. context 길이 확장에 대해 119K GPU 시간과 post-training에 대해 5K GPU 시간을 결합하여 DeepSeek-V3 비용은 전체 학습에 대해 2.788M GPU 시간만 들었다. H800 GPU가 GPU 시간당 $2의 임대료라고 가정하면 우리의 전체 학습 비용은 단지 $5.576M이다. 여기서 주의할 점은 앞서 말한 비용은 단지 DeepSeek-V3의 공식적인 학습 비용만 포함한 것이다는 것이다. prior 연구나 아키텍쳐, 알고리즘 또는 데이터에 대한 ablation 실험과 관련한 비용은 제외했다.
우리의 주요 기여는 아래를 포함한다.
Architecture: 혁신적인 Load Balancing 전략과 학습 목적
DeepSeek-V2의 효율적인 아키텍쳐 위에 우리는 load balancing을 위해 auxiliary-loss-free 전략을 개척했다. 이것은 load balancing을 유도하는 과정에서 나타나는 성능 하락을 최소화한다.
우리는 Multi-Token Prediction(MTP) 목적을 조사하고 모델 성능에 이점이 있음을 증명했다. 이것은 또한 추론 가속을 위한 speculative decoding에도 사용될 수 있다.
Pre-Training: 극잔적인 학습 효율성을 향해
우리는 FP8 mixed precision 학습 프레임워크를 설계하고 극단적으로 큰 대규모 모델에 대한 FP8 학습의 실현가능성과 효율성을 처음으로 검증했다.
알고리즘, 프레임워크, 하드웨어에 대한 co-design을 통해 우리는 cross-node MoE 학습 내에서 발생하는 communication 병목을 극복하고 computation-communication overlap을 극대화했다. 이를 통해 학습 효율성을 매우 향상하고 학습 비용을 줄여서 추가적인 오버헤드 없이 모델 크기를 확장할 수 있다.
단 2.664M H800 GPU 시간만의 경제적 비용으로 우리는 DeepSeek-V3를 14.8T token에 대해 pre-training을 완료했고 현재 가장 강력한 오픈소스 기본 모델을 구축했다. pre-training 이후 후속 학습 단계는 0.1M GPU 시간만 필요했다.
Post-Training: DeepSeek-R1에서 Knowledge Distillation
우리는 long Chain-of-Thought(CoT) 모델, 구체적으로 DeepSeek R1 시리즈 모델의 하나에서 표준 LLM으로, 특별히 DeepSeek-V3으로 reasoning 능력을 distill하기 위한 혁신적인 방법을 도입했다. DeepSeek-V3에 R1의 verification과 reflection 패턴을 우아하게 통합하여 reasoning 성능의 획기적으로 개선 했다. 동시에 DeepSeek-V3의 출력 스타일과 길이에 대한 제어도 유지한다.
Summary of Core Evaluation Results
Knowledge: (1) MMLU, MMLU-Pro와 GPQA 같은 educational 벤치마크에서 DeepSeek-V3는 모든 다른 오픈 소스 모델을 능가했다. MMLU에서 88.5, MMLU-Pro에서 75.9, GQPA에서 59.1을 달성했다. 이 성능은 GPT-4o와 Claude-Sonnet-3.5와 같은 leading closed 소스 모델과 비교할만하고, 이 도메인에서 오픈 소스 모델과 closed 소스 모델 사이의 격차를 좁혔다. (2) factuality 벤치마크에 대해 DeepSeek-V3는 SimpleQA와 Chinese SimpleQA 모두에서 오픈 소스 모델 사이에서 압도적인 성능을 시연했다. 반면 영어 factual knowledge(SimpleQA)에서 GPT-4o와 Claude-Sonnet-3.5의 뒤를 이었다. Chinese factual knowledge(Chinese SimpleQA)에서 이러한 모델을 능가했다. Chinese factual Knowledge에서 강력함을 입증한다.
Code, Math and Reasoning: (1) DeepSeek-V3는 수하 관련된 벤치마크에서 모든 non-long-CoT 오픈 소스와 closed-source 모델 사이에서 최첨단 성능을 달성했다. 주목할만한 것은 MATH-500 같은 특정한 벤치마크에서 o1-preview를 능가했다는 것이다. 이것은 견고한 수학적 능력을 시연한다. (2) coding 관련 작업에서 DeepSeek-V3는 LiveCodeBench 같은 코딩 경쟁 벤치마크에 대해 최상위 성능 모델로 드러났고 이 도메인에서 선두 모델로써 자리를 확고히 했다. engineering 관련 작업에서 DeepSeek-V3이 Claude-Sonnet-3.5 보다 약간 아래 성능이지만, 여전히 모든 다른 모델을 능가했다. 매우 큰 격차로, 이것은 다양한 기술적 벤치마크에 걸쳐 경쟁력을 시연한다.
이 논문의 나머지 부분에서는, DeepSeek-V3 모델 아키텍쳐의 상세한 설명한다(섹션 2). 다음으로 계산 클러스터, 학습 프레임워크, FP8 학습을 지원, inference 배포 전략, 그리고 미래 하드웨어 설계에 대한 우리의 제안을 포괄하는 우리의 인프라구조를 소개하고(섹션 3), 다음으로 학습 데이터 구성, 하이퍼파라미터 설정, long-context extension 기술, 연관된 평가 및 분석을 포함한 pre-training 절차를 설명한다(섹션 4). 그 후에 Supervised Fine-Tuning(SFT), Reinforcement Learning(RL), 관련 평가 및 분석을 포함한 post-training을 설명한다(섹션 5). 마지막으로 결론에서 DeepSeek-V3의 현재 한계를 논의하고, 미래 연구를 위한 잠재적 방향을 제안한다(섹션 6).

2. Architecture

우리는 우선 DeepSeek-V3의 기본 아키텍쳐를 소개한다. 이것은 효율적인 inference를 위한 Multi-head Latent Attention(MLA)과 경제적인 학습을 위한 DeepSeekMoE가 특징이다. 그 다음 Multi-Token Prediction(MTP) 학습 목적을 소개한다. 이것은 우리가 평가 벤치마크에서 전체적인 성능을 강화하는 것을 관찰했다. 명시적으로 언급하지 않는 다른 마이너한 디테일에 대해 DeepSeek-V3은 DeepSeek-V2의 설정을 따른다.

2.1. Basic Architecture

DeepSeek-V3의 기본 아키텍쳐는 여전히 내부에 transformer 아키텍쳐를 갖는다. 효율적인 inference와 경제적인 학습을 위해 DeepSeek-V3는 또한 MLA와 DeepSeekMoE를 채택한다. 이것은 DeepSeek-V2에 의해 철저하게 검증되었다. DeepSeek-V2와 비교하여 차이는 auxiliary-loss-free load balancing 전략을 도입했다는 것이다. 이것은 load balance를 보장하려 할 때 발생하는 성능 하락을 완화하기 위한 것이다. DeepSeekMoE를 위해 추가적으로 그림 2는 DeepSeek-V3의 기본 아키텍쳐를 보인다. 그리고 우리는 이 섹션에서 MLA와 DeepSeekMoE를 간략히 검토한다.
MoE는 특정 입력에 대해 어떤 expert를 사용할지를 결정하는 gating 메커니즘이 핵심이고 이 gating 메커니즘이 결과적으로 특정 feature를 어떤 expert에게 학습시킬지까지 결정하는 역할을 한다. 따라서 feature를 고르게 expert에게 분산하도록 gating 메커니즘을 학습하는 것이 load balancing이 된다. 기존의 MoE 모델들은 auxiliary loss를 사용하여 load balancing을 처리했는데 DeepSeek-V3에서는 auxiliary loss free 전략으로 load balancing을 추구한다.
참고로 여기서 expert는 domain 별로 특정 task(수학, 코딩, 글쓰기 등)에 대한 expert를 의미하는게 아니라 모델 학습 과정에서 특정 유형의 특징을 학습하도록 구분된다. 즉 각 expert는 특정 feature를 학습하게 되며, 예컨대 이미지에 대해 expert 1은 이미지의 texture와 관련한 feature를 학습하고, expert 2는 이미지의 color와 관련된 feature를 학습하고, expert 3은 이미지의 shape과 관련한 feature를 학습하게 된다. 이 경우 어떤 expert는 보다 general한 feature를 학습하는 한편 어떤 expert는 특정 domain specific한 feature를 학습하게 된다.
MoE는 FFN이 계산량이 많기 때문에 일반적으로 FFN 레이어에서 구현되고, gating 메커니즘을 수행하는 부분을 router라고 한다.
위 이미지의 Transformer block에서 RMSNorm(Root Mean Square Normalization)은 제곱 평균의 제곱근인 RMS=1Ki=1Kxi2\text{RMS} = \sqrt{{1\over K} \sum_{i=1}^K x_i^2}로 normalization하는 것으로 선택적으로 scaling factor γ\gamma와 분모인 RMS가 00이 되지 않도록 추가되는 작은 값 ϵ\epsilon을 추가하여 아래처럼 계산된다.
xi=γ(xi1Ki=1Kxi2+ϵ)x_i' = \gamma\cdot \left({x_i \over \sqrt{{1\over K}\sum_{i=1}^K x_i^2}+\epsilon}\right)

2.1.1. Multi-Head Latent Attention

attention에 대해 DeepSeek-V3은 MLA 아키텍쳐를 도입한다. dd를 임베딩 차원이라 하고, nhn_h를 attention head의 수라고 표기하고, dhd_h를 head 당 차원이라 표기하고, htRdh_t \in \mathbb{R}^d를 주어진 attention 레이어에서 tt-번째 토큰에 대한 attention 입력이라 표기하자(이전 layer의 출력에 해당). MLA의 핵심은 inference 동안 Key-Value(KV) 캐시를 줄이기 위한 attention keys와 values에 대한 low-rank joint compression이다.
ctKV=WDKVht[kt,1C;kt,2C;...;kt,nhC]=ktC=WUKctKVktR=RoPE(WKRht)kt,i=[kt,iC;ktR][vt,1C;vt,2C;...;vt,nhC]=vtC=WUVctKV\begin{align} {\mathbf{c}_t^{KV}} &= W^{DKV}\mathbf{h}_t \\ [\mathbf{k}_{t,1}^C;\mathbf{k}_{t,2}^C;...;\mathbf{k}_{t,n_h}^C] &= \mathbf{k}_t^C = W^{UK}\mathbf{c}_t^{KV} \\ \mathbf{k}_t^{R} &= \text{RoPE}(W^{KR}\mathbf{h}_t) \\ \mathbf{k}_{t,i} &= [\mathbf{k}_{t,i}^C;\mathbf{k}_t^R] \\ [\mathbf{v}_{t,1}^C;\mathbf{v}_{t,2}^C;...;\mathbf{v}_{t,n_h}^C] &= \mathbf{v}_t^C = W^{UV}\mathbf{c}_t^{KV} \end{align}
여기서 ctKVRdc\mathbf{c}_t^{KV} \in \mathbb{R}^{d_c}는 keys와 values에 대한 압축된 latent 벡터이고, dc (dhnh)d_c \ (\ll d_hn_h)는 KV 압축 차원을 나타내고, WDKVRdc×dW^{DKV} \in \mathbb{R}^{d_c \times d}는 down-projection 행렬이고, WUK,WUVRdhnh×dcW^{UK}, W^{UV} \in \mathbb{R}^{d_hn_h\times d_c}는 각각 keys와 values에 대한 up-projection 행렬이다. WKRRdhR×dW^{KR} \in \mathbb{R}^{d_h^R \times d}는 Rotary Positional Embedding(RoPE)를 적용하는 decoupled key를 생성하는데 사용되는 행렬이다. RoPE()\text{RoPE}(\cdot)는 RoPE 행렬에 적용되는 연산을 표기하고 [;][\cdot;\cdot]은 concatenation을 표기한다. MLA에 대한 주목할 점은 생성하는 동안 오직 파란색 박스(현재 latex에서는 box 표기가 안 됨. 식 (1)과 (3)의 ctKV\mathbf{c}_t^{KV}ktR\mathbf{k}_t^{R}를 의미함)의 벡터(즉 ctKV\mathbf{c}_t^{KV}ktR\mathbf{k}_t^{R})만 캐시가 필요하다는 것이다. 이것은 표준 Multi-Head Attention(MHA)와 비교할만한 성능을 내면서도 KV 캐시를 매우 줄이는 결과를 만든다.
기존의 MHA에서 KV cache는 이전 step에서 계산된 Key, Value 값(출력 값)에 현재 step의 입력을 concatenate해서 사용되는데, 이 경우 step이 진행됨에 따라 KV 캐시에 저장해야 하는 값이 커지므로, DeepSeek 연구자들은 KV 캐시를 압축해서 저장하는 방식을 사용한다. 여기서 WDKVW^{DKV}를 이용해서 현재 레이어의 입력(이전 레이어의 출력) ht\mathbf{h}_t을 압축하여 ctKV\mathbf{c}_t^{KV}를 생성한 다음 그것을 각각 WUKW^{UK}WUVW^{UV}를 이용해서 KV 캐시를 복원한다.
이때 WUVW^{UV}를 통해 복원된 vtC\mathbf{v}_t^C는 기존의 Value Cache와 동일하게 사용되지만, WUKW^{UK}를 통해 복원한 ktC\mathbf{k}_t^C는 Key Cache로 그대로 사용하지 않고 추가로 입력 ht\mathbf{h}_t에 대해 별도의 행렬 WKRW^{KR}을 곱한 다음 Rotary Positional Embedding(RoPE)를 적용해 position 정보를 담는 ktR\mathbf{k}_t^R을 구한 다음 그 둘을 index 별로 연결하여 [kt,iC;ktR]=kt,i[\mathbf{k}_{t,i}^C;\mathbf{k}_t^R] = \mathbf{k}_{t,i}를 생성하고 이것을 최종적으로 Key Cache로 사용한다.
KV Cache를 저차원으로 압축했다가 복원하기 때문에 압축된 key, value에 대해 position 정보를 부여하면 위치 정보가 손실될 수 있으므로, 압축했다가 복원하는 ktC\mathbf{k}_t^CvtC\mathbf{v}_t^C는 content 정보를 유지하는 역할만 하고, 추가로 현재 입력 ht\mathbf{h}_t에 대해 별도의 행렬 WKRW^{KR}을 곱한 다음 RoPE를 적용한 ktR\mathbf{k}_t^R에 위치 정보를 반영한 다음 그 둘을 concatenate해서 Key Cache가 위치 정보를 가질 수 있도록 한다.
참고로 Value는 Query와 Key의 유사도 계산 후에 선택되는 content에 해당하므로 position 정보를 부여할 필요가 없고 RoPE는 Query와 Key에 대해서만 수행한다. RoPE에 대해서는 아래 참조
아래의 query에 대한 설명은 key에 대한 내용과 유사하다. query는 KV 캐시 같은 것이 없지만 key와 마찬가지로 압축했다가 복원하는 방식을 사용하는데, 이것은 activation 메모리를 절약시켜준다고 한다.
이 Multi-Head Latent Attention은 DeepSeek-V2에서 사용된 방식이며 그때 철저히 검증되었다고 주장함.
attention query에 대해 우리는 또한 low-rank 압축을 수행한다. 이것은 학습하는 동안 activation 메모리를 줄일 수 있다.
ctQ=WDQht[qt,1C;qt,2C;...;qt,nhC]=qtC=WUQctQ[qt,1R;qt,2R;...;qt,nhR]=qtR=RoPE(WQRctQ)qt,i=[qt,iC;qt,iR]\begin{align} \mathbf{c}_t^Q &= W^{DQ}\mathbf{h}_t \\ [\mathbf{q}_{t,1}^C;\mathbf{q}_{t,2}^C;...;\mathbf{q}_{t,n_h}^C] &= \mathbf{q}_t^C = W^{UQ}\mathbf{c}_t^Q \\ [\mathbf{q}_{t,1}^R;\mathbf{q}_{t,2}^R;...;\mathbf{q}_{t,n_h}^R] &= \mathbf{q}_t^R =\text{RoPE}(W^{QR}\mathbf{c}_t^Q) \\ \mathbf{q}_{t,i} &= [\mathbf{q}_{t,i}^C;\mathbf{q}_{t,i}^R] \end{align}
여기서 ctQRdc\mathbf{c}_t^Q \in \mathbb{R}^{d_c'}는 query에 대해 압축된 latent 벡터이고, dc (dhnh)d_c' \ (\ll d_hn_h)는 query 압축 차원을 표기한다. WDQRdc×d,WUQRdhnh×dcW^{DQ} \in \mathbb{R}^{d_c' \times d}, W^{UQ} \in \mathbb{R}^{d_hn_h \times d_c'}는 각각 query에 대한 down-projection과 up-projection이고 WQRRdhRnh×dcW^{QR} \in \mathbb{R}^{d_h^Rn_h \times d_c'}는 RoPE를 나르는 decoupled query를 생성하는 행렬이다.(식 (8)에서 RoPE에 입력을 사용한 key와 달리 query에서는 압축된 ctQ\mathbf{c}_t^Q가 사용되고 있음에 주의)
결론적으로 attention query (qt,i\mathbf{q}_{t,i}), keys (kj,i\mathbf{k}_{j,i}), values(vj,iC\mathbf{v}_{j,i}^C)는 결합되어 최종적으로 출력 ut\mathbf{u}_{t}를 산출한다.
ot,i=j=1tSoftmaxj(qt,ikj,idh+dhR)vj,iCut=WO[ot,1;ot,2;...;ot,nh]\begin{align} \mathbf{o}_{t,i} &= \sum_{j=1}^t \text{Softmax}_j \left({\mathbf{q}_{t,i}^\top\mathbf{k}_{j,i} \over \sqrt{d_h + d_h^R}} \right)\mathbf{v}_{j,i'}^C \\ \mathbf{u}_t &= W^O[\mathbf{o}_{t,1};\mathbf{o}_{t,2};...;\mathbf{o}_{t,n_h}] \end{align}
여기서 WORd×dhnhW^O \in \mathbb{R}^{d\times d_h n_h}는 출력 projection 행렬을 표기한다.

2.1.2. DeepSeek MoE with Auxiliary-Loss-Free Load Balancing

Basic Architecture of DeepSeekMoE. Feed-Forward Networks(FFNs)를 위해 DeepSeek-V3은 DeepSeekMoE 아키텍쳐를 활용한다. GShard 같은 전통적인 MoE 아키텍쳐와 비교하여 DeepSeekMoE는 미세 조정된 expert를 사용하고 일부 expert를 shared로 고립한다. ut\mathbf{u}_ttt-번째 토큰의 FFN 입력이라 표기하자. 우리는 FFN의 출력 ht\mathbf{h}_t'를 다음과 같이 계산할 수 있다.
ht=ut+i=1NsFFNi(s)(ut)+i=1Nrgi,tFFNi(r)(ut)gi,t=gi,tj=1Nrgj,tgi,t={si,tsi,tTopk({sj,t1jNr},Kr)0otherwisesi,t=Sigmoid(utei)\begin{align} \mathbf{h}_t' &= \mathbf{u}_t + \sum_{i=1}^{N_s} \text{FFN}_i^{(s)}(\mathbf{u}_t) + \sum_{i=1}^{N_r} g_{i,t}\text{FFN}_i^{(r)}(\mathbf{u}_t) \\ g_{i,t} &= {g_{i,t}' \over \sum_{j=1}^{N_r} g_{j,t}'} \\ g_{i,t}' &= \begin{cases} s_{i,t} & s_{i,t} \in \text{Topk}(\{s_{j,t}|1 \le j \le N_r \}, K_r) \\ 0 & \text{otherwise} \end{cases} \\ s_{i,t} &= \text{Sigmoid}(\mathbf{u}_t^\top \mathbf{e}_i) \end{align}
여기서 NsN_sNrN_r은 shared expert와 routed expert의 수를 각각 표기한다. FFNi(s)()\text{FFN}_i^{(s)}(\cdot)FFNi(r)()\text{FFN}_i^{(r)}(\cdot)ii-번째 shared expert와 ii-번째 routed expert로 각각 표기한다. KrK_r은 활성화된 routed expert의 수를 표기하고, gi,tg_{i,t}ii-번째 expert에 대한 gating value이다. si,ts_{i,t}는 token-to-expert affinity이다. ei\mathbf{e}_iii-번째 routed expert의 centroid 벡터이고 Topk(,K)\text{Topk}(\cdot, K)tt-번째 토큰과 모든 routed expert에 대해 계산된 affinity score 사이에서 KK개 가장 높은 score를 포함하는 집합이다. DeepSeek-V2와 약간 차이는 DeepSeek-3는 affinity score를 계산하기 위해 sigmoid 함수를 사용하고 모든 선택된 affinity score 사이에서 normalization을 적용하여 gating value를 생성한다는 것이다.
식 (12)는 residual 형태로 입력 ut\mathbf{u}_t를 그대로 출력하는 부분과 입력을 shared expert로로 처리하는 부분 i=1NsFFNi(s)(ut)\sum_{i=1}^{N_s} \text{FFN}_i^{(s)}(\mathbf{u}_t)과 일반적인 MoE의 expert인 routed expert i=1Nrgi,tFFNi(r)(ut)\sum_{i=1}^{N_r} g_{i,t} \text{FFN}_i^{(r)}(\mathbf{u}_t)로 구분된다. 여기서 gi,tg_{i,t}가 gating 메커니즘에 해당하며, gating 메커니즘에서는 입력 ut\mathbf{u}_t과 각 expert의 학습 가능한 임베딩 벡터 et\mathbf{e}_t와의 내적을 통해 expert가 현재 입력에 얼마나 적합한지를 계산하며(sigmoid는 0-1로 정규화하는 용도) 그렇게 구해진 값을 이용하여 Top-K개(K는 사용자가 정하는 하이퍼파라미터이다) expert 가중치를 구하고 (정규화한 다음) 해당 expert에 대해 forward를 수행한 결과에 해당 가중치를 곱해 출력을 만든다.
여기서 사용된 MoE 방식은 항상 활성화 되는 shared expert를 사용했다는 점을 제외하면 기존 방식과 동일하지만, DeepSeek는 shared expert를 통해 shared expert가 모든 입력에서 공통적으로 필요한 정보를 학습하고 나머지 task-specific한 정보는 routed expert가 학습하도록 해서 MoE 모델의 학습 안정성을 높이고 특정 expert가 선택되지 않아 학습이 잘 안되는 문제를 방지한다.
MoE에 Shared Expert를 사용하는 방식은 DeepSeek-V2에서 도입되었음
Auxiliary-Loss-Free Load Balancing. MoE 모델에 대해 unbalanced expert load는 routing 붕괴를 이끌 수 있고 expert 병렬화를 사용하는 시나리오에서 계산 효율성을 감소시킬 수 있다. 관례적인 해결책은 unbalanced load를 피하기 위해 대개 auxiliary loss에 의존하는 것이다. 그러나 너무 큰 auxiliary loss는 모델 성능을 손상 시킬 수 있다. 우리는 auxiliary-loss-free load balancing 전략을 개척하여 load balance를 보장한다. 구체적으로 우리는 각 expert에 대해 바이어스 항 bib_i를 도입하고 해당하는 affinity score si,ts_{i,t}에 추가하여 top-KK routing을 결정한다.
gi,t={si,tsi,t+biTopk({sj,t+bj1jNr},Kr)0otherwise\begin{align} g_{i,t}' = \begin{cases} s_{i,t} & s_{i,t} + b_i \in \text{Topk}(\{s_{j,t} + b_j|1 \le j \le N_r\}, K_r)\\ 0 & \text{otherwise} \end{cases} \end{align}
바이어스 항이 오직 routing에 대해서만 사용한다는 점에 유의하라. FFN 출력에 곱해지는 gating value는 여전히 원래의 affinity score si,ts_{i,t}에서 유도된다. 학습 하는 동안 우리는 각 학습 단계의 전체 배치에 대해 expert load를 모니터링한다. 각 단계의 끝에서 우리는 만일 해당하는 expert가 overloaded이면 바이어스 항이 γ\gamma에 의해 감소할 수 있고 해당하는 expert가 underloaded이면 γ\gamma에 의해 증가될 수 있다. 여기서 γ\gamma는 bias 업데이트 속도라고 부르는 하이퍼파라미터이다. 동적 조정을 통해 DeepSeek-V3은 학습하는 동안 balanced expert load를 유지하고 순수 auxiliary loss를 통해 load balance를 장려하는 모델 보다 더 나은 성능을 달성한다.
실제로 gating 메커니즘에 적용된 식은 (14)가 아니라 expert별로 bias 항 bib_i이 추가된 (16)이다. 여기서 bias 항 bib_i은 학습 가능한 파라미터이며 expert에 과부하가 bias를 감소시키고 expert가 과소부하가 걸리면 bias를 증가시키도록 학습된다. 이를 통해 별도의 auxiliary loss를 추가하지 않고도 expert가 고르게 선택될 수 있게 한다. auxiliary loss는 모델 성능을 손상시킬 수 있기 때문에 위 설정을 통해 DeepSeek는 load balancing을 처리하면서 더 나은 성능을 달성할 수 있었다.
다만 여기서는 expert가 과도하게 활성화되거나 활성화가 잘 안 될 때를 구체적으로 어떻게 구분하는지에 대해서는 설명이 되어 있지 않고, 실제 코드를 봐도 bias에 추가되는 γ\gamma는 나와 있지 않다.
MoE의 Load Balancing에 Auxiliary-Loss-Free 를 도입한 것은 DeepSeek-V3에서 추가되었다.
Complementary Sequence-Wise Auxiliary Loss. DeepSeek-V3이 load balance를 위해 auxiliary-loss-free 전략에 주로 의존함에도, 임의의 단일 시퀀스 내에서 극단적 불균형을 방지하기 위해 우리는 또한 보완적인 sequence-wise balance loss를 활용한다.
Lbal=αi=1NrfiPifi=NrKrTt=1T1 (si,tTopk({sj,t1jNr},Kr)si,t=si,tj=1Nrsj,tPi=1Tt=1Ts1,t\begin{align}\mathcal{L}_\text{bal} &= \alpha \sum_{i=1}^{N_r} f_i P_i \\ f_i &= {N_r\over K_r T}\sum_{t=1}^T \mathbf{1} \ (s_{i,t} \in \text{Topk}(\{s_{j,t}|1 \le j \le N_r\}, K_r) \\ s_{i,t}' &= {s_{i,t} \over \sum_{j=1}^{N_r} s_{j,t}} \\ P_i &= {1\over T} \sum_{t=1}^T s_{1,t}' \end{align}
여기서 balance factor α\alpha는 하이퍼파라미터로 DeepSeek-V3에서 극단적으로 작은 값을 할당된다. 1()\mathbb{1}(\cdot)는 indicator function을 나타내고, TT는 시퀀스에서 토큰의 수를 나타낸다. sequence-wise balance loss는 균형을 위해 각 시퀀스에서 expert load를 장려한다.
위 식 (18)에서 1()\mathbb{1}(\cdot)는 내부의 함수가 만족될 때 11을 반환하고 그렇지 않으면 00을 반환하는 함수로 내부의 식이 TopK를 만족하는지 여부에 따라 1이나 0을 반환한다. 즉 1 (si,tTopk({sj,t1jNr},Kr)\mathbf{1} \ (s_{i,t} \in \text{Topk}(\{s_{j,t}|1 \le j \le N_r\}, K_r)는 expert ii가 토큰 tt에서 TopK에 몇 개 들어갔는지를 반환한다.
DeepSeek는 총 3가지 loss를 가지며, 일반적인 cross-entropy loss에 sequence-wise balance loss와 아래 나오는 multi-token prediction loss로 구성된다. 즉 전체 loss는 아래와 같이 구성된다.
Ltotal=LCE+λLMTP+αLbal\mathcal{L}_\text{total} = \mathcal{L}_\text{CE} + \lambda\mathcal{L}_\text{MTP} + \alpha\mathcal{L}_\text{bal}
Node-Limited Routing. DeepSeek-V2에 의해 사용된 device-limited routing과 같이 DeepSeek-V3 또한 제한된 routing 메커니즘을 사용하여 학습하는 동안 커뮤니케이션 비용을 제한한다. 즉, 우리는 각 토큰이 최대 MM개 노드를 보낼 수 있게 한다. 이것은 각 노드에서 분포된 expert의 가장 높은 KrM{K_r \over M} affinity score의 합을 따라 선택된다. 이 제약 하에, 우리의 MoE 학습 프레임워크는 full computation-communication overlap에 가깝게 달성한다.
MoE에서 각 expert는 여러 GPU에 걸쳐 분산될 수 있다. 즉 하나의 GPU가 모든 expert를 갖는게 아니라 특정 GPU들이 특정 expert를 담당하도록 설정된다. 따라서 모든 GPU가 expert에 접근할 수 있도록 설정하여 all-to-all 커뮤니케이션을 구성한다. 그러나 이 방식은 커뮤니케이션 비용이 매우 크고, GPU 클러스터가 커질수록 비효율적이 된다. 이를 해결하기 위해 DeepSeek-V3에서는 각 토큰이 최대 MM개의 GPU 노드로만 데이터를 보낼 수 있게 제한한다.
No Token-Dropping. 효율적인 load balancing 전략 때문에, DeepSeek-V3은 전체 학습하는 동안 좋은 load balance를 유지한다. 그러므로 DeepSeek-V3은 학습하는 동안 임의의 토큰을 drop하지 않는다. 또한 inference load balance를 보장하기 위해, 특정한 배포 전략을 구현한다. 따라서 DeepSeek-V3은 inference 동안 token을 drop하지 않는다.
기존 MoE 모델에서 Expert Load Balancing이 잘못 조정되면 일부 expert에 너무 많은 토큰이 할당되어 특정 GPU에 과부하가 걸리기 때문에, GPU를 보호하기 위해 일부 토큰을 drop하는 기법을 사용한다. DeepSeek-V3은 효율적인 load balancing 전략을 바탕으로 이런 token drop 기법을 사용하지 않을 수 있었다고 주장 함.

2.2. Multi-Token Prediction

우리는 Gloeckle et al(2024)에 의해 영감을 받아 DeepSeek-V3을 위해 Multi-Token Prediction(MTP) 목적을 조사하고 설정했다. 이것은 각 position의 prediction 범위를 multiple future token으로 확장한다. 한편으로는 MTP 목적은 학습 신호를 densifies하여 데이터 효율성을 개선할 수 있다. 다른 한편으로 MTP는 모델이 future token의 예측을 위해 representation을 pre-plan하도록 허용한다. 그림 3은 MTP의 우리의 구현을 보인다. Gloeckle et al은 독립적인 출력 헤드를 사용하여 병렬적으로 DD개 추가 토큰을 예측했는데, 우리는 순차적으로 추가 토큰을 예측하고 각 prediction depth에서 완전한 causal 체인을 유지한다. 우리는 이 섹션에서 MTP 구현의 상세를 소개한다.
MTP Modules. 구체적으로 우리의 MTP 구현은 DD개 시퀀스 모듈을 사용하여 DD개의 추가 토큰을 예측한다. kk-번째 MTP 모듈은 공유된 임베딩 레이어 Emb()\text{Emb}(\cdot), 공유된 출력 헤드 OutHead()\text{OutHead}(\cdot), Transformer block TRMk()\text{TRM}_k(\cdot), projection matrix MkRd×2dM_k \in \mathbb{R}^{d \times 2d}로 구성된다. ii-번째 입력 토큰 tit_i에 대해, kk-번째 prediction depth에서 우리는 우선 (k1)(k-1)-번째 depth에서 ii-번째 representation hik1\mathbf{h}_i^{k-1}(i+k)(i+k)-번째 토큰의 임베딩 Emb(ti+k)Rd\text{Emb}(t_{i+k}) \in \mathbb{R}^d 를 결합하여 linear projection한다.
hik=Mk[RMSNorm(hik1);RMSNorm(Emb(ti+k))]\begin{align}\mathbf{h}_i'^k = M_k[\text{RMSNorm}(\mathbf{h}_i^{k-1}); \text{RMSNorm}(\text{Emb}(t_{i+k}))] \end{align}
여기서 [;][\cdot ; \cdot]은 concatenate를 표기한다. 특히 k=1k=1일 때, hik1\mathbf{h}_i^{k-1}은 메인 모델에 의해 주어진 representation을 나타낸다. 주목할 점은 각 MTP 모듈의 임베딩 레이어가 메인 모델과 공유된다는 것이다. 결합된 hik\mathbf{h}_i'^kkk-번째 depth의 Transformer 블록의 입력으로 제공되어 현재 depth에서 출력 representation hik\mathbf{h}_i^k을 생성한다.
h1:Tkk=TRMk(h1:Tkk)\begin{align} \mathbf{h}_{1:T-k}^k = \text{TRM}_k(\mathbf{h}_{1:T-k}'^k) \end{align}
여기서 TT는 입력 시퀀스 길이를 나타내고, i:ji:j는 slicing 연산을 나타낸다(left와 right 경계 포함). 마지막으로 hik\mathbf{h}_i^k를 입력으로 취하여 공유된 출력 헤드는 kk-번째 추가 prediction token Pi+1+kkRVP_{i+1+k}^k \in \mathbb{R}^V에 대한 확률 분포를 계산한다. 여기서 VV는 어휘 크기이다.
Pi+k+1k=OutHead(hik)\begin{align} P_{i+k+1}^k = \text{OutHead}(\mathbf{h}_i^k) \end{align}
출력 헤드 OutHead()\text{OutHead}(\cdot)는 representation을 선형으로 logits으로 매핑한 다음 softmax()\text{softmax}(\cdot)을 적용하여 kk-번째 추가 토큰의 예측 확률을 계산한다. 또한 각 MTP 모듈의 출력 헤드는 메인 모델과 공유된다. 우리의 predictions causal chain을 유지하는 원칙은 EAGLE의 것과 유사하지만, 그것의 primary 목적은 speculative decoding인 반면 우리는 학습을 개선하기 위해 MTP를 활용한다.
Multi-Token Prediction은 tt-번째 입력에 대해 Main Model만 이용하여 tt-번째 출력 1개만 예측하는 것이 아니라. DD개의 MTP 모듈을 추가하여 t+1,t+2,...,t+Dt+1, t+2,..., t+D번째까지 예측하는 것을 말한다.
이를 위해 일반적인 Transformer decoder와 동일한 main model에서 현재 입력에 대한 출력을 생성하면, 다른 구성을 가진 MTP 모듈에서(모듈 구조는 그림 3 참조) 해당 출력을 이용하여 다음 출력을 예측하고, 그 출력을 그 다음 MTP 모듈에서 받아 다시 그 다음 출력을 예측하는 것을 DD번째 모듈까지 반복한다.
MTP 모듈은 실제 정답 token을 입력으로 받아야 하기 때문에 정답 토큰이 주어지는 학습 단계에서만 사용되며, inference에서는 사용되지 않는다. inference에서는 main model만 사용됨
여기서 각각의 MTP 모듈은 각각 loss를 적용받지만, embedding layer와 output head, transformer block은 main model의 것과 동일한 것을 사용하기 때문에 MTP 모듈의 역전파를 통해 embedding layer와 output head, transformer block도 학습이 이루어진다.
식(21)을 보면 MTP 모듈의 입력은 Main 모델의 출력 또는 이전 MTP 모듈의 출력(Output Head를 통과시키기 전의 transformer의 출력)에 해당 시점의 정답 토큰에 대해 이전 모듈의 출력은 RMSNorm을 통과시키고 정답 토큰은 main model의 embedding layer를 통과시킨 후 concatenate하고, 그 다음 linear projection해서 transformer block의 입력으로 만든다. 해당 입력을 transformer block에 통과시켜 출력을 얻은 후에, 해당 출력은 다음 MTP 모듈의 입력으로 쓰이고, 그 출력을 출력 head에 통과 시켜 최종 예측을 생성한 다음 정답과의 loss 계산를 계산하여 역전파 한다.
MTP를 처음 제안했던 연구자들은 이 MTP 모듈을 병렬적으로 수행했었는데, DeepSeek에서는 이것을 순차적으로 처리하여 causal chain을 유지한다.
MTP Training Objective. 각 prediction depth에 대해 우리는 cross-entropy loss LMTPk\mathcal{L}_\text{MTP}^k를 계산한다.
LMTPk=CrossEntropy(p2+k:T+1k,t2+k:T+1)=1Ti=2+kT+1logPik[ti]\begin{align} \mathcal{L}_\text{MTP}^k = \text{CrossEntropy}(p_{2+k:T+1}^k, t_{2+k:T+1}) = -{1\over T} \sum_{i=2+k}^{T+1} \log P_i^k[t_i] \end{align}
여기서 TT는 입력 시퀀스 길이를 나타내고, tit_iii-번째 position에서 ground-truth token을 표기하고 Pik[ti]P_i^k[t_i]kk-번째 MTP 모듈이 예측한 tit_i의 확률을 나타낸다. 마지막으로 우리는 모든 depth에 걸쳐 MTP loss의 평균을 계산하고 가중치 factor λ\lambda를 곱해 전체 MTP loss LMTP\mathcal{L}_\text{MTP}를 얻는다. 이것은 DeepSeek-V3의 추가적인 학습 목적으로 제공된다.
LMTP=λDk=1DLMTPk\begin{align} \mathcal{L}_\text{MTP} = {\lambda\over D} \sum_{k=1}^D \mathcal{L}_\text{MTP}^k \end{align}
MTP 모듈의 loss에 대해 가중치 factor λ\lambda를 적용하고, 전체 MTP loss에 대해 평균화한다.
MTP in Infernece. 우리의 MTP 전략은 주로 메인 모델의 성능을 개선하는데 초점을 맞춘다. 따라서 inference하는 동안 MTP 모듈을 직접 폐기하고 메인 모델이 독립적으로 정상적으로 작동하도록 유지할 수 있다. 게다가 우리는 또한 이 MTP 모듈을 generation latency를 추가로 개선하기 위해 speculative decoding에 대해 재활용할 수 있다.

3. Infrastructures

3.1. Compute Clusters

DeepSeek-V3은 2048개의 NVIDIA H800 GPU로 설치된 클러스터에서 학습됐다. H800 클러스터에서 각 노드는 8개 GPU를 포함하며, NVLink와 NVSwitch에 의해 연결된다. 다른 노드 간 커뮤니케이션은 InfiniBand(IB) interconnect를 활용한다.

3.2. Training Framework

DeepSeek-V3의 학습은 HAI-LLM 프레임워크에 의해 지원된다. 이것은 효율적이고 lightweight 학습 프레임워크로 우리의 엔지니어에 의해 바닥에서부터 수작업으로 만들어졌다. 전체적으로 DeepSeek-3는 16-way Pipeline Parallelism(PP)와 8개 노드를 spanning한 64-way Expert Parallelism(EP), ZeRO-1 Data Parallelism(DP)를 적용한다.
DeepSeek-V3의 효율적인 학습을 실현하는 측면에서 우리는 정밀한 엔지니어링 최적화를 구현한다. 우선 우리는 효율적인 파이프라인 병렬화를 위해 DualPipe 알고리즘을 설계한다. 기존의 PP 방법과 비교하여, DualPipe는 더 적은 pipeline bubble을 갖고, forward와 backward computation과 communication phase를 overlap하여 cross-node expert parallelism에 의해 발생하는 높은 communication 오버헤드의 도전을 해결한다. 두번째로 우리는 효율적인 cross-node all-to-all communication 커널을 개발하여 IB와 NVLink bandwidth를 fully 활용하면서도, communication을 담당하는 Streaming Multiprocessors(SMs)를 최소화한다. 마지막으로 학습하는 동안 메모리 사용량을 세심하게 최적화하여 값비싼 Tensor Parallelism(TP)를 사용하는 것 없이도 DeepSeek-V3를 학습할 수 있게 한다.
NV Link와 InfiniBand(IB)는 모두 GPU간 데이터 통신과 관련한 기술이며, NV Link는 한 대의 서버 내에서 여러 GPU 간의 통신을 위한 기술이고, IB는 여러 서버 간 통신을 위한 기술이다. NV Link는 엔비디아의 독자적인 기술이고, IB는 Mellanox에서 개발됐지만 현재는 엔비디아가 소유하고 있는 기술이다. NV Link는 엔비디아 GPU에서만 사용 가능하지만 IB는 다른 회사 GPU에서도 활용될 수 있다.
MoE 구조에서 각 expert를 여러 GPU에 분산하여 학습을 수행하는데, 이와 유사하게 self-attention을 여러 gpu에 나누어 병렬처리할 수 있고, 이것을 Tensor Parallelism이라고 한다. DeepSeek에서 Tensor Parallelism을 사용하지 않았다고 한 것은 해당 연산을 단일 GPU에서 수행했다는 의미이다. 대신 DeepSeek에서는 Pipeline Parallelism과 Expert Parallelism(MoE 병렬화)만 수행함.
pipeline bubble은 아래 그림 5에서 보이는 GPU가 작업을 수행하지 않고 놀고 있는 부분을 의미한다. sequence 모델 특성상 앞선 GPU의 결과가 나와야 뒤의 GPU가 연산을 수행하기 때문에, 연산을 기다리는 동안 GPU가 놀게 되고, 그것을 pipeline bubble이라고 함.

3.2.1. Dual Pipe and Computation-Communication Overlap

DeepSeek-V3에서 cross-node expert parallelism은 communication 오버헤드를 초래하며, computation-to-communication 비율이 약 1:1로 비효율적이다. 이를 해결하기 위해, 우리는 DualPipe라고 부르는 혁신적인 파이프라인 알고리즘을 설계한다. 이것은 forward와 backward computation-communication 단계를 효율적으로 overlapping하여 모델 학습을 가속하고 pipeline 버블을 줄인다.
DualPipe의 핵심 아이디어는 독립적인 forward와 backward chunk의 내에서 computation과 communication을 overlap 하는 것이다. 구체적으로 우리는 각 chunk를 4개 컴포넌트로 나눈다. attention, all-to-all dispatch, MLP, all-to-all combine. 특히 backward chuck에 대해 추가로 ZeroBubble과 유사하게 attention과 MLP를 입력에 대한 backward와 가중치에 대한 backward로 분리한다. 게다가 우리는 PP communication 컴포넌트를 갖는다. 그림 4에 그려진대로, forward와 backward chunk의 쌍 내에서 이러한 컴포넌트를 재배열하고 communication vs computation에 전담된 GPU SMs의 비율을 manually 조정한다. 이러한 overlapping 전략으로 우리는 all-to-all과 PP communication이 실행하는 동안 완전히 숨겨질 수 있도록 보장한다.
여기서 chunk는 계산이 이루어지는 단위를 의미함. forward의 계산 단계를 attention/ all-to-all dispatch(MoE 라우팅)/ MLP/ all-to-all combine(MoE 출력 결합)으로 나누고, 이렇게 나눠진 단계에 따라 backward에서는 동일한 단계를 역방향으로 수행함. 여기서 attention과 mlp는 computation 단계이고, all-to-all dispatch와 all-to-all combine은 GPU간 communication 단계이다. 실제 GPU에서 병목은 계산이 아니라 통신이기 때문에 DeepSeek에서는 계산과 통신 단계로 1:1로 만들어서 overlap이 가능하게 하고 scheduling 하여 pipeline 버블을 최소화할 수 있었다고 함.
참고로 Pipeline Parallelism(PP) Communication Component는 여러 GPU 간에 데이터를 전달하는 역할을 수행하는 컴포넌트이고 DeepSeek에서는 DualPipe에서 GPU 간 데이터를 효율적으로 전달하고 연산과 통신을 동시에 수행하여 속도를 극대화하는 역할을 한다.
효율적인 overlapping 전략에 의해 full DualPipe Scheduling은 그림 5에 그려진 것과 같다. 이것은 양방향 파이프라인 스케쥴을 활용한다. 이것은 파이프라인의 양쪽 끝에서 마이크로 배치를 동시에 공급하며, 상당 부분의 커뮤니케이션이 fully overlapped 될 수 있다. 이것은 또한 모델이 더 확장되더라도 computation-to-communication 비율을 일정하게 유지하는 한 여전히 노드 간 fine-grained expert를 활용하면서 all-to-all communication overhead를 거의 0에 가깝게 줄일 수 있다.
게다가 DualPipe는 heavy communication 부담이 없는 더 일반적인 시나리오에서조차, 여전히 효율적이다. Table 2에서 다양한 PP 방법 간의 pipeline 버블과 메모리 사용량을 비교한다. 표에서 보이는대로, DualPipe는 ZB1P와 1F1B와 비교하여 상당히 pipeline 버블을 감소하면서도 활성화 메모리 사용량은 1PP{1\over PP}만 증가시킨다. DualPipe는 모델 파라미터의 두 사본으로 유지해야 하지만, 우리가 학습하는 동안 큰 EP 크기를 사용하므로 메모리 계산을 크게 증가시키지 않는다. Chimera와 비교하여 DualPipe는 pipeline stage와 micro-batch 크기가 2의 배수로 나누어지기만 하면 되며, micro-batch를 pipeline stage 크기로 나누어야 하는 추가적인 제약은 없다. 게다가 DualPipe에서는 마이크로 배치 수가 증가하더라도 버블 또는 활성화 메모리 사용량이 증가하지 않는다.

3.2.2. Efficient Implementation of Cross-Node All-to-All Communication

DualPipe의 상당한 계산적 성능을 보장하는 측면에서, 우리는 효율적인 cross-node all-to-all 커뮤니케이션 커널(dispatching과 combining을 포함)을 커스터마이즈하여 커뮤니케이션에 전담된 SMs의 수를 줄인다. 이 커널의 구현은 MoE gating 알고리즘과 우리의 클러스터의 네트워크 topology와 함께 고려하여 설계되었다. 구체적으로 우리의 클러스터에서 cross-node GPU는 IB을 통해 완전히 interconnected이고, intra-node 커뮤니케이션은 NVLink를 통해 제어된다. NVLink는 160GB/s의 대역폭을 제공하므로 IB(50GB/s)의 러프하게 3.2배 정도 된다. 이러한 IB와 NVLink의 대역폭 차이를 효율적으로 활용하기 위해 우리는 각 토큰이 최대 4개 노드로만 dispatched 되도록 제한하여 IB traffic을 줄인다. 각 토큰에 대해 routing 결정이 내려지면, 우선 IB를 통해 타겟 노드와 동일한 in-node 인덱스를 갖는 GPU로 전송된다. 타겟 노드에 한 번 도달하면, 해당 토큰이 block 되지 않고 즉시 NVLink를 통해 target expert가 있는 GPU에 forward 되도록 보장한다. 이러한 방법으로 IB와 NVLink 간의 커뮤니케이션이 fully overlap되고, 각 토큰은 추가적인 오버헤드 없이 노드 당 평균 3.2개의 expert를 선택할 수 있다. 이것은 DeepSeek-V3이 실제로는 8개의 routed experts만 선택하더라도 이론적으로 최대 13 experts(4개 노드 x node 당 3.2 export)까지 확장할 수 있음을 의미하며, 그 과정에서 추가적인 커뮤니케이션 비용을 발생시키지 않는다. 이러한 커뮤니케이션 전략에 의해 단 20개의 SMs만으로 IB와 NVLink의 대역폭을 fully 활용하는 것이 가능하다.
상세하게, 우리는 warp specialization 기법을 사용하여 20개 SMs을 10개 커뮤니케이션 채널로 분할한다. dispatching 프로세스 동안 (1) IB 전송 (2) IB-to-NVLink forwarding (3) NVLink 수신은 각각 별도의 warp에 의해 제어된다. 각 커뮤니케이션 작업에 할당된 warp의 수는 모든 SMs의 실제 workload에 따라 동적으로 조정된다. 또한 combining 프로세스 동안 (1) NVLink 전송 (2) NVLink-to-IB forwarding과 누적 (3) IB 수신과 누적은 동적으로 조정된 warp에 의해 다뤄진다. 게다가 dispatching과 combining 커널은 모두 computation stream과 overlap하므로 다른 SM computation 커널에 대한 영향도 고려한다. 구체적으로 우리는 customized PTX(Parallel Thread Execution) instruction(명령어)를 사용하고 커뮤니케이션 chunk 크기를 auto-tune하여 L2 캐시량과 다른 SMs의 간섭을 크게 줄인다.
여기서 SM(Streaming Multiprocessor)는 GPU의 핵심 연산단위로 각 SM은 여러 연산 코어를 포함한다. 각 SM은 여러 Warp(32개 thread 단위)를 동시에 실행 가능하다. warp 내의 모든 thread는 동일한 명령어를 실행하지만 다른 데이터에 대해 연산을 수행한다.
SM은 연산 외에도 (NV Link나 IB를 통해) GPU간 데이터 전송에도 활용할 수 있기 때문에 DeepSeek에서는 전체 SM 중 20개를 특정 통신작업(10개의 커뮤니케이션 채널로 분할)에 전담하도록 할당하여 GPU 연산과 통신이 최대한 overlap 되어 수행되도록 조정했음. 이를 위해 CUDA의 PTX(parallel thread excution) 명령어를 커스터마이징하여 사용함.

3.2.3. Extremely Memory Saving with Minimal Overhead

학습하는 동안 메모리 사용량을 줄이는 측면에서 우리는 아래의 기법을 활용한다.
Recomputation of RMSNorm and MLA Up-Projection. 우리는 역전파하는 동안 모든 RMSNorm 연산과 MLA up-projection을 재계산하여 출력 활성화를 지속적으로 저장할 필요성을 없앤다. 이 전략은 작은 오버헤드만으로 activation 저장을 위한 메모리 요구량을 상당히 줄인다.
이것은 GPU에서 연산보다 메모리 IO 비용이 더 비싸기 때문에 일반적으로 사용되는 기법이다. forward에서 계산된 값을 메모리에 저장하지 않고, backward 시에 다시 forward를 수행해서 값을 구한다.
Exponential Moving Average in CPU. 학습하는 동안 learning rate decay 후에 모델 성능의 초기에 추정하기 위해 모델 파라미터에 대한 Exponential Moving Average(EMA)를 보존한다. EMA 파라미터는 CPU 메모리에 저장되고 각 학습 단계 이후에 비동기적으로 업데이트된다. 이 방법은 추가 메모리나 시간 오버헤드 없이 EMA 파라미터를 유지할 수 있게 한다. (EMA는 GPU 메모리가 아니라 CPU 메모리에 저장되므로 저장해도 문제가 없다.)
Shared Embedding and Output Head for Multi-Token Prediction. DualPipe 전략을 사용하여 모델의 가장 얕은 레이어(embedding layer를 포함하여)와 가장 깊은 레이어(출력 헤드를 포함하여)를 동일한 PP rank에 배포한다. 이 배열은 MTP 모듈과 메인 모델 사이의 공유된 임베딩과 출력 헤드의 파라미터의 gradient를 물리적 공유할 수 있게 한다. 이 물리적 공유 메커니즘은 추가로 우리의 메모리 효율성을 강화한다.
모델을 여러 GPU에 걸쳐 분할하여 실행할 때, 각 GPU가 특정 레이어를 담당하는데 이를 ‘PP Rank’라고 한다. 즉 PP Rank는 특정 GPU가 실행하는 레이어 group을 나타낸다.
Multi-Token Prediction(MTP)에서는 embedding layer, output head를 공유해야 하므로 DeepSeek에서는 PP Rank를 조정해서 가장 얕은 레이어와 가장 깊은 레이어를 동일한 PP rank에 배포하여 메모리를 물리적으로 공유하고 통신 비용을 절약한다.

3.3. FP8 Training

최근 low-precision training의 진보에 의해 영감을 받아, 우리는 DeepSeek-V3을 학습하기 위한 FP8 데이터 포맷을 활용하는 fine-grained mixed precision framework를 제안한다. low-precision training이 매우 유망하지만, 이것은 종종 activation, weights, gradient에서 outlier의 존재에 한계를 갖는다. inference quantization에서 상당한 진보가 존재했지만, 대규모 언어 모델 pre-training에서 low-precision 기법의 성공적인 응용을 시연한 연구는 상대적으로 적다. 이 도전을 해결하고 FP8 format의 동적 범위를 효율적으로 확장하기 위해, fine-grained quantization 전략인 1×Nc1 \times N_c element의 tile-wise grouping 또는 Nc×NcN_c \times N_c의 block-wise grouping을 도입한다. 관련된 dequantization(역양자화) 오버헤드는 정확한 FP8 General Matrix Multiplication(GEMM)을 달성하는 핵심 측면에서, 증가된 정밀도 누적 프로세스에서 크게 완화된다. 또한 MoE 학습에서 메모리와 커뮤니케이션 오버헤드를 더욱 줄이기 위해 activation을 FP8로 캐시하고 dispatch하는 동시에 low-precision 최적화기 상태를 BF16로 저장한다. 제안된 FP8 mixed precision 프레임워크를 DeepSeek-V2-Lite와 DeepSeek-V2와 유사한 두 가지 모델 스케일로 검증하여, 약 1 trillion token에 대해 학습한다(자세한 내용은 부록 B.1 참조). 특히 BF16 baseline과 비교하여 FP8-training 모델의 상대적인 손실 에러는 일관되게 0.25% 이하로 유지되며, 이것은 학습 무작위성의의 허용가능한 범위 내에 있다.

3.3.1. Mixed Precision Framework

low-precision 학습에서 널리 채택된 기법을 바탕으로, 우리는 FP8 학습을 위한 mixed precision 프레임워크를 제안한다. 이 프레임워크에서 대부분의 계산 집약적인 연산은 FP8로 수행한다. 반면 적은 핵심 연산은 학습 효율성과 수치적 안정성에 균형을 잡기 위해 원본 데이터 형식에서 전략적으로 유지된다. 전체적인 프레임 워크는 그림 6 참조.
우선 모델 학습을 가속하기 위한 측면에서 대부분의 core computation 커널, 즉 GEMM 연산이 FP8 정밀도로 구현된다. 이 GEMM 연산은 FP8 텐서를 입력으로 받아 BF16이나 FP32로 출력을 생성한다. 그림 6에서 설명한 것처럼 Linear 연산과 연관된 3가지 GEMM, 즉 Fprop(forward pass), Dgrad(activation backward pass), Wgrad(weight backward pass)가 모두 FP8로 실행된다. 이 설계는 이론적으로 원래의 BF16 방법과 비교하여 계산 속도를 2배 높인다. 게다가 FP8 Wgrad GEMM은 backward pass에서 사용하기 위해 activation을 FP8에서 저장할 수 있도록 한다. 이것은 메모리 소비를 상당히 줄인다.
여기서 GEMM은 General Matrix-Matrix Multiplication의 약자로 일반 행렬 곱셈을 말한다. Fprop의 Forward Propagation의 약자이고 Dgrad(Data Gradient)는 현재 layer의 입력 데이터(activation)에 대한 gradient를 계산하는 것이고, Wgrad(Weight Gradient)는 현재 layer의 가중치에 대한 gradient를 계산하는 것을 말한다. Fprop, Dgrad, Wgrad는 모두 행렬 곱셈 즉 GEMM으로 수행된다.
여기서 activation은 activation function을 말하는게 아니라 각 Layer의 입력을 의미한다 즉 y=f(Wx+b)y = f(Wx+b)에서 xx가 activation이고 WW는 가중치(행렬) bb는 bias이고, ff가 activation function이 된다.
FP8 형식의 효율성 이점에도 불구하고 특정 연산은 low-precision 계산에 대한 민감도 때문에 여전히 높은 정밀도를 요구한다. 또한 일부 low-cost 연산자는 전체 학습 비용에 대한 수용 가능한 오버헤드를 갖는 높은 정밀도를 활용할 수 있다. 이러한 이유로 조심스럽게 조사한 이후에 우리는 임베딩 모듈, 출력 헤드, MoE gating 모듈, normalization 연산기와 attention 연산기와 같은 컴포넌트에 대해 원본 정밀도(예 BF16 또는 FP32)를 유지한다. 이러한 높은 정밀도의 타겟 유지는 DeepSeek-V3에 대한 안정적인 학습 다이나믹스를 보장한다. 추가로 수치적 안정성을 보장하기 위해 우리는 master 가중치, 가중치 gradients와 optimizer state를 더 높은 정밀도로 저장한다. 반면 이러한 높은 정밀도 컴포넌트는 일부 메모리에 오버헤드를 발생시키지만, 우리의 분산 학습 시스템에서 multiple DP rank간의 효율적인 sharding을 통해 그 영향을 최소화할 수 있다.

3.3.2. Improved Precision from Quantization and Multiplication

혼합 정밀도 FP8 프레임워크를 기반으로 우리는 양자화 방법과 multiplication 프로세스 모두에 초점을 맞추어 low-precision 학습 정확도를 향상 시키기 위한 몇 가지 전략을 소개한다.
Fine-Grained Quantization. low-precision 학습 프레임워크에서 FP8 형식의 제한된 dynamic range 때문에 overflow와 underflow에서 모두 도전이다. 이것은 축소된 exponent bit에 의해 제약된다. 표준 관행으로서 입력 텐서의 최대 절댓값을 FP8의 최대 표현 가능한 값으로 스케일링하여 입력 분포를 FP 형식의 표현 가능한 범위에 맞춘다. 이 방법은 low-precision 학습을 activation outlier에 매우 민감하게 만들어서 양자화 정확도를 매우 감소시킬 수 있다. 이 문제를 해결하기 위해 우리는 fine-grained 양자화 방법을 제안한다. 이것은 더 granular level로 스케일링을 적용한다. 그림 7(a)에 그려진대로 (1) activation을 위해 우리는 1x128 타일 기반으로 엘레먼트를 그룹화하고 스케일링한다(즉, 토큰당 128개 채널) (2) 가중치의 경우 우리는 128x128 블록 기반으로(즉 128개 입력 채널당 128개 출력 채널) 엘레먼트를 그룹화고 스케일링한다. 이 접근은 엘레먼트의 더 작은 그룹을 따라 스케일을 적용하여 양자화 프로세스가 outlier를 더 잘 수용할 수 있도록 보장한다. 부록 B.2에서 추가로 가중치 양자화와 같은 방법으로 블록 기반에 대해 activation을 그룹화하고 스케일링할 때 발생하는 학습 불안정성을 논의한다.
일반적으로 fine-grained quantization은 channel을 기준으로 양자화를 수행한다. 여기서 입력은 벡터이므로 (channel 별로 묶어서) 1×Nc1\times N_c(1x128)형태로 tile basis로 그룹화하고 가중치는 행렬이므로 Nc×NcN_c\times N_c(128x128) 형태로 block basis로 그룹화한다. group화 후에는 group별로 Max Absolute Value을 이용하여 scaling을 적용한다. 일반적으로 Max Absolute Value을 이용해서 scaling 하기 때문에 group화 전에 scaling하면 underflow(처리할 수 있는 최솟값 보다 작아짐. 이 경우 0이 될 수 있음, 거꾸로 overflow가 되면 \infty로 처리될 수 있음)되거나 precision에 손상이 발생할 수 있어서 group화 후에 group별로 최댓값을 이용해서 scaling을 수행한다. (Max Absolute Value으로 scaling하면 데이터 값은 [1.0,1.0][-1.0, 1.0]으로 정규화된다.)
이렇게 fine-grained quantization을 수행하면 outlier에 상대적으로 적은 영향으로 양자화를 수행할 수 있다.
우리 방법에서 핵심 변경은 GEMM 연산의 inner 차원을 따라 그룹별 스케일링 factor를 도입한다는 것이다. 이것은 표준 FP8 GEMM에서 직접적으로 함수로 지원하지 않는다. 그러나 우리의 정밀한 FP32 누적 전략을 결합하여 효율적으로 구현될 수 있다.
유의할 것은 우리의 미세한 양자화 전략이 microscaling 형식의 아이디어와 매우 일관된다는 것이다. 한편 엔비디아 차세대 GPUs(Blackwell 시리즈)의 텐서 코어는 더 작은 양자화 세분화를 갖는 마이크로스케일링 형식을 지원한다고 발표했다. 우리는 우리의 설계가 미래 연구에 레퍼런스가 되어 최신 GPU 아키텍쳐에 페이스를 유지하기를 희망한다.
Increasing Accumulation Precision. Low-precision GEMM 연산은 종종 underflow 이슈에 시달리고, 그 정확성은 FP32 정밀도에서 일반적으로 실행되는 high-precision 누적에 매우 의존한다. 그러나 우리는 엔비디아 H800 GPUs에서 FP8 GEMM의 누적 정밀도가 14 비트를 중심으로 유지되도록 제한된다는 것을 발견했다. 이것은 FP32 누적 정밀도 보다 매우 낮다. 이 문제는 내부 차원 KK가 클 때 더 명백해지는데, 이는 배치 크기와 모델 width가 증가하는 전형적인 대규모 모델 학습 시나리오이다. 예컨대 K=4096K=4096의 두 랜덤 행렬의 GEMM 연산을 취하면, 우리의 예비 테스트에서 Tensor core에서 제한된 누적 정밀도로 인해 최대 relative 에러가 거의 2%를 발생시킨다. 이 문제에도 불구하고, 제한된 누적 정밀도는 여전히 일부 FP8 프레임워크에서 기본 옵션으로 되어 학습 정확도를 심각하게 제한한다.
이 이슈를 해결하기 위해 우리는 더 높은 정밀도를 위한 CUDA core의 촉진 전략을 채택했다. 이 프로세스는 그림 7(b) 참조. 구체적으로 Tensor core에서 MMA(Matrix Multiply-Accumulate) 실행하는 동안 중간 결과는 제한된 bit width로 누적된다. NCN_C의 interval에 도달하면, 부분 결과를 CUDA core의 FP32 레지스터로 복사해서 full-precision FP32로 누적한다. 이전에 언급했듯이 우리의 fine-grained 양자화는 내부 차원 KK를 따라 그룹당 스케일링 factor를 적용한다. 이러한 스케일링 factor는 최소의 추가 계산 비용으로 dequantization 절차로서 CUDA 코어에서 효율적으로 곱해질 수 있다.
우선 GPU hierarchy에대해 살펴보면 아래와 같다.
GPU
GPC(Graphic Processing Cluster) - 여러 개의 SM을 포함
Streaming Multiprocessor(SM) - GPU 종류에 따라 다름 A100에는 108개 존재
Wrap - 32개의 thread가 하나의 1 warp에 해당
CUDA Core - 일반적인 스칼라/벡터 연산 수행
Tensor Core - 행렬 연산(GEMM, MMA) 가속
여기서 GPU에 따라 SM이 가지는 cuda core와 tensor core의 수는 다양한데, A100에는 1개의 SM에 64개의 CUDA core와 4개의 Tensor core가 포함됨.
또한 SM이 한 번에 실행할 수 있는 Warp의 수도 GPU에 따라 다른데, A100의 경우 1개의 SM이 최대 32개의 Warp를 실행할 수 있음.
개념적으로 1개의 SM이 32개의 Warp를 갖고, 각 Warp는 32개의 thread로 묶이고, 각 thread가 cuda core 또는 tensor core를 실행할 수 있으므로 최대 32 x 32 = 1024개의 thread를 실행해서 연산을 수행할 수 있지만, 실제 SM에 존재하는 core의 수가 제한적이므로(A100기준 64개의 cuda core와 4개의 tensor core로 총 68개) 실제 한번에 실행 가능한 연산의 수는 그보다 훨씬 적다.
한편 각 cuda core, tensor core는 자신의 register를 갖고 SM 내에는 모든 cuda core와 tensor core가 공유하는 register file이 존재하여 필요에 따라 연산 결과를 교환할 수 있음. 이때 cuda core의 레지스터는 FP32 정밀도로 데이터를 저장하는 반면, tensor core의 레지스터는 FP8/FP16 보다 높지만 FP32보다 낮고, DeepSeek 연구원들의 조사 결과 H800에서는 14비트로 제한되었다고 함.
tensor core의 레지스터 정밀도가 낮기 때문에 내부 차원의 크기(K)가 커질 수록 누적되는 값의 오차가 증가하는 문제가 있었음. 이를 해결하기 위해 일정 간격(NCN_C)마다 tensor core의 중간 결과를 cuda core의 fp32 레지스터로 복사해서 정밀도를 높임.
이것은 비단 H800 뿐만 아니라 Tensor Core 자체가 높은 정밀도를 유지하기 어려운 구조이기 때문에, 최신 GPU에서도 tensor core의 중간 결과는 cuda core에 저장하는 기법을 사용해줘야 함.
이 수정으로 single warpgroup에 대한 WGMMA(Warpgroup-level Matrix Multiply-Accumulate) instruction(명령어) 실행 속도가 감소한 점에 유의해야 한다. 그러나 H800 아키텍쳐에서는 일반적으로 2개의 WGMMA에 대해 동시에 유지된다. 단일 warpgroup이 promotion 연산을 수행하는 동안 다른 것은 MMA 연산을 실행할 수 있다. 이러한 설계는 두 연산을 overlapping 하는 것이 가능하다. 텐서 코어의 높은 활용을 유지할 수 있다. 우리의 실험 결과 4개 WGMMA에 해당하는 NC=128N_C = 128개 엘레먼트로 설정하면 상당한 오버헤드 없이 정밀도를 상당히 개선할 수 있는 최소 누적 간격이 된다.
Mantissa over Exponents. 이전 연구에서 채택된 하이브리드 FP8 포맷이 Fprop에서 E4M3(4-bit exponent and 3-bit mantissa)와 Dgrad와 Wgrad에서 E5M2(5-bit exponent와 2-bit mantissa)를 사용했던 것과 대비하여, 우리는 더 높은 정밀도를 위해 모든 텐서에 E4M3 포맷을 채택한다. 우리는 이러한 접근의 실현 가능성은 tile과 block-wise 스케일링인 fine-grained 양자화 전략에 기인한다. 더 작은 엘레먼트 그룹에서 작동하여 우리의 방법은 이러한 그룹화된 엘레먼트 사이에 exponent bit를 효율적으로 공유하여 제한된 dynamic range의 영향을 완화한다.
FP8이면 부호를 나타내는 1비트를 제외한 7비트로 실수를 표현하는 형식인데, 지수 부분에 비트를 많이 쓸수록 더 넓은 범위를 표현할 수 있고, 가수 부분에 비트를 많이 쓸수록 더 정교한 값을 표현할 수 있다. 이전 연구에서는 forward에서는 정밀한 계산이 필요해서 지수에 4비트, 가수에 3비트를 사용한 E4M3 format을 사용하고, backward에서는 더 넓은 범위를 표현해야 해서 지수에 5비트, 가수에 가수에 2비트를 사용한 E5M2 format을 사용했는데, DeepSeek-V3에서는 tile과 block-wise scaling 때문에 E4M3으로 통일함
Online Quantization. 지연된 양자화는 현재 값을 추론하기 위해 prior 반복에서 최대 절댓값의 기록을 유지하는 tensor-wise 양자화 프레임워크에서 활용된다. 정확한 스케일링을 보장하고 프레임워크를 단순화하기 위해, 우리는 각 1x128 activation 타일 또는 128x128 가중치 블록에 대해 최대 절댓값을 온라인으로 계산한다. 이것을 기반으로 스케일링 factor를 유도한 다음 activation 또는 가중치를 FP8 형식으로 온라인으로 양자화한다. (양자화를 위한 scaling 계산을 online으로 했다는 것)

3.3.3. Low-Precision Storage and Communication

우리의 FP8 학습 프레임워크와 함께 캐시된 activation와 optimizer 상태를 더 낮은 정밀도 형식으로 압축하여 메모리 소비와 커뮤니케이션 오버헤드를 추가로 줄인다. (더 최적화 하기 위해 format를 정교하게 설정했다는 얘기)
Low-Precision Optimizer States. 우리는 AdamW optimizer에서 첫 번째와 두 번째 moment를 추적하기 위해, 관찰가능한 성능 감소를 발생시키지 않고 FP32 대신 BF16 데이터 포맷을 채택한다. 그러나 master 가중치(optimizer에 의해 저장된)와 gradient(배치 크기 누적을 위해 사용된)는 학습하는 동안 수치적 안정성을 유지하기 위해 여전히 FP32로 유지된다.
Low-Precision Activation. 그림 6에서 나온대로 Wgrad 연산은 FP8에서 수행된다. 메모리 소비를 줄이기 위해 Linear 연산의 backward pass에 대해 FP8 형식으로 activation을 캐시하는 것은 자연스러운 선택이다. 그러나 low-cost high-precision 학습을 위한 몇가지 연산에 대해 특별한 고려가 필요하다.
(1) Inputs of the Linear after the attention operator. 이 activation들은 또한 정밀도를 민감하게 만드는 attention 연산의 backward pass에서 사용된다. 우리는 이러한 activation에만 독점적으로 커스터마이즈된 E5M6 데이터 포맷을 채택한다. 추가로 이러한 activation은 backward pass에서 1x128 양자화 타일에서 128x1 타일로 변환될 수 있다. 추가 양자화 에러를 피하기 위해 모든 스케일링 factor는 반올림 스케일링 된다. 즉 2의 정수 거듭제곱이다.
(2) Inputs of the SwiGLU operator in MoE. 메모리 비용을 추가로 줄이기 위해 우리는 SwiGLU 연산의 입력을 캐시하고 backward pass에서 그것의 출력을 다시 계산한다. 이 activation은 또한 우리의 fine-grained 양자화 방법을 사용하여 FP8로 저장되어 메모리 효율성과 계산 정확성 사이의 균형을 잡는다.
Low-Precision Communication. 커뮤니케이션 대역폭은 MoE 모델의 학습에서 핵심 병목이다. 이 문제를 완화하기 위해 우리는 MoE를 up-projection 하기 전에 activation을 FP8로 양자화한 다음 MoE up-projection에서 FP8 Fprop과 호환되는 dispatch 컴포넌트를 적용한다. attention 연산 후에 Linear의 입력과 같이 이 activation에 대한 스케일링 factor는 2의 정수 거듭제곱이다. 유사한 전략이 MoE down-projection 전에 activation gradient에도 적용된다. forward와 backward 결합 컴포넌트 모두에 대해 학습 파이프라인의 핵심 파트에서 학습 정밀도를 보존하기 위해 BF16로 유지한다.

3.4. Inference and Deployment

우리는 DeepSeek-V3을 H800 클러스터에서 배포한다. 여기서 각 노드 내부의 GPU는 NVLink를 사용하여 interconnected되고 클러스터 간의 모든 GPU는 IB를 통해 fully interconnected이다. 온라인 서비스를 위한 Service-Level Objective(SLO)과 높은 처리량 모두를 동시에 보장하기 위해 우리는 prefilling과 decoding 단계로 구분되는 배포 전략을 활용한다. (여기서 prefilling은 LLM이 처음 프롬프트를 처리하는 단계이고, Decoding은 모델이 토큰을 하나씩 생성하는 단계를 의미한다)

3.4.1. Prefilling

prefilling 단계의 최소 배포 단위는 32개 GPU를 갖는 4개 노드로 구성된다. attention 부분은 8-way Data Parallelism(DP8)을 사용하여 결합된 Sequence Parallelism(SP)와 함께 4-way Tensor Parallelism(TP4)를 활용한다. 작은 TP 크기인 4는 TP 커뮤니케이션의 오버헤드를 제한한다. MoE 부분의 경우 각 expert가 충분히 큰 배치 크기를 프로세스하여 계산 효율성을 향상시키는 32-way Expert Parallelism(EP32)를 사용한다. MoE all-to-all 커뮤니케이션을 위해 학습과 동일한 방법을 사용한다. 우선 IB를 통해 노드간 토큰을 전송한 다음 NVLink를 통해 노드 내 GPU 사이에 forwarding한다. 특히 TP 커뮤니케이션을 절약하기 위해 얕은 레이어의 dense MLP에 대해 1-way Tensor Parallelism을 사용한다.
Data Parallelism(DP)는 동일한 모델을 여러 GPU에 복제하고 각 GPU에 대해 입력 데이터를 나눠서 처리하는 방식(이래서 데이터를 병렬화이다)을 말하며, Pipeline Parallelism(PP)은 하나의 큰 모델을 Layer별로 나눠서 GPU에 올리는 방식이고 Tensor Parallelism(TP)는 마찬가지로 하나의 큰 모델을 행렬 곱을 분할 할 수 있는 형태로 파라미터별로 나눠서(행 병렬화 또는 열 병렬화) GPU에 올리는 방식을 말한다.
Pipeline 병렬화는 개념적으로 간단하지만 layer별로 순차적으로 연산이 처리되므로 뒤에 배치된 GPU는 앞의 연산이 끝나기를 기다려야 하는 문제가 생기고, Tensor 병렬화는 각 GPU의 연산이 종료된 후에 그것을 다시 취합하는 단계가 필요하다. 병렬화는 모두 여러 GPU에 나눠서 처리하는 것이기 때문에 GPU 사이의 통신 비용이 발생한다.
MoE 부분에서 다른 expert 사이의 load balancing을 달성하기 위해 각 GPU가 대략 동일한 수의 토큰을 처리할 수 있도록 보장해야 한다. 이를 위해 high-load expert를 복제하고 redundantly 배포하는 redundant expert 배포 전략을 도입한다. 온라인 배포 중에 주기적으로(매 10분마다) 수집된 통계를 기반으로 high-load expert를 감지하고 조정한다. redundant expert의 집합을 결정한 후에 관찰된 load에 기반하여 노드 내부의 GPU 간의 expert를 조심스럽게 재배열하여 노드간 all-to-all 커뮤니케이션 오버헤드 증가 없이 가능한 GPU 간의 load balacning을 잡으려 노력한다. DeepSeek-3의 배포를 위해 prefilling stage에 대해 32개 redundant expert를 설정한다. 각 GPU는 원래 호스팅하는 8개 expert 외에 추가로 하나의 redundant expert도 호스팅한다.
redundant expert 배포는 expert가 고르게 선택되는 load balancing과 달리, 현재 부하가 많이 걸려서 병목이 되는 expert를 다른 gpu에 복제해서 전체 gpu의 부하를 분산시켜 시스템의 load balancing을 처리하는 것을 말한다.
추가로 prefilling stage에서 처리량을 개선하고 all-to-all과 TP 커뮤니케이션의 오버헤드를 숨기기 위해 유사한 계산 작업량을 가진 2개의 마이크로 배치를 동시에 프로세스하여 하나의 micro-batch의 attention과 MoE를 다른 micro-batch의 dispatch와 combine과 overlapping한다.
마지막으로 각 GPU가 더 많은 expert(예: 16개 expert)를 호스팅 하지만 inference step 동안 9개만 활성화 되는 expert에 대한 dynamic redundancy 전략을 탐구한다. 각 레이어 시작에서 all-to-all 연산 전에 즉석에서 전역적으로 최적 routing 스키마를 계산한다. prefilling stage에서 상당한 계산이 관련되어 있으므로 이 routing 스키마를 계산하는 오버헤드는 거의 무시할 수 있다.

3.4.2. Decoding

디코딩 동안, 우리는 shared expert를 routed된 것으로 취급한다. 이 관점으로부터 각 토큰은 routing하는 동안 9개 expert를 선택하고, shared expert는 항상 선택될 heavy-load expert로 간주된다. decoding 단계의 최소 배포 단위는 320개 GPU를 갖는 40개 노드로 구성된다. attention 파트는 DP80과 결합된 TP4와 SP를 사용하고, MoE 파트는 EP320을 사용한다. MoE 파트의 경우 각 GPU는 하나의 expert만 호스트하고 64개 GPU는 redundant expert와 shared expert를 호스팅하는 역할을 한다. dispatch와 combine 파트의 all-to-all 커뮤니케이션은 low latency를 달성하기 위해 IB를 통한 direct point-to-point 전송을 통해 수행된다. 게다가 latency 추가로 최소화하고 커뮤니케이션 효율성을 향상 시키기 위해 IBGDA 기술을 활용한다.
prefilling과 유사하게 온라인 서비스에서 통계적 expert load에 기반하여 특정 간격으로 redundant expert의 집합을 주기적으로 결정한다. 그러나 각 GPU는 하나의 expert만 호스팅하므로 재배열할 필요는 없다. 또한 디코딩을 위한 dynamic redundancy 전략을 탐구한다. 그러나 이것은 전역적으로 최적의 routing 스키마를 계산하는 알고리즘과 오버헤드를 줄이기 위한 dispatch 커널과의 fusion에 대한 더 세심한 최적화를 요구한다.
추가적으로 처리량을 향상 시키고 all-to-all 커뮤니케이션의 오버헤드를 숨기기 위해 디코딩 단계에서 유사한 계산 작업량을 가진 두 마이크로 배치를 동시에 처리하는 것을 탐구한다. prefilling과 다르게 디코딩 단계에서는 attention이 더 많은 시간을 소비한다. 따라서 하나의 마이크로 배치의 attention을 다른 것의 dispatch+MoE+combine와 overlap 한다. 디코딩 단계에서 expert 당 배치 크기는 상대적으로 작고(대개 256 토큰 이내), 병목은 계산 보다 메모리 접근이다. MoE 부분은 하나의 expert의 파라미터만 로드하면 되기 때문에 메모리 접근 오버헤드는 최소화된다. 따라서 적은 SMs을 사용해도 전체적인 성능을 큰 영향을 주지 않는다. 따라서 attention 부분의 계산 속도에 영향을 주지 않도록 dispatch+MoE+combine에 SMs의 작은 부분만 할당할 수 있다.

3.5. Suggestions on Hardware Design

all-to-all 커뮤니케이션과 FP8 학습 스키마 구현에 기반하여, 우리는 AI 하드웨어 벤더에게 다음의 칩 설계를 제안한다.

3.5.1. Communication Hardware

DeepSeek-V3에서 우리는 계산하는 동안 커뮤니케이션 latency를 숨기기 위해 계산과 커뮤니케이션 사이의 overlap을 구현한다. 이것은 serial 계산과 커뮤니케이션과 비교하여 커뮤니케이션 대역폭에 대한 의존성을 상당히 줄인다. 그러나 현재 커뮤니케이션 구현은 값비싼 SMs(이를 위해 H800 GPU에서 사용 가능한 132개 SMs 중 20개를 할당한다)에 의존하므로 계산 처리량을 제한한다. 게다가 커뮤니케이션을 위해 SMs을 사용하는 것은 텐서 코어가 under-utilized이므로 비효율을 발생시킨다.
현재 SMs은 all-to-all 커뮤니케이션을 위해 다음의 작업을 주로 수행한다.
단일 GPU에서 동일한 노드 내의 여러 GPUs로 향하는 IB 트래픽을 집계하면서 IB(InfiniBand)와 NVLink 도메인 사이의 data를 전달.
RDMA 버퍼(등록도니 GPU 메모리 영역)과 input/output buffers 사이의 데이터 전송
all-to-all combine을 위한 reduce 연산 실행
IB와 NVLink 도메인에서 여러 expert에게 chunked 데이터 전송하는 동안 세분화된 메모리 레이아웃을 관리
NVIDIA SHARP 같은 GPU co-processor 또는 네트워크 co-processor 역할을 하는 가치 있는 계산 유닛 SM에서 이러한 커뮤니케이션 작업을 offload하는 하드웨어를 미래의 벤더들이 개발하기를 바란다. 또한 응용 프로그래밍 복잡도를 줄이기 위해, 우리는 이 하드웨어가 계산 유닛의 관점에서 IB(scale-out)과 NVLink(scale-up) 네트워크를 통합하는 것을 목표로 한다. 이 통합 인터페이스를 통해 계산 유닛은 간단한 primitive에 기반으로 커뮤니케이션 요구를 제출하여 전체 IB-NVLink-통합된 도메인에서 read, write, multicast와 reduce와 같은 연산을 쉽게 수행할 수 있다.

3.5.2. Compute Hardware

Higher FP8 GEMM Accumulation Precision in Tensor Cores. 엔비디아 Hopper 아키텍쳐의 현재 텐서 코어 구현에서 FP8 GEMM은 제한된 누적 정밀도로 어려움을 겪는다. 최대 지수를 기준으로 right-shifting하여 32개의 mantissa(가수)를 정렬한 후에 텐서 코어는 각 가수 곱의 최상위 14 비트만 사용하여 덧셈을 수행하고 이 범위를 초과하는 비트를 자른다. register에 대한 덧셈 결과의 누적 또한 14비트 정밀도만 활용한다. 우리의 구현은 128 FP8xFP8 곱의 덧셈 결과를 누적하여 한계를 완화한다. 성공적인 FP8 학습을 달성하는데 도움이 되지만, FP8 GEMM 누적 정밀도에서 Hopper 아키텍쳐의 하드웨어 결함으로 인한 타협이다. 미래 칩은 더 높은 정밀도를 채택하기를 원한다.
Support for Tile- and Block-Wise Quantization. 현재 GPU는 텐서 단위 양자화만 지원한다. 우리의 tile-wise과 block-wise 양자화와 같은 미세한 양자화에 대한 기본적으로 지원하지 않는다. 현재 구현에서 NCN_C 간격에 도달하면 부분 결과가 텐서 코어에서 CUDA 코더로 복사되고, 스케일링 factor가 곱해지고 CUDA 코어의 FP32 레지스터에 추가된다. dequantization 오버헤드는 FP32 누적 전략과 결합해 크게 완화되지만 텐서 코어와 CUDA 코어 사이의 빈번한 데이터 이동은 여전히 계산적 효율성을 제한한다. 그러므로 우리는 미래 칩이 텐서 코어가 스케일링 factor를 받고, group 스케일링으로 MMA를 구현할 수 있도록 하여 미세 조정된 양자화를 지원하기를 권장한다. 이 방법으로 마지막 결과를 생성할 때까지 전체 partial sum accumulation과 dequantization를 텐서 코어 내부에서 직접 완료하여 빈번한 데이터 이동을 피할 수 있다.
Support for Online Quantization. 현재 구현은 온라인 양자화가 우리 연구에서 효율성을 시연했음에도 효과적으로 지원하는데 어려움을 겪는다. 기존 프로세스에서 우리는 양자화를 위해 HBM에서 128개 BF16 activation 값(이전 계산의 출력)을 읽어야 하고, 그 다음 양자화된 FP8 값을 MMA를 다시 읽기 위해서만 HBM에 다시 write 되어야 한다. 이 비효율성을 해결하기 위해 우리는 미래 칩이 FP8 캐스트와 TMA(Tensor Memory Accelerartor) 접근을 단일 융합 계산에 통합해서 activation를 global 메모리에서 shared 메모리로 전송하는 동안 양자화를 완료하여 잦은 메모리 읽기, 쓰기를 피할 수 있기를 권장한다. 또한 속도를 높이기 위해 warp-level cast 명령어를 지원하여 layer normalization과 FP8 cast의 더 나은 fusion을 가능하게 할 것을 권장한다. 대안으로 HBM에 근처에 계산 로직이 배치되는 near-memory 컴퓨팅 접근을 채택할 수 있다. 이 경우에 BF16 엘레먼트는 HBM에서 GPU로 읽어 올 때, 직접 FP8로 cast 되어 off-chip 메모리 접근을 대략 50% 줄일 수 있다.
Support for Transposed GEMM Operations. 현재 아키텍쳐는 matrix transposition을 GEMM 연산과 fuse 하는게 번거롭다. 우리의 workflow에서 forward pass 동안 activation은 1x128 FP8 tile로 양자화되어 저장된다. backward pass 동안 matrix를 read out, dequantized, transposed, 128x1로 re-quantized하여 HBM에 저장해야 한다. 메모리 연산을 줄이기 위해 우리는 미래의 칩이 MMA 연산 전에 shared 메모리에서 행렬의 직접 transposed read를 가능하게 하여, 학습과 inference 모두에 필요한 정밀도를 지원하도록 권장한다. FP8 형식 변환과 TMA 접근의 fuse을 결합하여, 양자화 workflow를 상당히 간소화 할 수 있다.

4. Pre-Training

4.1. Data Construction

DeepSeek-V2와 비교하여 우리는 수학과 프로그래밍 샘플의 비율을 높이고 multilingual 범위를 영어와 중국어 너머로 확장하여 pre-training corpus를 최적화한다. 또한 corpus의 다양성을 유지하면서 중복을 최소화하도록 데이터 프로세싱 파이프라인를 개선했다. Ding et al에 의해 영감 받아 데이터 무결성을 위해 document packing 방법을 구현하지만, 학습하는 동안 cross-sample attention masking은 통합하지 않는다. 마지막으로 DeepSeek-V3의 학습 corpus는 tokenizer에서 14.8T 고품질의 다양한 토큰으로 구성된다.
DeepSeekCoder-V2의 학습 프로세스에서 Fill-in-Middle(FIM) 전략은 다음 토큰을 예측하는 능력을 손상시키지 않으면서 모델이 contexutual 단서에 기반하여 middle text를 정확하게 예측하게 했다. DeepSeek-Coder-V2와 마찬가지로 DeepSeek-V3의 pre-training에도 FIM 전략을 통합한다. 구체적으로 Prefix-Suffix-Middle(PSM) 프레임워크를 활용하여 데이터를 아래처럼 구성한다.
<|fim_begin|>fpre<|fim_hole|>fsuf<|fim_end|>fmiddle<|eos_token|>\text{<|fim\_begin|>} f_\text{pre}\text{<|fim\_hole|>} f_\text{suf}\text{<|fim\_end|>} f_\text{middle}\text{<|eos\_token|>}
이 구조는 pre-packing 프로세스의 일부로 document 레벨에서 적용된다. FIM 전략은 PSM 프레임워크와 일관되게 0.1의 비율로 적용된다.
Fill-in-Middle은 다음 토큰을 예측하는 것이 아니라 문장의 중간을 비우고 이를 채우도록 학습 시키는 방법을 말한다. 위의 경우 아래와 같이 주어지는 예시에 대해 <|fim_hole|>에 들어갈 문장을 채우도록 한다. 여기서 정답은 <|fim_end|> 다음에 나오는 fox jumps가 된다.
<|fim_begin|> The quick brown <|fim_hole|> over the lazy dog. <|fim_end|> fox jumps <|eos_token|>
Python
복사
DeepSeek-V3의 tokenizer는 128k 토큰의 확장된 vocabulary를 갖는 Byte-level BPE를 활용했다. 토크나이저의 pretokenizer와 학습 데이터는 multilingual 압축 효율성을 최적화하기 위해 수정되었다. 또한 DeepSeek-V2 비교하여 새로운 pretokenizer는 구두점과 줄바꿈를 결합한 토큰을 도입한다. 그러나 이 트릭은 특히 few-shot 평가 프롬프트에서 모델이 terminal 줄바꿈 없이 multi-line prompt를 프로세스할 때 token boundary bias를 도입할 수 있다. 이 이슈를 해결하기 위해 우리는 학습하는 동안 결합된 토큰의 특정 비율로 무작위로 split하여 모델이 광범위한 special case에 노출되고 bias를 완화한다.

4.2. Hyper-Parameters

Model Hyper-Parameters. 우리는 Transformer 레이어의 수를 6161로 hidden 차원을 71687168로 설정한다. 모든 학습 가능한 파라미터는 0.0060.006의 표준편차로 랜덤으로 초기화된다. MLA에서 어텐션 헤드의 수 nhn_h128128로, 헤드당 차원 dhd_h128128로 설정한다. KV 압축 차원 dcd_c512512로 설정하고 query 압축 차원 dcd_c'15361536으로 설정한다. decoupled query와 key에 대해 헤드 차원 dhRd_h^R6464를 설정한다. 우리는 첫 3개 레이어를 제외한 모든 FFN을 MoE 레이어로 대체한다. 각 MoE 레이어는 1개의 shared expert와 256개의 routed expert로 구성된다. 여기서 각 expert의 중간 은닉 차원은 20482048이다. routed expert 중에서 각 토큰에 대해 8개 expert가 활성화되고, 각 토큰은 최대 4개 노드로 전송되도록 보장된다. multi-token prediction depth DD11로 설정된다. 즉 정확한 다음 토큰 외에도 각 토큰은 하나의 추가 토큰을 예측한다. DeepSeek-V2와 같이 DeepSeek-V3도 압축된 latent 벡터 다음에 추가적인 RMSNorm 레이러를 활용하고 width 병목에서 추가적인 scaling factor를 곱한다. 이 설정에 따라 DeepSeek-V3은 총 671B 파라미터와 각 토큰 별로 37B activated로 구성된다.
Training Hyper-Parameters. 우리는 β1=0.9,β2=0.95\beta_1 = 0.9, \beta_2 = 0.95와 weight decay가 0.10.1인 하이퍼파라미터를 갖는 AdamW optimizer를 활용한다. pre-training 동안 최대 시퀀스 길이를 4K로 설정하고, DeepSeek-V3을 14.8T 토큰에 대해 pre-train한다. learning rate scheduling에 대해 첫 2K 단계 동안 선형적으로 00에서 2.2×1042.2\times 10^{-4}까지 선형적으로 증가시킨 후에, 모델이 10T 학습 토큰을 소비할 때까지 2.2×1042.2\times 10^{-4}의 학습 비율을 일정하게 유지한다. 그 다음 4.3T 토큰에서 cosine decay curve를 따라 learning rate를 점진적으로 2.2×1052.2\times 10^{-5}까지 감소시킨다. 최종 500B 토큰의 학습 동안 우리는 첫 333B 토큰에서 2.2×1052.2\times 10^{-5}의 learning rate를 유지하고 남은 167B token에서 7.3×1067.3\times 10^{-6}의 다른 값으로 교체하여 일정하게 유지한다. gradient clipping norm은 1.01.0으로 설정한다. 우리는 배치 크기 스케쥴링 전략을 활용한다. 여기서 배치 크기는 첫 469B 토큰의 학습에서 30723072에서 1536015360으로 점진적으로 증가시키고 그 다음 남은 학습에서 1536015360으로 유지한다. 파이프라인 병렬화를 활용하여 모델의 다른 레이어를 다른 GPU의 배포하고 각 레이어에 대해 routed expert는 8개 노드에 속하는64 GPUs에 균등하게 배포된다. node-limited routing을 위해, 각 토큰은 최대 4개 노드로 보내지고(즉 M=4M=4), auxiliary-loss-free load balancing을 위해 우리는 bias 업데이트 속도 γ\gamma를 첫 14.3T 토큰에서 0.0010.001로 설정하고 나머지 500B 토큰에 대해 0.00.0로 설정한다. balance loss에 대해 우리는 α\alpha0.00010.0001로 설정하여 단일 시퀀스 내에서 극단적 불균형을 피한다. MTP loss 가중치 λ\lambda는 첫 10T 토큰에서 0.30.3으로 설정하고 나머지 4.8T 토큰에서 0.10.1로 설정한다.

4.3. Long Context Extension

우리는 DeepSeek-3에서 long context 능력을 활성화 하기 위해 DeepSeek-V2와 유사한 접근을 채택한다. pre-training 단계 이후에 context extension을 위해 YaRN을 적용하고 context window를 4K에서 32K로 다음 128K로 점진적으로 확장한 확장하기 위해 각각 1000개 step를 포함하는 두 추가 학습 phase를 수행한다. YaRN 구성은 DeepSeek-V2에서 사용된 것과 일관되며 decoupled shared key ktR\mathbf{k}_t^R에만 독점적으로 적용된다. 하이퍼파라미터는 두 phase 모두에서 identical로 유지되며, 스케일 s=40,α=1,β=32s=40, \alpha=1, \beta=32이고 scaling factor t=0.1lns+1\sqrt{t} = 0.1 \ln s+1이다. 첫 phase에서 시퀀스 길이는 32K로 설정되고 배치 크기는 19201920이다. 두 번째 phase 동안 시퀀스 길이는 128K로 증가되고 배치 크기는 480480으로 감소된다. 두 phase 모두에서 learning rate는 pre-training 단계에서 최종 learning rate와 일치하는 7.3×1067.3\times 10^{-6}으로 설정된다.
이 두 phase 확장 학습을 통해 DeepSeek-V3은 최대 128K 길이의 입력을 처리하는 능력을 가지면서도 강력한 성능을 유지한다. 그림 8은 DeepSeek-V3가 supervised fine-tuning을 따라 ‘Needle In A Haystack(NIAH)’ 테스트에서 주목할만한 성능을 달성한 것을 보인다. 최대 128K까지 context window 길이에 걸쳐 일관된 견고성을 보인다.

4.4. Evaluations

4.4.1. Evaluation Benchmarks

DeepSeek-V3의 기본 모델은 주로 영어와 중국어로 구성된 multilingual corpus에서 pretrained이므로 우리는 주로 영어와 중국어로 구성된 벤치마크의 시리즈와 multilingual benchmark에서 성능을 평가한다. 우리의 평가는 HAI-LLM 프레임워크 에서 통합된 내부 평가 프레임워크를 기반으로 한다. 고려된 벤치마크는 아래 분류되고 리스트 된다. 여기서 밑줄은 중국어 벤치마크이고, 두 줄은 multilingual이다. (밑줄 표시 안 함)
Multi-subject multiple-choice datasets include MMLU (Hendrycks et al., 2020), MMLU- Redux (Gema et al., 2024), MMLU-Pro (Wang et al., 2024b), MMMLU (OpenAI, 2024b), C-Eval (Huang et al., 2023), and CMMLU (Li et al., 2023).
Language understanding and reasoning datasets include HellaSwag (Zellers et al., 2019), PIQA (Bisk et al., 2020), ARC (Clark et al., 2018), and BigBench Hard (BBH) (Suzgun et al., 2022).
Closed-book question answering datasets include TriviaQA (Joshi et al., 2017) and Natu- ralQuestions (Kwiatkowski et al., 2019).
Reading comprehension datasets include RACE Lai et al. (2017), DROP (Dua et al., 2019), C3 (Sun et al., 2019a), and CMRC (Cui et al., 2019).
Reference disambiguation datasets include CLUEWSC (Xu et al., 2020) and WinoGrande Sakaguchi et al. (2019).
Language modeling datasets include Pile (Gao et al., 2020).
Chinese understanding and culture datasets include CCPM (Li et al., 2021).
Math datasets include GSM8K (Cobbe et al., 2021), MATH (Hendrycks et al., 2021), MGSM (Shi et al., 2023), and CMath (Wei et al., 2023).
Code datasets include HumanEval (Chen et al., 2021), LiveCodeBench-Base (0801-1101) (Jain et al., 2024), MBPP (Austin et al., 2021), and CRUXEval (Gu et al., 2024).
Standardized exams include AGIEval (Zhong et al., 2023). Note that AGIEval includes both English and Chinese subsets.
이전 연구를 따라 우리는 다음을 포함한 데이터셋에서 perplexity 기반 평가를 채택한다. HellaSwag, PIQA, WinoGrande, RACE-Middle, RACE-High, MMLU, MMLU-Redux, MMLU-Pro, MMMLU, ARC-Easy, ARC-Challenge, C-Eval, CMMLU, C3, and CCPM. 그리고 생성 기반 평가에 대해 TriviaQA, NaturalQuestions, DROP, MATH, GSM8K, MGSM, HumanEval, MBPP, LiveCodeBench-Base, CRUXEval, BBH, AGIEval, CLUEWSC, CMRC, and CMath를 채택한다. 추가로 Pile-test에 대해 언어 모델링 기반 평가를 수행하고 서로 다른 tokenizer를 사용하는 모델 사이에서 공정한 비교를 보장하기 위해 Bits-Per-Bytes(BPB)를 메트릭으로 사용한다.

4.4.2. Evaluation Results

Table 3에서 우리는 DeepSeek-V3의 기본 모델을 DeepSeek-V2-Base, Qwen2.5 72B Base, LLaMA-3.1 405B를 포함한 최첨단 오픈 소스 base 모델과 비교한다. 우리는 이 모델들을 모두 internal 평가 프레임워크를 사용하여 평가하고 그들이 동일한 평가 설정을 공유함을 보장한다. 지난 몇 달 동안 평가 프레임워크가 변경 되었기 때문에 DeepSeek-V2-Base의 성능이 이전에 리포트한 결과와 약간 차이가 있음에 유의하라. 전체적으로 DeepSeek-V3-Base는 DeepSeek-V2-Base와 Qwen2.5 72B Base를 포괄적으로 능가하고, 대부분의 벤치마크에서 LLaMA-3.1 405B base를 압도하여 가장 강력한 오픈소스 모델로 자리잡았다.
더 상세한 관점에서 우리는 DeepSeek-V3-Base를 다른 오픈 소스 base 모델과 독립적으로 비교한다. (1) DeepSeek-V2-Base와 비교하여 모델 아키텍쳐의 개선과 모델 크기와 학습 토큰의 확장과 데이터 품질의 향상으로 인해 DeepSeek-V3-Base는 예상대로 훨씬 나은 성능을 달성한다. (2) 중국어 오픈소스 모델로 SOTA를 달성한 Qwen2.5 72B Base와 비교하여 절반의 활성화 파라미터만으로 DeepSeek-V3-Base는 특히 영어와 multilingual, code, math 벤치마크에서 놀랄만큼 이점을 보인다. 중국어 벤치마크의 경우 multi-subject multiple-choice task인 CMMLU를 제외하고 중국어 DeepSeek-V3-Base는 또한 Qwen2.5 72B보다 성능이 낫다. (3) 11배 많은 활성화 파라미터를 가진 가장 큰 오픈 소스 모델인 LLaMA-3.1 405B와 비교하여, DeepSeek-V3-Base는 또한 multilingual, code, math 벤치마크에서 훨씬 나은 성능을 보인다. 영어와 중국어 벤치마크에서 DeepSeek-V3-Base는 경쟁력있거나 더 나은 성능을 보인다. 특히 BBH, MMLU 시리즈, DROP, C-Eval, CMMLU, CCPM에서 좋다.
효율적인 아키텍쳐와 포괄적인 엔지니어링 최적화 덕에 DeepSeek-V3은 극단적으로 높은 학습 효율성을 달성한다. 우리의 학습 프레임워크와 인프라스트럭쳐 하에 매 trillion 토큰으로 DeepSeek-V3 학습하는데 단지 180K H800 GPU 시간만 요구한다. 이것은 72B나 405B dense 모델보다 학습 비용이 훨씬 저렴하다.

4.5.Discussion

4.5.1. Ablation Studies for Multi-Token Prediction

Table 4에서 우리는 MTP 전략에 대한 ablation 결과를 보인다. 구체적으로 서로 다른 스케일에서 두 baseline 모델을 기반으로 MTP 전략을 평가한다. 작은 스케일에서 총 15.7B 파라미터로 구성된 baseline MoE 모델을 우리는 1.33T 토큰에 대해 학습한다. 대형 스케일에서 총 228.7B 파라미터로 구성된 baseline MoE 모델을 540B 토큰에 대해 학습한다. 이들 모델을 기반으로 학습 데이터와 다른 아키텍쳐를 동일하게 유지하면서 1-depth MTP 모듈을 추가하고 비교를 위해 두 모델을 MTP 전략으로 학습한다. inference 동안 MTP 모듈을 직접 폐기하므로 비교된 모델의 inference 비용은 정확히 동일하다. 표에서 우리는 MTP 전략이 대부분의 평가 벤치마크에서 모델 성능을 일관되게 향상시키는 것을 관찰할 수 있다.

4.5.2. Ablation Studies for the Auxiliary-Loss-Free Balancing Strategy

Table 5에서, 우리는 auxiliary-loss-free balancing 전략에 대한 ablation 결과를 보인다. 우리는 서로 다른 스케일에 걸쳐 두 baseline 모델의 상단에 이 전략을 평가한다. 작은 스케일에서 우리는 총 15.7B 파라미터를 포함한 MoE 모델을 1.33T 토큰에 대해 학습한다. 대형 스케일에서 우리는 총 228.7B 파라미터를 포함한 baseline MoE 모델을 578B 토큰에 대해 학습한다.
두 baseline 모델 모두 순수하게 load balance를 장려하기 위해 auxiliary loss를 사용하고 top-K affinity normalization을 사용하는 sigmoid gating 함수를 사용한다. auxiliary loss의 강도를 제어하는 하이퍼파라미터는 각각 DeepSeek-V2-Lite와 DeepSeek-V2와 동일하다. 이 두 baseline 모델의 위에 학습 데이터와 다른 아키텍쳐를 동일하게 유지하면서 비교를 위해 모든 auxiliary loss를 제거하고 auxiliary-loss-free balancing 전략을 도입한다. 테이블에서 우리는 auxiliary-loss-free 전략이 대부분의 평가 벤치마크에서 더 나은 모델 성능을 일관되게 달성하는 것을 볼 수 있다.

4.5.3. Batch-Wise Load Balance VS Sequence-Wise Load Balance

auxiliary-loss-free balancing과 sequence-wise auxiliary loss 사이의 핵심 차이는 balancing scope에 있다. 즉 batch-wise vs sequence wise이다. sequence-wise auxiliary loss와 비교하여 batch-wise balancing은 각 시퀀스에 대한 in-domain balance를 강제하지 않음으로써 더 유연한 제약 조건을 부여한다. 이러한 유연성 덕분에 expert가 다양한 도메인에 더 잘 특화될 수 있다. 이것을 평가하기 위해 우리는 Pile test set의 서로 다른 도메인에서 16B auxiliary-loss-based baseline과 16B auxiliary-loss-free 모델의 expert load를 기록하고 분석한다. 그림 9에서 보듯이 우리는 auxiliary-loss-free 모델이 기대했던 대로 더 훌륭한 expert 특화 패턴을 시연함을 관찰할 수 있다.
이러한 유연성과 모델 성능에서의 이점 사이의 correlation을 추가로 조사하기 위해 시퀀스 대신 각 학습 배치에 대해 load balance를 장려하는 batch-wise auxiliary loss를 추가로 설계하고 검증한다. 실험 결과 유사한 레벨의 batch-wise load balance의 달성할 때, batch-wise auxiliary loss도 auxiliary-loss-free 방법과 유사한 모델 성능을 달성할 수 있다.
구체적으로 1B MoE 모델에 대한 실험에서 검증 loss는 2.258(sequence-wise auxiliary loss를 사용하여), 2.253(auxiliary-loss-free 방법을 사용하여), 2.253(batch-wise auxiliary loss)를 사용하여)이다. 또한 3B MoE 모델에서 유사한 결과를 관찰한다. sequence-wise auxiliary loss는 2.085의 검증 손실을 달성하고, auxiliary-loss-free 방법 또는 batch-wise auxiliary loss는 2.080의 동일한 검증 loss를 달성한다.
추가로 batch-wise load balancing 방법이 일관된 성능의 이점을 보이지만 효율성 측면에서 2가지 잠재적인 도전을 마주한다. (1) 특정한 시퀀스 또는 작은 배치 내의 load 불균형과 (2) inference 동안 domain-shift-induced load 불균형이다. 첫 도전은 각 마이크로배치의 large size를 보장하는 large-scale expert 병렬화와 데이터 병렬화를 사용하는 우리의 학습 프레임워크를 사용하여 자연스럽게 해결된다. 두 번째 도전에 대해 우리는 섹션 3.4에서 설명한대로 redundant expert 배포를 사용하는 효율적인 inference 프레임워크를 설계하고 구현한다.

5. Post-Training

DeepSeek-V3도 R1처럼 reasoning이 가능하며, 이를 위해 pre-trained V3 모델에 대해 Post-Training 단계에서 supervised fine-tuning(SFT)와 RL을 적용하여 reasoning 능력을 부여했다(여기서 R1에 의해 생성된 데이터도 사용함). 이에 대한 내용은 R1과 유사하므로 R1 부분에서 정리

5.1. Supervised Fine-Tuning

여러 도메인에 걸쳐 1.5M instance를 포함하도록 instruction-tuning 데이터셋을 선별한다. 각 도메인은 특정한 요구사항에 맞게 조정된 고유한 데이터 생성 방법을 활용한다.
Reasoning Data. 수학, 코드 대회 문제와 로직 퍼즐에 대해 초점을 맞춘 dataset을 포함하여 reasoning-related 데이터셋의 경우 internal DeepSeek-R1 모델을 활용하여 데이터를 생성한다. 특히 R1-generated 데이터가 강력한 정확도를 보이지만 overthinking, poor formatting, excessive length 이슈에 시달린다. 우리의 목적은 R1-generated reasoning 데이터의 높은 정확성과 정기적으로 형식이 지정된 reasoning data의 명확성과 간결함 사이의 균형을 잡는 것이다.
우리의 방법론을 설립하기 위해 Supervised Fine-Tuning(SFT)와 Reinforcement Learning(RL) 학습 파이프라인을 결합하여 코드, 수학 또는 general reasoning 같은 특정한 도메인에 맞춰진 expert 모델을 개발하는 것으로 시작한다. 이 expert 모델은 최종 모델에 대한 데이터 생성기로 제공된다. 학습 프로세스는 각 인스턴스에 대해 두 고유한 유형의 SFT 샘플을 생성하는 것을 포함한다. 첫 번째는 <problem, original response> 형식으로 문제와 원래의 응답을 결합하고, 두 번째는 <system prompt, problem, R1 response> 형식으로 시스템 프롬프트와 문제와 R1 응답을 결합한다.
시스템 프롬프트는 모델이 reflection과 verification에 대한 메커니즘으로 풍부해진 응답을 생성하도록 하는 가이드를 포함하여 명시적인 시스템 프롬프트가 없을 때라도 R1-generated와 original 데이터 모두에서 패턴을 통합하여 응답을 생성한다. 수백번 단계의 RL를 거친 후에, 중간 RL 모델은 R1 패턴을 통합하는 방법을 학습하여 전체적인 성능을 전략적으로 향상한다.
RL 학습 phase가 완료되면 expert 모델이 데이터 생성 소스로 사용되는 최종 모델에 대해 높은 퀄리티 SFT 데이터를 선별하기 위해 rejection 샘플링을 구현한다. 이 방법를 통해 최종 학습 데이터는 DeepSeek-R1의 강력함을 유지하면서 생성된 응답은 간결하고 효율적이다.
Non-Reasoning Data. 창조적인 글쓰기, 역할 연기, 간단한 질문 답변과 같은 non-reasoning 데이터에 대해 DeepSeek-V2.5를 활용하여 응답을 생성하고 인간 주석자를 통해 데이터의 정확도와 올바름을 확인한다.
SFT Settings. SFT 데이터셋을 사용하여 DeepSeek-V3-Base를 2 epoch 동안 fine-tune 한다. 여기서 5×1065 \times 10^{-6}에서 시작해서 1×1061 \times 10^{-6}로 점진적으로 감소하는cosine decay learning rate schedule을 사용하한다. 학습하는 동안 각 단일 시퀀스는 여러 샘플에서 packing 된다. 그러나 샘플 masking 전략을 채택하여 이러한 예제들이 고립되고 상호적으로 보이지 않게 유지한다.

5.2. Reinforcement Learning

5.2.1. Reward Model

우리는 RL 프로세스에서 rule-based Reward Model(RM)과 model-based RM을 활용한다.
Rule-Based RM. 특정한 규칙을 사용하여 검증할 수 있는 질문의 경우 우리는 rule-based 보상 시스템을 채택하여 feedback을 결정한다. 예를 들어 특정한 수학 문제는 결정론적인 결과가 있고, 우리는 모델이 설계된 형식(예: 박스 안에)으로 최종 답변을 제공하도록 요구하여, 룰을 적용하여 올바름을 확인할 수 있다. 유사하게 LeetCode 문제에 대해 컴파일러를 활용하여 test case를 기반으로 피드백을 생성할 수 있다. 이러한 접근은 manipulation과 exploitation에 강하므로, 가능한 경우 rule-based 검증을 활용하여 더 높은 수준의 신뢰성을 보장한다.
Model-Based RM. free-form ground-truth 답변을 갖는 질문의 경우 reward 모델에 의존하여 응답이 기대한 ground-truth와 일치하는지 여부를 결정한다. 거꾸로 창조적인 글쓰기와 관련된 질문과 같이 명확한 ground-truth가 없는 질문의 경우 리워드 모델은 질문과 해당 답변을 입력으로 기반하여 피드백을 제공하는 임무를 맡는다. 리워드 모델은 DeepSeek-V3 SFT checkpoint에서 학습된다. 신뢰성을 향상시키기 위해 최종 리워드 뿐만 아니라 리워드로 이어지는 chain-of-thought를 포함하는 preference 데이터를 구성한다. 이 접근은 특정한 작업에서 리워드 해킹의 위험을 완화하는데 도움이 된다.

5.2.2. Group Relative Policy Optimization

DeepSeek-V2와 유사하게 우리는 Group Relative Policy Optimization(GRPO)를 채택한다. 이것은 일반적으로 policy 모델과 동일한 크기를 갖는 critic 모델을 포기한다. 대신 group score에서 baseline을 추정한다. 구체적으로 각 질문 qq에 대해 GROP은 old policy model πθold\pi_{\theta_\text{old}}에서 출력 그룹 {o1,o2,...,oG}\{o_1,o_2,..., o_G\}를 샘플링한 다음 아래의 목적을 최대화하여 policy 모델 πθ\pi_\theta를 최적화한다.
JGRPO(θ)=E[qP(Q),{oi}i=1Gπθold(Oq)]=1Gi=1G(min(πθ(oiq)πθold(oiq)Ai,clip(πθ(oiq)πθold(oiq),1ϵ,1+ϵ)Ai)βDKL(πθπref))\begin{align} \mathcal{J}_\text{GRPO}(\theta) &= \mathbb{E}[q \sim P(Q), \{o_i\}_{i=1}^G \sim \pi_{\theta_\text{old}}(O|q)] \\ &=\notag {1\over G}\sum_{i=1}^G \left(\min\left({\pi_\theta(o_i|q) \over \pi_{\theta_\text{old}}(o_i|q)}A_i, \text{clip}\left({\pi_\theta(o_i|q) \over \pi_{\theta_\text{old}}(o_i|q)}, 1-\epsilon,1+\epsilon \right)A_i \right) -\beta\mathbb{D}_\text{KL}(\pi_\theta\|\pi_\text{ref}) \right) \end{align}
DKL(πθπref)=πref(oiq)πθ(oiq)logπref(oiq)πθ(oiq)1\begin{align} D_\text{KL}(\pi_\theta\|\pi_\text{ref}) = {\pi_\text{ref}(o_i|q) \over \pi_\theta(o_i|q)} - \log{\pi_\text{ref}(o_i|q) \over \pi_{\theta}(o_i|q)} - 1 \end{align}
여기서 ϵ\epsilonβ\beta는 하이퍼파라미터이고 AiA_i는 각 그룹 내의 출력에 해당하는 reward의 그룹 {r1,r2,...,rG}\{r_1, r_2, ..., r_G\}를 사용하여 계산된 advantage이다.
Ai=rimean({r1,r2,...,rG})std({r1,r2,..,rG})\begin{align} A_i = {r_i - \text{mean}(\{r_1, r_2, ..., r_G\}) \over \text{std}(\{r_1, r_2, .., r_G\})}\end{align}
우리는 RL 프로세스 동안 코딩, 수학, 글쓰기, 롤플레잉과 질문 답변과 같은 다양한 도메인에서 프롬프트를 통합한다. 이러한 접근은 모델을 인간 선호에 더 가깝게 정렬할 뿐만 아니라 특히 사용가능한 SFT 데이터가 제한되는 시나리오에서 벤치마크에 대한 성능을 향상 시킨다.

5.3. Evaluations

5.3.1. Evaluation Settings

Evaluation Benchmarks. base model 테스트를 위해 사용한 벤치마크 외에도 추가로 IFEval, FRAMES, LongBench v2, GPQA, SimpleQA, C-SimpleQA, SWE-Bench Verified, Aider, LiveCodeBench, Codeforces, Chinese National High School Mathematics Olympiad와 American Invitational Mathematics Examination 2024에서 instructed 모델을 평가한다.
Compared Baselines. 우리는 DeepSeek-V2-0506, DeepSeek-V2.5-0905, Qwen2.5 72B Instruct, LLaMA-3.1 405B Instruct, Claude-Sonnet-3.5-1022, GPT-4o-0513을 포함한 여러 강력한 baseline과 비교하여 우리의 chat 모델에 대한 포괄적인 평가를 수행한다. DeepSeek-V2 모델 시리즈의 경우 비교를 위해 가장 강력한 대표적인 변종을 선택한다. closed-source 모델에 대해 각각 그들의 API를 통해 평가를 수행한다.
Detailed Evaluation Configurations. MMLU, DROP, GPQA와 SimpleQA를 포함한 표준 벤치마크의 경우 우리는 simple-eval 프레임워크의 평가 프롬프트를 채택한다. zero-shot 설정에서 MMLU-Redux의 경우 Zero-Eval 프롬프트 형식을 활용한다. 다른 데이터셋의 경우 데이터셋 생성자가 제공한 default 프롬프트와 함께 원래의 평가 프로토콜을 따른다. 코드와 수학 벤치마크에 대해 HumanEval-Mul 데이터셋에는 총 8개 주류 프로그래밍 언어(Python, Java, Cpp, C#, JavaScript, TypeScript, PHP, Bash)를 포함된다. 우리는 LiveCodeBench에서 모델 성능을 평가하기 위해 CoT와 non-CoT 방법을 사용한다. 여기서 데이터는 2024년 8월에서 11월까지 수집된 것이다. Codeforce 데이터셋은 경쟁자 비율을 사용하여 측정된다. SWE-Bench는 에이전트 없는 프레임워크를 사용하여 평가된다. 우리는 ‘diff’ 포맷을 사용하여 Aider-related 벤치마크를 평가한다. 수학적 추론의 경우 AIME와 CNMO 2024는 0.7의 temperature로 평가되고 결과는 16회 실행 평균이다. 반면 MATH-500은 greedy decoding을 활용한다. 우리는 모든 모델이 각 벤치마크에서 최대 8192 토큰을 출력하도록 허용한다.

5.3.2. Standard Evaluation

Table 6은 평가 결과를 보이며, DeepSeek-V3이 오픈 소스 모델 중 최고 성능임을 볼 수 있다. 게다가 GPT-4o와 Claude-3.5-Sonnet 같은 프론티어 closed-source 모델과 비교하여 경쟁력 있다.
English Benchmarks. MMLU는 다양한 지식 도메인과 작업에 걸쳐 LLM의 성능을 평가하도록 설계된 널리 인정받는 벤치마크이다. DeepSeek-V3은 LLaMA-3.1-405B, GPT-4o와 Claude-Sonnet 3.5와 같은 최상위 모델과 견주는 경쟁력 있는 성능을 보이고, Qwen2.5 72B를 상당히 능가한다. 게다가 DeepSeek-V3은 더 도전적인 교육적 지식 벤치마크인 MMLU-Pro에서 Claude-Sonner 3.5에 근접하다. corrected label을 갖는 MMLU의 수정된 버전인 MMLU-Redux에서 DeepSeek-V3은 피어 모델들을 능가한다. 게다가 PhD-level 평가 테스트베드인 GPQA-Diamond에서 DeepSeek-V3은 놀라운 결과를 달성한다. Claude 3.5 Sonnet 바로 랭크되고 다른 경쟁자들과 상당한 격차로 능가한다.
DROP, LongBench v2와 FRAMES 같은 long-context 이해 벤치마크에서 DeepSeek-V3은 계속해서 탑-티어 모델로 위치한다. DROP에서 3-shot 설정에서 인상적인 91.6 F1 score를 달성하여 이 카테고리에서 다른 모든 모델을 능가한다. 100k 토큰 컨텍스트에 대한 질문-답변을 요구하는 벤치마크인 FRAME에서 DeepSeek-V3은 GPT-4o를 가깝게 추적하는 반면 다른 모든 모델을 상당한 격차로 능가한다. 이것은 극단적으로 긴 컨텍스트 작업을 다루는 DeepSeek-V3의 강력한 능력을 보인다. DeepSeek-V3의 long-context 능력은 DeepSeek V3 발표 몇 주 전에 출시된 데이터셋인 LongBench v2에서 동급 최고 성능을 통해 검증된다. factual knowledge 벤치마크인 SimpleQA에서 DeepSeek-V3은 GPT-4o와 Claude-Sonnet의 뒤에 쳐진다. 이는 주로 설계 초점과 리소스 할당 때문이다. DeepSeek-V3은 더 많은 학습 토큰을 중국 지식에 할당하고 C-SimpleQA에서 예외적인 성능을 이끈다. instruction-following 벤치마크에서 DeepSeek-V3은 이전의 DeepSeek-2 시리즈를 상당히 능가하여 사용자-정의 형식 제약을 이해하고 준수하는 능력이 향상되었음을 강조한다.
Code and Math Benchmarks. 코딩은 SWE-Bench-erified와 Aider와 같은 엔지니어링 관점 작업과 HumanEval과 LiveCodeBench 같은 알고리즘적 작업을 포괄하는 LLM에 대해 도전적이고 실용적인 작업이다. 엔지니어링 작업에서 DeepSeek-3은 Claude-Sonnet-3.5-1022에 뒤쳐지지만 오픈소스 모델을 상당히 능가한다. 오픈 소스 DeepSeek-V3은 코딩 관련된 엔지니어링 작업의 발전을 촉진할 것으로 기대된다. 견고한 능력에 대한 접근을 제공하여 DeepSeek-V3은 소프트웨어 엔지니어링과 알고리즘 개발과 같은 영역에서 혁신과 개선을 유도하여 개발자들과 연구자들이 코딩 작업에서 오픈소스 모델이 달성할 수 있는 경계를 넗히도록 지원할 수 있다. 알고리즘적 작업에서 DeepSeek-3은 HumanEval-Mul과 LiveCodeBench와 같은 모든 벤치마크에서 모든 baseline을 능가하는 압도적인 성능을 시연한다. 이 성공은 알고리즘 초점 작업에서 코드 생성과 문제 해결 능력을 효율적으로 향상시키는 고급 knowledge distillation 기법 덕분이다.
수학 벤치마크에서 DeepSeek-V3은 예외적인 성능을 시연한다. baseline을 상당히 압도하고 non-o1-like 모델에 대해 새로운 최첨단을 설정한다. 특히 AIME, MATH-500과 CNMO 2024에서 DeepSeek-V3은 2번째 우수한 모델인 Qwen2.5 72B을 절대 점수에서 약 10% 능가하며 이것은 이런 도전적인 벤치마크에 대해 상당한 격차이다. 이 놀라울만한 능력은 non-o1-like 모델에 대해 상당한 이점이 입증된 DeepSeek-R1의 distillation 기술의 효율성을 강조한다.
Chinese Benchmarks. Qwen과 DeepSeek는 중국어와 영어 모두에 대해 견고하게 지원 하는 두 가지 대표 모델이다. factual 벤치마크인 Chinese SimpleQA에서 Qwen2.5가 DeepSeek-V3가 pre-trained에 사용한 14.8T 토큰 보다 20% 더 많은 18T 토큰의 더 큰 corpus로 학습됐음에도 DeepSeek-V3가 Qwen2.5-72B를 16.4점 앞선다.
중국 교육적 지식 평가에 대한 대표 벤치마크인 C-Eval와 CLUEWSC에서 DeepSeek-V3과 Qwen2.5-72B는 유사한 성능 수준을 보인다. 두 모델 모두 도전적인 중국어 reasoning과 교육적 작업에 대해 잘 최적화 되었음을 나타낸다.

5.3.3. Open-Ended Evaluation

표준 벤치마크에 추가로 우리는 LLM을 judge로 사용하여 open-ended 생성 작업에 대해 모델을 평가한다. 결과는 Table 7 참조. 특히 GPT-4-Turbo-1106를 pairwise 비교에 대한 judge로써 활용하는 AlpacaEval 2.0과 Arena-Hard의 원래 설정을 고수한다. Arena-Hard에서 DeepSeek-V3은 baseline GPT-4-0314와 비교하여 86% 이상의 인상적인 승리 비율을 달성한다. 이는 Claude-Sonnet-3.5-1022 같은 최상위 모델과 견주는 성능이다. 이것은 특히 코딩과 디버깅 작업을 포함하여 복잡한 프롬프트를 다루는 것에서 DeepSeek-V3의 견고한 능력을 강조한다. 또한 DeepSeek-V3은 Arena-Hard 벤치마크에서 85%를 넘는 첫 오픈소스 모델로 획기적인 이정표를 달성한다. 이 성과는 오픈 소스 모델과 클로즈드 소스 모델 사이의 성능 격차에 다리를 놓고 오픈소스 모델이 도전적인 도메인에서 달성 할 수 있는 새로운 표준을 설정한다.
유사하게 DeepSeek-V3은 AlpacaEval 2.0에서 예외적인 성능을 시연하며 closed 소스 모델과 오픈 소스 모델을 모두 능가한다. 이것은 writing 작업과 간단한 질문 답변 시나리오를 다루는 뛰어난 능력을 보인다. 특히 DeepSeek-V2.5-0905를 20%의 상당한 격차로 능가하여 간단한 작업을 다루는 것에서 상당한 개선을 강조하고 발전의 효과를 보인다.

5.3.4. DeepSeek-V3 as a Generative Reward Model

우리는 최첨단 성능 모델 즉 GPT-4o와 Claude 3.5와 DeepSeek-V3의 judgement 능력을 비교한다. Table 8은 RewardBench에서 이러한 모델의 성능을 보인다. DeepSeek-V3은 GPT-4o-0806과 Claude-3.5-Sonnet-1022의 최상위 버전과 견주는 성능을 달성하고 다른 버전을 능가한다. 또한 DeepSeek-V3의 judgement 능력은 voting 기법에 의해 향상될 수 있다. 그러므로 우리는 DeepSeek-V3을 voting과 함께 사용하여 open-ended 질문에 대한 self-feedback을 제공하여 정렬 프로세스의 효율성과 견고성을 개선한다.

5.4. Discussion

5.4.1. Distillation from DeepSeek-R1

DeepSeek-V2.5를 기반으로 DeepSeek-R1에서 distillation의 기여를 ablate한다. baseline은 짧은 CoT 데이터에 대해 학습되는 반면 경쟁 모델은 위에 설명된 expert checkpoint에 의해 생성된 데이터를 사용한다.
Table 9는 distillation 데이터의 효과성을 보인다. LiveCodeBench와 Math-500 벤치마크 모두에서 상당한 개선을 보인다. 우리의 실험은 흥미로운 trade-off를 드러낸다. distillation은 더 나은 성능을 이끌지만 잠재적으로 평균 응답 길이를 증가시킨다. 모델 정확성과 계산 효율성 사이의 균형을 유지하기 위해 우리는 distillation에서 DeepSeek-V3을 위한 최적 설정을 선택한다.
우리의 연구는 reasoning 모델에서 knowledge distillation이 post-training 최적화에 대한 유망한 방향임을 제시한다. 현재 우리 연구는 수학과 코딩 도메인에서 데이터를 distilling하는 것에 초점을 맞추었지만, 이 접근은 다양한 작업 도메인에 걸쳐 광범위한 응용에 대해 잠재성을 보인다. 이러한 특정한 영역에서 시연된 효과는 long-CoT distillation이 복잡한 reasoning이 요구되는 다른 인지 작업에서 모델 성능을 강화하는데 가치가 있을 수 있음을 나타낸다. 다양한 도메인에 대한 이 접근을 추가로 탐색하는 것은 미래 연구의 중요한 방향으로 남는다.

5.4.2. Self-Rewarding

Reward는 RL에서 최적화 프로세스를 조종하는데 중추적인 역할을 수행한다. 일부 코딩이나 수학 시나리오 같은 외부 도구를 통해 검증이 간단한 도메인에서 RL은 예외적인 효과성을 시연한다. 그러나 더 일반적인 시나리오에서 하드 코딩을 통한 피드백 메커니즘을 구성하는 것은 실용적이지 않다. DeepSeek-V3의 개발 동안 이러한 광범위한 컨텍스트에서 constitutional AI 접근을 활용하여 DeepSeek-V3 자체의 voting 평가 결과를 피드백 소스로 활용한다. 이 방법은 주목할만한 정렬 효과를 생성하여 subjective 평가에서 DeepSeek-V3의 성능을 상당히 향상시켰다. 추가적인 constitutional 입력을 통합하여 DeepSeek-V3은 constitutional 방향으로 최적화할 수 있다. 추가 정보를 LLM과 결합하여 피드백 소스로 사용하는 이 패러다임이 가장 중요하다고 믿는다. LLM은 다양한 시나리오에서 비구조화된 정보를 보사응로 변환하여 궁극적으로 LLM의 self-improvement를 용이하게 할 수 있는 versatile 프로세서 역할을 한다. self-rewarding 외에도 일반적인 시나리오에서 모델 능력을 일관되게 진보시키기 위해 다른 일반적이고 확장 가능한 리워딩 방법을 발견하는데 전념하고 있다.

5.4.3. Multi-Token Prediction Evaluation

DeepSeek-V3은 단지 다음 단일 토큰을 예측하는 대신, MTP 기법을 통해 다음 2개 token을 예측한다. speculative decoding의 프레임워크와 결합하여 이것은 모델의 decoding 속도를 상당히 가속화할 수 있다. 추가적으로 예측된 토큰의 수락 비율에 관한 자연스러운 질문의 떠오른다. 우리의 평가에 기반하여, 두 번째 토큰 예측의 수락 비율은 다양한 생성 주제에 걸쳐 85%와 90% 사이로 일관된 안정성을 보인다. 이 높은 수락 비율 덕분에 DeepSeek-V3는 decoding 속도를 상당히 개선하여 TPS(Token Per Second)를 1.8배 높일 수 있다.

6. Conclusion, Limitations, and Future Directions

이 논문에서 우리는 총 671B 파라미터와 37B 활성화 파라미터를 갖고 14.8T 토큰으로 학습된 large MoE language 모델인 DeepSeek-V3를 소개한다. MLA와 DeepSeekMoE 아키텍쳐에 추가로 load balancing을 위한 auxiliary-loss-free 전략을 개척하고 더 강력한 성능을 위해 multi-token prediction 학습 목적을 설정한다. DeepSeek-V3의 비용 효율성은 FP8 학습의 지원 지원과 세심한 엔지니어링 최적화 덕분이다. post-training 또한 DeepSeek-R1 시리즈 모델의 reasoning 능력을 distilling하는 것에서 성공을 만들었다. 포괄적인 평가는 DeepSeek-V3이 현재 사용 가능한 가장 강력한 오픈소스 모델로 출현했으며 GPT-4o와 Claude-3.5-Sonnet 같은 선두 closed-source 모델과 비교할만한 성능을 달성함을 보인다. 강력한 성능에도 불구하고 경제적인 학습 비용을 유지한다. 이것은 pre-training, context length extension과 post-training을 포함하한 full training에 2.788M H800 GPU 시간만 필요하다
강력한 성능과 비용 효율성을 인정하는 반면, 우리는 특히 개발에 대해 DeepSeek-V3의 일부 한계를 인식한다. 우선 효율적인 inference를 보장하기 위해 DeepSeek-V3의 권장 배포 단위가 상대적으로 크며, 이것은 작은 크기 팀에 대해 부담이 될 수 있다. 둘째 우리의 DeepSeek-V3에 대한 배포 전략이 DeepSeek-V2 보다 end-to-end 생성 속도가 2배를 달성했음에도 추가 개선의 여지가 여전히 있다. 다행히 이러한 한계는 더 진보된 하드웨어의 개발로 자연스럽게 해결될 것으로 기대된다.
DeepSeek는 장기적으로 오픈소스 모델의 노선을 일관되게 고수하며 AGI(Artificial General Intelligence)의 궁극적인 목표에 점진적으로 접근하는 것을 목표로 한다. 미래에 우리는 다음의 방향의 연구에 전략적으로 투자할 계획이다.
학습과 inference 효율성 모두를 추가로 개선하고 무한 context 길이에 대한 효율적인 지원에 접근하기 위해 모델 아키텍쳐를 지속적으로 연구하고 조정한다. 게다가 우리는 Transformer의 아키텍쳐적 한계를 돌파하여 모델링 역량의 경계를 넓히려 노력할 것이다.
학습 데이터의 양과 질을 지속적으로 반복하고 더 포괄적인 범위의 차원에서 데이터 스케일링을 유도하기 위해 추가 학습 신호 소스의 통합을 탐구한다.
모델의 깊은 사고 능력을 지속적으로 탐색하고 반복하여 reasoning 길이와 깊이를 확장하여 지능과 문제 해결 능력을 강화하는 것을 목표로 한다.
고정된 벤치마크 집합에 최적화하는 경향을 방지하기 위해 더 포괄적이고 multi-dimensional 모델 평가 방법을 탐색한다. 이것은 모델 능력에 대한 오해의 소지가 있는 인상을 주고 기초 평가에 영향을 줄 수 있다.