Home 論文解説: DeepSeek-V3 Technical Report — 671B MoEモデルの革新的アーキテクチャと$560万学習の全貌
投稿
キャンセル

📄 論文解説: DeepSeek-V3 Technical Report — 671B MoEモデルの革新的アーキテクチャと$560万学習の全貌

論文概要(Abstract)

DeepSeek-V3は671Bパラメータ(トークンあたり37Bアクティブ)のMixture-of-Experts(MoE)言語モデルである。Multi-head Latent Attention(MLA)とDeepSeekMoEアーキテクチャを採用し、補助損失フリーの負荷分散戦略とマルチトークン予測(MTP)訓練目標を導入した。14.8兆トークンで事前学習後、SFTとRLを実施。全学習にわずか278万H800 GPU時間(推定約$560万)しか要しない驚異的コスト効率を達成し、オープンソース最高性能を記録した。

この記事は Zenn記事: 2026年2月版 日本語LLM選定ガイド の深掘りです。

情報源

背景と動機(Background & Motivation)

フロンティアLLMの開発は性能とコストのトレードオフに直面している。密(Dense)モデルのスケーリングはGPU時間の指数的増加を招き、GPT-4クラスの学習には数千万〜数億ドルのコストがかかるとされる。MoEアーキテクチャはスパース計算により効率的なスケーリングを実現するが、従来手法には2つの課題があった。

第一に、MoEの負荷分散に使用される補助損失(auxiliary loss)が主訓練目標と競合し、性能を劣化させる。従来のSwitch TransformerやGShard等では、$\alpha = 0.01$程度の補助損失でエキスパート間の均等な利用を促すが、この損失項が主損失の最適化を阻害するというジレンマがあった。

第二に、大規模MoEのクロスノード通信がボトルネックとなり、学習効率が密モデルに劣る場合があった。DeepSeek-V3はこれらの課題を同時に解決するアーキテクチャと学習フレームワークを提案している。

主要な貢献(Key Contributions)

  • 補助損失フリー負荷分散: 動的バイアス項でルーティングを調整し、主損失の勾配に干渉せずロードバランスを実現
  • マルチトークン予測(MTP): 次トークンに加え次の次のトークンも予測し、学習効率と推論速度を向上
  • FP8混合精度学習: 671Bパラメータ規模でFP8学習を世界初検証、BF16比50%メモリ削減
  • DualPipeアルゴリズム: パイプライン並列のバブル率を$(p-1)/(2m-1)$に低減
  • DeepSeek-R1からの知識蒸留: 長Chain-of-Thoughtモデルから標準LLMへの推論能力転移

技術的詳細(Technical Details)

Multi-head Latent Attention(MLA)

MLAは標準Multi-Head Attention(MHA)のKVキャッシュを低ランク圧縮する手法である。標準MHAでは$n_h \times d_h$次元のKey・Valueベクトルをトークンごとにキャッシュする必要があるが、MLAは潜在ベクトルに圧縮することで大幅にメモリを削減する。

KV圧縮の流れは以下の通りである。まず隠れ状態$\mathbf{h}_t$からダウンプロジェクション行列$\mathbf{W}^{DKV}$で潜在ベクトルを生成する。

\[\mathbf{c}_t^{KV} = \mathbf{W}^{DKV} \mathbf{h}_t\]

ここで$\mathbf{c}_t^{KV} \in \mathbb{R}^{d_c}$、$d_c = 512$である。

次にアップロジェクション行列でKey・Valueを復元する。

\[\mathbf{k}_t^C = \mathbf{W}^{UK} \mathbf{c}_t^{KV}, \quad \mathbf{v}_t^C = \mathbf{W}^{UV} \mathbf{c}_t^{KV}\]

RoPE(Rotary Position Embedding)は分離して適用する。

\[\mathbf{k}_t^R = \text{RoPE}(\mathbf{W}^{KR} \mathbf{h}_t)\]

最終的なKeyは$\mathbf{k}_t = [\mathbf{k}_t^C; \mathbf{k}_t^R]$となる。

ここで、

  • $n_h = 128$: Attentionヘッド数
  • $d_h = 128$: ヘッド次元
  • $d_c = 512$: KV圧縮次元
  • $d_c’ = 1536$: Query圧縮次元
  • $d_h^R = 64$: 分離RoPE次元

KVキャッシュ圧縮率: 標準MHAでは$n_h \times d_h = 128 \times 128 = 16{,}384$要素/トークンが必要だが、MLAでは$d_c = 512$のみで済む。約32倍の圧縮を実現する。

DeepSeekMoEアーキテクチャ

DeepSeekMoEの特徴は細粒度エキスパート分割共有エキスパート分離の2点である。

DeepSeek-V3のMoE構成は以下の通りである。

パラメータ
総パラメータ数671B
アクティブパラメータ/トークン37B
Transformer層数61
隠れ次元7168
総エキスパート数257(共有1 + ルーティング256)
アクティブエキスパート/トークン8(共有1 + ルーティング7)
FFN中間次元2048

ルーティング関数はSigmoid関数を用いる。

\[s_{i,t} = \sigma(\mathbf{h}_t \cdot \mathbf{e}_i)\]

ここで$\mathbf{e}i$はエキスパート$i$の重心ベクトル、$s{i,t}$はトークン$t$のエキスパート$i$への親和度である。上位8件のエキスパートが選択される。

補助損失フリー負荷分散

従来のMoE学習では補助損失$\mathcal{L}_\text{Bal} = \alpha \sum_i f_i \cdot P_i$($\alpha \approx 0.01$)を加えてエキスパート利用の均等化を図る。しかしこの損失が主訓練目標と競合し、性能劣化を引き起こす。

DeepSeek-V3はバイアス項$b_i$を各エキスパートに導入する。

\[s'_{i,t} = s_{i,t} + b_i\]

ルーティング判定には$s’{i,t}$を使用するが、実際の計算重みには$s{i,t}$(バイアスなし)を使用する。これにより主損失の勾配にバイアス項が影響しない。

バイアスの動的更新規則は以下の通りである。

\[b_i \leftarrow \begin{cases} b_i - \gamma & \text{エキスパート$i$が過負荷の場合} \\ b_i + \gamma & \text{エキスパート$i$が過少の場合} \end{cases}\]

ここで$\gamma = 0.001$はバイアス更新速度である。

補完的に極めて軽量なシーケンスレベルバランス損失($\alpha = 0.0001$、従来の100分の1)も併用する。この設計により、性能劣化なしに安定した負荷分散を実現する。

マルチトークン予測(MTP)

標準LLMは各位置で次の1トークンのみを予測する。MTPはこれを拡張し、追加$D$トークンを予測する。DeepSeek-V3では$D = 1$、つまり次トークンと次の次のトークンの2トークンを予測する。

MTPモジュールは逐次的(sequential)に構成される。各モジュールは前モジュールの表現と次トークンの埋め込みを入力として受け取り、次のトークンを予測する。

損失関数は以下の通りである。

\[\mathcal{L}_\text{MTP} = \frac{\lambda}{D} \sum_{k=1}^{D} \mathcal{L}_{\text{CE}}^{(k)}\]

ここで$\lambda = 0.3$はMTP損失の重み、$\mathcal{L}_{\text{CE}}^{(k)}$は深さ$k$での交差エントロピー損失である。

MTPの利点は3つある。(1) 学習効率の向上(各サンプルが$D+1$個の予測目標を提供)、(2) モデルの先読み計画能力の向上、(3) 推論時のSpeculative Decodingへの活用。

DualPipeアルゴリズム

標準パイプライン並列のバブル比率は$(p-1)/m$($p$: パイプラインステージ数、$m$: マイクロバッチ数)である。DualPipeは2つのデータストリームを逆方向に同時処理し、一方の計算と他方の通信をオーバーラップさせる。

\[\text{バブル比率}_\text{DualPipe} = \frac{p-1}{2m-1}\]

DeepSeek-V3では$p = 16$で運用し、バブル率を大幅に低減している。

FP8混合精度学習

671Bパラメータ規模でのFP8学習を世界で初めて検証した。

  • Forward: 活性化・重みにE4M3フォーマット使用
  • Backward: 勾配にE5M2フォーマット使用
  • 累積精度: 行列乗算の累積はFP32で実行
  • 量子化粒度: タイル単位(活性化: 1×128、重み: 128×1)
  • マスター重み: FP32で保持

BF16比で50%のメモリ削減を実現しつつ、訓練の安定性を維持。14.8兆トークンの全学習過程で損失スパイクやロールバックは一切発生しなかった。

実装のポイント(Implementation)

学習インフラの構成は以下の通りである。

並列化手法設定
Pipeline Parallelism16ステージ
Expert Parallelism64
Data Parallelism2(ZeRO-1)
Tensor Parallelism不使用

Tensor Parallelismを使用しない点が特異である。通常この規模ではTPが必須とされるが、DeepSeek-V3ではクロスノード通信帯域の制約を考慮し、代わりにExpert Parallelism 64で分散している。

クロスノードAll-to-All通信にはカスタムRDMAカーネルを使用し、TCP/IPスタックを迂回して低レイテンシを実現。計算と通信の完全オーバーラップにより、2048基のH800 GPUで3.7Bトークン/秒のスループットを達成した。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# MLA (Multi-head Latent Attention) の簡易実装例
import torch
import torch.nn as nn

class MultiHeadLatentAttention(nn.Module):
    """Multi-head Latent Attention with KV compression.

    Args:
        d_model: Hidden dimension (7168 for DeepSeek-V3)
        n_heads: Number of attention heads (128)
        d_c: KV compression dimension (512)
        d_rope: Decoupled RoPE dimension (64)
    """
    def __init__(self, d_model: int, n_heads: int, d_c: int, d_rope: int):
        super().__init__()
        self.d_h = d_model // n_heads
        self.n_heads = n_heads
        self.d_c = d_c

        # KV down-projection (compress)
        self.W_dkv = nn.Linear(d_model, d_c, bias=False)
        # KV up-projection (decompress)
        self.W_uk = nn.Linear(d_c, d_model, bias=False)
        self.W_uv = nn.Linear(d_c, d_model, bias=False)
        # Decoupled RoPE projection
        self.W_kr = nn.Linear(d_model, d_rope * n_heads, bias=False)
        # Output projection
        self.W_o = nn.Linear(d_model, d_model, bias=False)

    def forward(self, h: torch.Tensor) -> torch.Tensor:
        """Forward pass with KV cache compression.

        Args:
            h: Hidden states (batch, seq_len, d_model)

        Returns:
            Output tensor (batch, seq_len, d_model)
        """
        B, T, D = h.shape
        # Compress KV: (B, T, d_c) — only this is cached
        c_kv = self.W_dkv(h)
        # Decompress to K, V
        k_c = self.W_uk(c_kv)  # (B, T, d_model)
        v = self.W_uv(c_kv)    # (B, T, d_model)
        # Standard attention with compressed KV
        # (Simplified: omitting multi-head reshape and RoPE for clarity)
        scores = torch.matmul(h, k_c.transpose(-2, -1)) / (self.d_h ** 0.5)
        attn = torch.softmax(scores, dim=-1)
        out = torch.matmul(attn, v)
        return self.W_o(out)

Production Deployment Guide

AWS実装パターン(コスト最適化重視)

DeepSeek-V3/V3.2のAPI利用または自前デプロイを想定した構成を示す。

規模月間リクエスト推奨構成月額コスト主要サービス
Small~3,000 (100/日)Serverless$50-150Lambda + Bedrock + DynamoDB
Medium~30,000 (1,000/日)Hybrid$300-800Lambda + ECS Fargate + ElastiCache
Large300,000+ (10,000/日)Container$2,000-5,000EKS + Karpenter + EC2 Spot

Small構成の詳細(月額$50-150):

  • Lambda: 1GB RAM, 60秒タイムアウト ($20/月)
  • Bedrock (Claude 3.5 Haiku): Prompt Caching有効 ($80/月)
  • DynamoDB: On-Demand ($10/月)
  • CloudWatch: 基本監視 ($5/月)

コスト削減テクニック:

  • Spot Instances使用で最大90%削減(EKS + Karpenter)
  • Bedrock Batch API使用で50%割引
  • Prompt Caching有効化で30-90%削減

コスト試算の注意事項: 上記は2026年2月時点のAWS ap-northeast-1(東京)リージョン料金に基づく概算値です。最新料金は AWS料金計算ツール で確認してください。

Terraformインフラコード

Small構成 (Serverless): Lambda + Bedrock + DynamoDB

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
module "vpc" {
  source  = "terraform-aws-modules/vpc/aws"
  version = "~> 5.0"
  name = "deepseek-routing-vpc"
  cidr = "10.0.0.0/16"
  azs  = ["ap-northeast-1a", "ap-northeast-1c"]
  private_subnets = ["10.0.1.0/24", "10.0.2.0/24"]
  enable_nat_gateway   = false
  enable_dns_hostnames = true
}

resource "aws_iam_role" "lambda_bedrock" {
  name = "lambda-bedrock-role"
  assume_role_policy = jsonencode({
    Version = "2012-10-17"
    Statement = [{
      Action    = "sts:AssumeRole"
      Effect    = "Allow"
      Principal = { Service = "lambda.amazonaws.com" }
    }]
  })
}

resource "aws_iam_role_policy" "bedrock_invoke" {
  role = aws_iam_role.lambda_bedrock.id
  policy = jsonencode({
    Version = "2012-10-17"
    Statement = [{
      Effect   = "Allow"
      Action   = ["bedrock:InvokeModel", "bedrock:InvokeModelWithResponseStream"]
      Resource = "arn:aws:bedrock:ap-northeast-1::foundation-model/anthropic.claude-3-5-haiku*"
    }]
  })
}

resource "aws_lambda_function" "llm_handler" {
  filename      = "lambda.zip"
  function_name = "deepseek-routing-handler"
  role          = aws_iam_role.lambda_bedrock.arn
  handler       = "index.handler"
  runtime       = "python3.12"
  timeout       = 60
  memory_size   = 1024
  environment {
    variables = {
      BEDROCK_MODEL_ID    = "anthropic.claude-3-5-haiku-20241022-v1:0"
      DYNAMODB_TABLE      = aws_dynamodb_table.cache.name
      ENABLE_PROMPT_CACHE = "true"
    }
  }
}

resource "aws_dynamodb_table" "cache" {
  name         = "llm-prompt-cache"
  billing_mode = "PAY_PER_REQUEST"
  hash_key     = "prompt_hash"
  attribute { name = "prompt_hash"; type = "S" }
  ttl { attribute_name = "expire_at"; enabled = true }
}

運用・監視設定

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import boto3

cloudwatch = boto3.client('cloudwatch')

# Bedrock トークン使用量アラート
cloudwatch.put_metric_alarm(
    AlarmName='bedrock-token-spike',
    ComparisonOperator='GreaterThanThreshold',
    EvaluationPeriods=1,
    MetricName='TokenUsage',
    Namespace='AWS/Bedrock',
    Period=3600,
    Statistic='Sum',
    Threshold=500000,
    AlarmActions=['arn:aws:sns:ap-northeast-1:123456789:cost-alerts'],
    AlarmDescription='Bedrockトークン使用量異常(コスト急増)'
)

コスト最適化チェックリスト

  • ~100 req/日 → Lambda + Bedrock (Serverless) - $50-150/月
  • ~1000 req/日 → ECS Fargate + Bedrock (Hybrid) - $300-800/月
  • 10000+ req/日 → EKS + Spot (Container) - $2,000-5,000/月
  • Spot Instances優先(最大90%削減)
  • Bedrock Batch API使用(50%割引)
  • Prompt Caching有効化(30-90%削減)
  • AWS Budgets月額予算設定
  • CloudWatch アラーム設定
  • 日次コストレポート(SNS/Slack通知)
  • 未使用リソース定期削除

実験結果(Results)

ベンチマークDeepSeek-V3GPT-4oClaude 3.5 SonnetLlama-3.1-405B
MMLU88.587.288.388.6
MATH-50090.276.678.373.8
AIME 202439.29.316.023.8
HumanEval82.690.289.089.0
DROP91.683.788.391.6
GPQA-Diamond59.149.965.051.1
C-Eval(中国語)86.585.588.073.3

数学ベンチマークでの突出した性能が注目に値する。MATH-500で90.2(GPT-4oに13.6ポイント差)、AIME 2024で39.2(GPT-4oの4倍以上)を記録。一方コーディングではGPT-4oに及ばない(HumanEval: 82.6 vs 90.2)。学習コストは全体で278万H800 GPU時間、推定約$560万という破格のコスト効率である。

実運用への応用(Practical Applications)

Zenn記事で述べた「DeepSeek-V3.2は約1/6の料金でスコア0.79」という評価の技術的根拠がこの論文にある。MoEのスパース計算(671B中37Bのみアクティブ)によりAPI推論コストが密モデルの約$1/18$に抑えられ、入力$0.28/1Mトークンという低価格を実現している。

実運用での活用パターンは以下の通りである。

  • チャットボット: コスト効率に優れ、大量リクエストを低コスト処理可能
  • RAG: 128Kコンテキストを活用した大規模ドキュメント処理
  • 数学・推論タスク: AIME/MATHでの高性能を活かした技術計算

ただしデプロイには複数GPU(Expert Parallelism=64の要件)が必要なため、自前デプロイのハードルは高い。API利用が現実的な選択肢である。

関連研究(Related Work)

  • DeepSeek-V2 (arXiv:2405.04434): MLAとDeepSeekMoEの原論文。236B総パラメータ、21Bアクティブ。V3はこれを大幅にスケールアップ
  • Switch Transformer (Fedus et al., 2022): MoEの先駆的研究。補助損失による負荷分散を採用(V3はこれを解消)
  • DeepSeek-R1 (arXiv:2501.12948): 強化学習による推論能力の誘導。V3はR1からの知識蒸留で推論力を獲得

まとめと今後の展望

DeepSeek-V3は補助損失フリー負荷分散・MTP・FP8学習・DualPipeの4つの革新により、フロンティア級性能を$560万という異例の低コストで実現した。Zenn記事で指摘した「DeepSeekの圧倒的コスト効率」の技術的根拠は、MoEのスパース計算とFP8学習にある。2025年以降のDeepSeek-V3.1/V3.2ではR1統合による推論力強化が進み、日本語性能も向上している。

参考文献

この投稿は CC BY 4.0 でライセンスされています。

論文解説: AutoMix — 自己検証とPOMDPによるLLM自動カスケードルーティング

論文解説: MetaLLM — Multi-Armed Banditによるコスト効率最適のLLMルーティングフレームワーク