Skills MCP Model 博客 提交 Skills

DeepSeek モデルアーキテクチャ徹底解説

DeepSeek の中核技術革新を深く理解する: MoE (Mixture of Experts)、MLA (Multi-head Latent Attention)、MTP (Multi-Token Prediction)、FP8 混合精度トレーニング。原理からコード、アーキテクチャからパフォーマンスまで、DeepSeek テクノロジースタックを完全に習得。

探索を始める

DeepSeek モデルアーキテクチャ全体像

DeepSeek V3 と R1 の技術アーキテクチャ全体像。総パラメータ 671B、活性化パラメータ 37B、数々の世界的革新。

DeepSeek V3 アーキテクチャ概要

DeepSeek V3 は中核設計として MoE(Mixture of Experts)混合エキスパートアーキテクチャを採用しています。総パラメータ数は 671B ですが、推論時にはトークンごとに 37B のパラメータのみが活性化されます。これはスパース活性化メカニズムによるもので、各トークンは全パラメータを活性化するのではなく、少数のエキスパートサブネットワークにのみルーティングされます。

V3 アーキテクチャの中核コンポーネントは次のとおりです。

アーキテクチャコンポーネント 技術説明 主要パラメータ
Transformer Backbone Transformer ベースの Decoder-only アーキテクチャ 61 層 Transformer
DeepSeekMoE 細粒度エキスパート分割 + 共有エキスパート分離 256 ルーティングエキスパート + 8 共有エキスパート
MLA マルチヘッド潜在注意、低ランク KV 圧縮 KV Cache を元の 1/5〜1/10 に圧縮
MTP マルチトークン予測、将来の N トークンを同時に予測 深さ M = 1(追加トークンを 1 つ予測)
FP8 Training 超大規模モデルで初めて FP8 トレーニングを検証 トレーニングコスト 557 万ドル

V3 と R1 のアーキテクチャ比較

V3 と R1 は同じ基盤アーキテクチャ(MoE + MLA)を共有していますが、トレーニング戦略と目的が異なります。

比較項目 DeepSeek V3 DeepSeek R1
基本アーキテクチャ 671B MoE + MLA V3アーキテクチャ(671B)に基づく
学習方法 教師あり事前学習 + SFT 強化学習(RL)+ コールドスタートSFT
中核能力 一般的な対話、文章作成、翻訳、知識Q&A 推論、数学、プログラミング、論理的思考
推論モード 直接回答生成 Chain-of-Thought推論
コンテキストウィンドウ 160K 160K(671B)/ 128K(蒸留版)

671Bパラメータの全体像

DeepSeek V3の671Bパラメータの分布は以下の通りです:

パラメータ構成

Embedding層

語彙サイズ128K、埋め込み次元7168。マルチヘッド潜在注意機構によりKVを低次元潜在空間に圧縮し、パラメータ数を大幅に削減します。

  • 語彙埋め込み: 128K x 7168
  • 位置エンコーディング: RoPE(回転位置エンコーディング)
パラメータ構成

Transformer層

61層のTransformer。各層はMLA注意モジュールとDeepSeekMoE FFNモジュールを含みます。最初の3層は高密度FFN(非MoE)を使用します。

  • 61層のDecoder-only
  • 58層のMoE + 3層のDense FFN
パラメータ構成

MoEエキスパート層

256のルーティングエキスパート + 8の共有エキスパート。各トークンは8つのルーティングエキスパート + 1つの共有エキスパートを活性化します。各エキスパートは小さなFFNネットワークです。

  • 256ルーティングエキスパート + 8共有エキスパート
  • Top-8ゲーティングルーティング
パラメータ構成

活性化パラメータ

トークンあたり37Bの活性化パラメータ。スパース活性化により、各推論計算にはわずか5.5%のパラメータのみが参加し、計算コストを大幅に削減します。

  • 37B / 671B = 5.5% 活性化率
  • 推論コスト90%以上削減

MoE 混合専門家アーキテクチャの詳細

MoE(Mixture of Experts)は DeepSeek の核心的なアーキテクチャ革新です。671B パラメータのうちわずか 37B のみが活性化され、推論コストを大幅に削減します。

専門家ルーティングメカニズム

従来の Transformer では、各トークンは同じ FFN 層で処理されます。MoE アーキテクチャは FFN 層を複数の「専門家」サブネットワークに置き換え、各トークンはゲーティングネットワーク(Gate)を介して最も関連性の高い専門家を選択して計算します。

DeepSeek V3 の MoE 設計は以下の通りです:

  • 総専門家数:256 のルーティング専門家(Routed Expert)+ 8 の共有専門家(Shared Expert)
  • トークンごとの活性化:8 のルーティング専門家 + 1 の共有専門家 = 9 の専門家が計算に参加
  • ゲーティング戦略:Top-K Gating、K = 8(256 の専門家からスコアが最も高い 8 つを選択)
  • 共有専門家:8 の専門家はすべてのトークンに対して常に活性化され、一般的な知識を捕捉します。

Top-K ゲーティングメカニズム

ゲーティングネットワークは線形層であり、トークンの隠れ状態を 256 次元の専門家スコアベクトルにマッピングします。次に、スコアが最も高い K 個の専門家を選択し、softmax 正規化によって各専門家の重みを計算します:

# Top-K ゲーティングルーティング(疑似コード)
gate_logits = Linear(hidden_states) # [batch, seq, 256]
topk_weights, topk_indices = topk_softmax(gate_logits, k=8) # Top-8 専門家を選択
expert_output = sum(weight * expert[expert_idx](hidden_states) for each selected expert)
shared_output = shared_expert(hidden_states) # 共有専門家は常に活性化
final_output = expert_output + shared_output

ここで topk_softmax は最初に Top-K 専門家を選択し、次に選択された専門家間で softmax を実行します。選択されなかった専門家は計算に参加しません。

Auxiliary-Loss-Free 負荷分散

従来の MoE モデルは通常、補助損失(auxiliary loss)を使用して専門家の負荷分散を促進し、「専門家の崩壊」を防ぎます。つまり、ほとんどのトークンが少数の専門家にルーティングされ、残りの専門家がアイドル状態になることを防ぎます。しかし、補助損失はトレーニングの複雑さを増し、モデルのパフォーマンスに影響を与える可能性があります。

DeepSeek は革新的な auxiliary-loss-free 負荷分散戦略を提案しました:

  • Expert Bias 動的調整:各専門家はバイアス項(bias)を維持し、トレーニング中に専門家の負荷に応じて動的に調整します。負荷が高い専門家はバイアスを下げ、負荷が低い専門家はバイアスを上げます。
  • シーケンスレベルの補助損失:トークンレベルではなくシーケンスレベルで軽微なバランス制約を適用し、各シーケンス内の専門家の使用分布が均一になるようにします。
  • 相補的スケジューリング:特定の専門家の負荷が高すぎる場合、システムは一部のトークンを次善の利用可能な専門家に自動的にルーティングします。

なぜ MoE は効率的なのか?

MoE アーキテクチャの核心的な利点は スパース活性化にあります。671B の総パラメータは膨大な知識容量を提供しますが、各推論ではわずか 37B(5.5%)のみが活性化され、計算量は同規模の高密度モデルよりもはるかに少なくなります。

効率の利点

計算量の削減

高密度の671Bモデルは、各推論で全671Bパラメータを計算する必要があります。MoEは37Bの活性化パラメータのみを計算し、計算量は高密度モデルの約1/18です。

  • FLOPsが約94%削減
  • 推論遅延が約90%削減
効率の利点

知識容量の維持

毎回少数のパラメータのみが活性化されるにもかかわらず、671Bの総パラメータ規模により、モデルは高密度モデルよりもはるかに多くの知識を格納でき、異なる専門家が異なる分野に特化しています。

  • 671Bの総知識容量
  • 専門家の専門化
効率の利点

トレーニングコストの最適化

スパース活性化とFP8混合精度トレーニングにより、DeepSeek V3のトレーニングコストは557万ドルに削減され、同等の高密度モデルの1/10から1/20です。

  • 総コスト557万ドル
  • H800 GPUクラスター

MLA マルチヘッド潜在注意メカニズム

Multi-head Latent Attention(MLA)はDeepSeekの注意機構の革新であり、低ランクKV圧縮により推論時のメモリ使用量を大幅に削減します。

従来のMHAの問題

標準的なマルチヘッド注意(Multi-Head Attention, MHA)では、各トークンは後続のトークンの自己回帰生成をサポートするためにKeyとValueベクトルをキャッシュする必要があります。長いシーケンスでは、KVキャッシュのメモリ使用量が急速に増加します:

# 従来のMHAのKVキャッシュサイズ
KV_Cache = 2 * num_layers * num_heads * d_head * seq_len * batch_size
# DeepSeek V3(128ヘッド、128次元、61層、128Kコンテキスト)の場合:
# トークンあたりのKVキャッシュは約61 * 2 * 128 * 128 = 1,998,848フロート = 7.6 MB
# 128KコンテキストのKVキャッシュは約7.6 MB * 128K ≈ 973 GB(許容不可)

MLAの核心的なアイデア:低ランクKV圧縮

MLAの核心的な革新は、KeyとValueを低次元の潜在空間に投影してから注意計算を行うことです。具体的には:

  1. KV圧縮投影:元の高次元のKey/Valueをダウンプロジェクション行列を使用して低次元の潜在ベクトルc_KV(次元は元よりはるかに小さい)に圧縮します。
  2. 潜在ベクトルのキャッシュ:推論時には、完全なKeyとValue行列ではなく、低次元の潜在ベクトルc_KVのみをキャッシュします。
  3. アッププロジェクションによる復元:注意計算時に、アッププロジェクション行列を使用して潜在ベクトルを完全なKeyとValueに復元します。
# MLA注意計算フロー
# 1. 圧縮投影(トレーニング時と推論時の両方で実行)
c_KV = W_down_KV @ hidden_states # [batch, seq, d_latent] d_latent << d_model

# 2. 潜在ベクトルのキャッシュ(推論時のみ)
KV_Cache = c_KV # 低次元の潜在ベクトルのみをキャッシュ

# 3. アッププロジェクションによる復元(注意計算時)
k = W_up_K @ c_KV # 完全なKeyに復元
v = W_up_V @ c_KV # 完全なValueに復元

# 4. 標準的な注意計算
q = W_q @ hidden_states
attention = softmax(q @ k^T / sqrt(d_head)) @ v
output = W_o @ attention

RoPE分離設計

RoPE(Rotary Position Embedding)は、現代のTransformerで広く使用されている位置エンコーディング手法です。しかし、RoPEは低ランク圧縮と競合します:RoPEはKeyベクトルに作用しますが、MLAはKeyとValueの結合表現を圧縮します。

DeepSeekの解決策はRoPE分離です:QueryとKeyをそれぞれ2つの部分に分割します — 一方はRoPEで処理され(位置情報を捕捉)、他方は処理されません(内容情報を保持)。RoPE部分は個別に処理され、KV圧縮には参加しません。

# RoPE分離設計
# Query分割
q_content = W_qc @ hidden_states # コンテンツ部分、RoPE なし
q_rope = W_qr @ hidden_states # 位置部分、RoPE あり
q_rope = RoPE(q_rope)

# Key 分割
k_content = W_kc @ c_KV # コンテンツ部分、潜在ベクトルから復元
k_rope = W_kr @ hidden_states # 位置部分、個別に計算
k_rope = RoPE(k_rope)

# 連結後、アテンションを計算
q = concat(q_content, q_rope)
k = concat(k_content, k_rope)
attention = softmax(q @ k^T / sqrt(d_head)) @ v

メモリ節約の計算

MLA の KV キャッシュ圧縮効果は顕著です。潜在次元を d_latent、元の KV 次元を d_model とします:

圧縮率

MLA 圧縮効果

DeepSeek V3 では、d_latent = 512、従来の MHA の KV 次元は 128 * 128 = 16384 です。圧縮率は約 32:1 です。

  • 潜在次元: 512
  • 元の KV 次元: 16384
  • 圧縮率: ~32x
メモリ節約

実際の効果

128K コンテキストウィンドウでは、MLA は KV キャッシュを約 973 GB から約 40 GB に削減し、単一 GPU での長文脈推論を可能にします。

  • 従来の MHA: ~973 GB
  • MLA: ~40 GB
  • 節約: ~96%
推論高速化

スループット向上

KV キャッシュが小さいほど、メモリ読み書きが減り、スループットが向上します。MLA により、長文脈推論のスループットが 3〜5 倍向上します。

  • メモリ帯域幅の節約: ~90%
  • スループット向上: 3-5x

MTP マルチトークン予測メカニズム

Multi-Token Prediction (MTP) により、モデルは複数の将来トークンを同時に予測し、トレーニング効率と推論品質を向上させます。

MTP の動作原理

従来の自己回帰モデルは、各ステップで次のトークンのみを予測します。MTP では、各ステップで次の N 個のトークンを同時に予測します(DeepSeek V3 では M = 1、つまり追加で 1 トークン予測し、合計 2 トークン)。

MTP の核となる考え方は、モデルのバックボーンネットワークが隠れ状態を出力した後、複数の独立した「予測ヘッド」を使用して、t+1, t+2, ..., t+M 位置のトークンをそれぞれ予測することです。

# MTP 順伝播(DeepSeek V3、M=1)
# メインモデル順伝播
hidden = transformer(input_tokens) # メインモデル出力

# 最初の予測ヘッド(t+1 を予測、標準の next-token prediction)
logits_1 = lm_head(hidden) # 次のトークンを予測
loss_1 = cross_entropy(logits_1, tokens[:, 1:])

# 2 番目の予測ヘッド(t+2 を予測)
hidden_2 = MTP_Module(hidden, embedding(tokens[:, :-1])) # MTP モジュール
logits_2 = mtp_head(hidden_2) # 次の次のトークンを予測
loss_2 = cross_entropy(logits_2, tokens[:, 2:])

total_loss = loss_1 + lambda * loss_2 # 重み付き組み合わせ

MTP モジュール設計

MTP モジュールは軽量な Transformer 層で、メインモデルの隠れ状態と現在のトークンの埋め込みを入力として受け取り、将来のトークンの予測を出力します:

  • 入力融合:メインモデルの隠れ状態と現在のトークンの埋め込みを連結し、線形層で融合します。
  • Transformer ブロック:標準の Transformer 層(アテンションと FFN を含む)で、融合された表現をさらに処理します。
  • 出力ヘッド:共有の LM Head が処理された表現を語彙分布にマッピングします。

トレーニング効率の向上

MTP はトレーニング段階でより強力な学習信号を提供します。モデルは次のトークンだけでなく、その後のトークンも予測する必要があるため、より長期的な依存関係を学習することを余儀なくされます。

トレーニング効果

より強力なトレーニング信号

複数の予測ターゲットにより、より豊富な勾配信号が得られ、モデルの収束が速くなります。各トレーニングステップで得られる情報量は従来の 2 倍です。

  • 収束速度が約 30% 向上
  • 同じデータ量でより良い結果
トレーニング効果

長期的な計画能力

MTP はモデルに「先読み」を強制し、長距離依存関係のモデリングを向上させます。これは R1 の推論能力向上の重要な理由の 1 つでもあります。

  • 長距離依存関係のモデリング向上
  • 推論の一貫性向上

推論フェーズ:MTP モジュールは破棄可能

MTP の重要な設計は、MTP モジュールは推論時に完全に破棄できることです。推論時にはメインモデルの標準的な next-token prediction のみが使用され、MTP モジュールは推論計算に参加しないため、推論速度に影響しません。

MTP による推論高速化は主に、トレーニング段階でより良い表現を学習したため、メインモデル(MTP モジュールを含まない)の推論品質が向上し、同じタスクで必要な推論ステップが少なくなることに現れます。

推論時の投機的復号(Speculative Decoding): MTP モジュールは標準的な推論では使用されませんが、投機的復号の「ドラフトモデル」として使用でき、複数の候補トークンを同時に生成し、メインモデルが検証することで推論を高速化できます。このモードでは、推論速度が 1.5〜2 倍向上します。

FP8 混合精度トレーニング技術

DeepSeek は超大規模モデルで FP8 トレーニングの実現可能性を初めて検証し、トレーニングコストを 557 万ドルに削減しました。

FP8 vs BF16 vs FP32

ディープラーニングトレーニングで一般的に使用されるデータ精度の比較:

精度フォーマット 総ビット数 指数ビット 仮数ビット 動的範囲 メモリ使用量
FP32 32 8 23 3.4 x 10^38 4 バイト / パラメータ
BF16 16 8 7 3.4 x 10^38 2 バイト / パラメータ
FP8 E4M3 8 4 3 448 1 バイト / パラメータ

FP8 のメモリ使用量は BF16 の半分、FP32 の 4 分の 1 ですが、動的範囲が小さい(E4M3 形式)ため、トレーニングの安定性が非常に重要です。

ブロック単位量子化(Block-wise Quantization)

DeepSeek は FP8 の動的範囲不足を解決するためにブロック単位量子化戦略を採用しています:

  • ブロック戦略:アクティベーションと重みを 128x128 のブロックにグループ化し、各ブロックでスケールファクターを個別に計算します。
  • オンラインスケーリング:スケールファクターは現在のブロックの最大絶対値に基づいて動的に計算され、量子化精度を保証します。
  • 高精度累積:行列乗算の累積はFP32精度で行われ、量子化誤差の蓄積を防ぎます。
# ブロック単位量子化の擬似コード
# 順伝播: FP8行列乗算
for each block (128x128) in activation_matrix:
scale = max(abs(block)) / 448 # E4M3の最大値は448
block_fp8 = round(block / scale) # FP8に量子化
output_block = block_fp8 @ weight_fp8 # FP8行列乗算
output_block = output_block * scale # 逆量子化

# 逆伝播: 勾配はBF16精度で計算
gradient = backward(output, loss) # BF16勾配

トレーニング安定性の保証

671B規模でのFP8トレーニングは非常に困難です。DeepSeekは複数の安定性対策を採用しています:

安定性対策

混合精度戦略

順伝播ではFP8計算(GEMM操作)を使用し、勾配計算とオプティマイザ状態はBF16/FP32を使用します。重要なパス(softmax、layernormなど)は高精度を維持します。

  • 順伝播GEMM: FP8
  • 勾配/オプティマイザ: BF16/FP32
  • 重要な操作: 高精度
安定性対策

動的勾配スケーリング

トレーニング中に勾配スケーリング係数を動的に調整し、FP8のアンダーフローとオーバーフローを防ぎます。

  • 適応的スケーリング係数
  • オーバーフロー検出とフォールバック
コスト効果

総コスト557万ドル

FP8トレーニングによりメモリ要件が半減し、トレーニング速度が約40%向上します。DeepSeek V3は2048台のH800 GPUで約2ヶ月トレーニングされ、総コストはわずか557万ドルです。

  • メモリ: 50%削減
  • トレーニング速度: 40%向上
  • 総コスト: 557万ドル

DeepSeekMoEアーキテクチャ最適化の詳細

細粒度エキスパート分割、共有エキスパート分離、動的ルーティング – DeepSeekMoEの3つの中核的最適化。

細粒度エキスパート分割

従来のMoEモデルは通常、少数の大きなエキスパート(例:8エキスパート、各エキスパートは完全なFFN)を使用します。DeepSeekMoEは各大きなエキスパートをさらに複数の小さなエキスパートに分割し、より細かい専門化を実現します:

  • 分割戦略:1つの標準FFNエキスパート(例:8倍の中間次元)を2つの細粒度エキスパート(各4倍の中間次元)に分割し、各エキスパートはより細かい知識パターンに特化します。
  • ルーティングの柔軟性:エキスパートが多いほど、より柔軟な組み合わせが可能です。異なるトークンは異なるエキスパートサブセットを選択でき、より正確な知識活性化を実現します。
  • 負荷分散の利点:細粒度分割によりエキスパートの負荷がより均一になり、各エキスパートのパラメータ数が減少し、個々のエキスパートの過負荷リスクが低減します。

共有エキスパート分離

DeepSeekMoEは「共有エキスパート」の概念を導入し、ルーティングエキスパートから分離します:

共有エキスパート

常時活性化される汎用知識

8つの共有エキスパートはすべてのトークンに対して常に活性化され、分野横断的な汎用知識(構文、常識、基本的推論など)を捕捉します。ルーティング競争には参加せず、ベースライン能力を保証します。

  • 8つの共有エキスパート
  • 常時活性化、ルーティングなし
  • 汎用知識を捕捉
ルーティングエキスパート

オンデマンドの専門知識

256のルーティングエキスパートはTop-8ゲーティングで選択的に活性化され、各エキスパートは特定の分野(数学、プログラミング、医学、法律など)に特化します。

  • 256のルーティングエキスパート
  • Top-8選択的活性化
  • 分野特化知識

動的ルーティングとエキスパート負荷統計

DeepSeekMoEのルーティングシステムはトレーニング中に動的に調整され、エキスパート負荷の均衡を確保します:

# 動的バイアス調整
# 各トレーニングステップ後にエキスパートバイアスを更新
for expert in range(num_experts):
load = expert_token_count[expert] / total_tokens
if load > target_load * 1.2:
expert_bias[expert] -= learning_rate # 人気エキスパートのバイアスを下げる
elif load < target_load * 0.8:
expert_bias[expert] += learning_rate # 不人気エキスパートのバイアスを上げる

# ルーティング時にバイアスを加算
gate_logits = Linear(hidden_states) + expert_bias
topk_weights, topk_indices = topk_softmax(gate_logits, k=8)

この動的バイアスメカニズムにより、追加の補助損失関数を必要とせずにトレーニング中にエキスパート負荷が自動的に均衡化され、補助損失がモデル性能に与える潜在的な悪影響を回避します。

DeepSeek R1 推論アーキテクチャ詳細解説

強化学習に基づく推論強化モデル。GRPOアルゴリズム、思考連鎖の創発、知識蒸留——R1のコア技術の全体像。

RLトレーニングパイプライン

DeepSeek R1のトレーニングは複数の段階に分かれており、最終的に強力な推論能力を形成します:

段階 方法 目的
段階1:コールドスタートSFT 少量の高品質な思考連鎖データでファインチューニング モデルに基本的な推論形式と思考連鎖パターンを獲得させる
段階2:推論RL 推論タスクでGRPO強化学習を使用 数学、プログラミング、論理的推論能力を向上
段階3:拒否サンプリング RLモデルからサンプリングし、高品質な出力を選別 高品質なSFTデータセットを構築
段階4:全領域SFT 推論データと汎用データを混合してファインチューニング 推論能力を維持しつつ汎用能力を回復
段階5:全領域RL すべてのタスクでRLHFアライメントを使用 有用性、安全性、無害性を向上

GRPO(Group Relative Policy Optimization)

GRPOはDeepSeekが提案した強化学習アルゴリズムで、PPO(Proximal Policy Optimization)の改良版です。核心的な考え方は:

  • グループ内相対優位性:各質問に対して複数の候補回答(グループ)を生成し、グループ内の平均報酬をベースラインとして相対優位性を計算します。絶対的な報酬値は使用しません。
  • Criticモデル不要:従来のPPOではポリシーモデルと同規模のCritic(価値)モデルが必要ですが、GRPOはグループ内比較によりCriticモデルの必要性を排除し、トレーニングリソースを約50%節約します。
  • KLダイバージェンス制約:損失関数で直接KLダイバージェンスを推定し、ポリシー更新の大きさを制限して、モデルが参照ポリシーから逸脱しすぎるのを防ぎます。
# GRPOのコアロジック
# 各質問に対して、G個の候補回答を生成
group_responses = [model.generate(question) for _ in range(G)]
group_rewards = [reward_model(question, r) for r in group_responses]

# グループ内相対優位性(平均を引き、標準偏差で割る)
mean_reward = mean(group_rewards)
std_reward = std(group_rewards)
advantages = [(r - mean_reward) / std_reward for r in group_rewards]

# ポリシー勾配更新
loss = -mean(advantages * log_prob_ratio - beta * kl_divergence)
model.update(loss)

報酬モデリング

R1の報酬モデルには2つの核心的な次元があります:

報酬次元

正確性報酬

数学問題では最終回答が正しいか、プログラミング問題ではコードがテストケースを通過するか、推論問題では結論が論理的に一貫しているかをチェックします。

  • 回答の正確性検証
  • コードのテスト合格率
  • 論理的一貫性チェック
報酬次元

形式報酬

モデルが推論プロセスを専用タグ内に配置することを奨励し、出力形式を標準化し読みやすくします。これによりモデルが構造化された思考連鎖を形成するのに役立ちます。

  • 推論プロセスの形式標準化
  • 構造化された思考連鎖の出力

思考連鎖の創発

R1の最も驚くべき特徴は「思考連鎖の創発」です。純粋なRLトレーニング(R1-Zero)では、モデルは人間が注釈した推論ステップなしで自律的に以下を学習しました:

  • 自己検証:推論中に中間ステップが正しいかどうかをチェックします。
  • 反省とバックトラッキング:推論エラーを検出すると、以前のステップに自動的に戻って再推論します。
  • 複数経路探索:複数の推論経路を試し、最も合理的な結果を選択します。
  • 「Ahaモーメント」:モデルは推論中に人間の「ひらめき」に似た瞬間を示し、以前の推論経路を再評価して修正します。

小モデルへの知識蒸留

DeepSeekはR1 671Bの推論能力を小モデル(1.5Bから70B)に蒸留し、80万の厳選された推論サンプルを使用します:

蒸留戦略

データ選定

R1 671Bの出力から80万の高品質な推論サンプルを選定し、数学、プログラミング、科学的推論など複数の領域をカバーします。

  • 80万の厳選サンプル
  • 複数領域のカバレッジ
  • 高品質フィルタリング
蒸留戦略

蒸留対象モデル

Qwen-2.5(1.5B/7B/14B/32B)とLlama-3.1/3.3(8B/70B)に基づいて蒸留し、小モデルが強力な推論能力を獲得できるようにします。

  • Qwen-2.5シリーズ
  • Llama-3.1/3.3シリーズ
  • 1.5Bから70Bまで完全カバー

コアモジュールのコード実装

DeepSeek-V3 オープンソースコードに基づくコアモジュールの実装。実際の変数名と構造を使用。

MoE フォワード伝播

# DeepSeekMoE フォワード伝播(DeepSeek-V3 オープンソースコードに基づく) class DeepSeekMoE(nn.Module): def __init__(self): self.num_experts = 256 # ルーティング専門家の数 self.num_shared_experts = 8 # 共有専門家の数 self.top_k = 8 # Top-K ルーティング self.n_routed_experts = 256 self.routed_scaling_factor = 1.0 # ゲーティングネットワーク self.gate = nn.Linear(hidden_size, self.n_routed_experts, bias=False) # ルーティング専門家(各専門家は FFN) self.experts = nn.ModuleList([ ExpertFFN() for _ in range(self.num_experts) ]) # 共有専門家 self.shared_experts = SharedExpertFFN() def forward(self, hidden_states): identity = hidden_states orig_shape = hidden_states.shape # 1. ゲーティングルーティング gate_logits = self.gate(hidden_states) # Top-K 専門家を選択 weights, indices = torch.topk(gate_logits, self.top_k, dim=-1) weights = F.softmax(weights, dim=-1, dtype=torch.float32) # 2. ルーティング専門家の計算 routed_output = self.moe_forward(hidden_states, weights, indices) # 3. 共有専門家の計算(常に活性化) shared_output = self.shared_experts(identity) # 4. 出力を結合 final_output = routed_output + shared_output return final_output def moe_forward(self, hidden_states, topk_weights, topk_ids): # トークンを割り当てられた専門家ごとにグループ化 outputs = torch.zeros_like(hidden_states) for expert_idx in range(self.num_experts): # この専門家に割り当てられたトークンを見つける expert_mask = (topk_ids == expert_idx).any(dim=-1) if not expert_mask.any(): continue expert_input = hidden_states[expert_mask] expert_output = self.experts[expert_idx](expert_input) # 重み付き累積 weight = topk_weights[expert_mask][topk_ids[expert_mask] == expert_idx] outputs[expert_mask] += expert_output * weight.unsqueeze(-1) return outputs

MLA アテンション実装

# MLA マルチヘッド潜在アテンション(DeepSeek-V3 オープンソースコードに基づく) class MultiHeadLatentAttention(nn.Module): def __init__(self): self.q_lora_rank = 1536 # Query 低ランク分解次元 self.kv_lora_rank = 512 # KV 結合圧縮次元 self.qk_rope_head_dim = 64 # RoPE 部分の次元 self.qk_nope_head_dim = 128 # 非 RoPE 部分の次元 self.v_head_dim = 128 self.num_heads = 128 # Query 低ランク分解 self.q_a_proj = nn.Linear(hidden_size, self.q_lora_rank, bias=False) self.q_a_layernorm = nn.RMSNorm(self.q_lora_rank) self.q_b_proj = nn.Linear(self.q_lora_rank, self.num_heads * (self.qk_nope_head_dim + self.qk_rope_head_dim)) # KV 結合圧縮 self.kv_a_proj_with_mqa = nn.Linear( hidden_size, self.kv_lora_rank + self.qk_rope_head_dim, bias=False) self.kv_a_layernorm = nn.RMSNorm(self.kv_lora_rank) self.kv_b_proj = nn.Linear( self.kv_lora_rank, self.num_heads * (self.qk_nope_head_dim + self.v_head_dim)) def forward(self, hidden_states, freqs_cis, kv_cache=None): # 1. Query 低ランク分解 q = self.q_a_proj(hidden_states) q = self.q_a_layernorm(q) q = self.q_b_proj(q) q = q.view(-1, self.num_heads, self.qk_nope_head_dim + self.qk_rope_head_dim) q_nope, q_rope = q.split([self.qk_nope_head_dim, self.qk_rope_head_dim], dim=-1) q_rope = apply_rotary_emb(q_rope, freqs_cis) # RoPE エンコーディング # 2. KV 結合圧縮 kv_a = self.kv_a_proj_with_mqa(hidden_states) c_kv, k_rope = kv_a.split([self.kv_lora_rank, self.qk_rope_head_dim], dim=-1) k_rope = apply_rotary_emb(k_rope.unsqueeze(1), freqs_cis) # RoPE エンコーディング # 3. 低次元潜在ベクトル c_KV をキャッシュ(推論時) if kv_cache is not None: kv_cache.append(c_kv) # 4. 上投影で Key と Value を復元 c_kv = self.kv_a_layernorm(c_kv) kv = self.kv_b_proj(c_kv) kv = kv.view(-1, self.num_heads, self.qk_nope_head_dim + self.v_head_dim) k_nope, v = kv.split([self.qk_nope_head_dim, self.v_head_dim], dim=-1) # 5. Query と Key の各部分を連結 q = torch.cat([q_nope, q_rope], dim=-1) k = torch.cat([k_nope, k_rope.expand(-1, self.num_heads, -1)], dim=-1) # 6. 標準アテンション計算 attn_weights = torch.matmul(q, k.transpose(-2, -1)) / math.sqrt( self.qk_nope_head_dim + self.qk_rope_head_dim) attn_weights = F.softmax(attn_weights, dim=-1) output = torch.matmul(attn_weights, v) return output

MTP モジュール実装

# MTP マルチトークン予測モジュール(DeepSeek-V3 オープンソースコードに基づく) class MultiTokenPredictionModule(nn.Module): def __init__(self): self.hidden_size = 7168 # 入力融合層 self.embedding_norm = nn.RMSNorm(hidden_size) self.hidden_norm = nn.RMSNorm(hidden_size) self.input_proj = nn.Linear(hidden_size * 2, hidden_size, bias=False) # MTP Transformer ブロック self.mtp_block = TransformerBlock() # 出力投影(共有 LM Head) self.output_norm = nn.RMSNorm(hidden_size) self.shared_head = nn.Linear(hidden_size, vocab_size, bias=False) def forward(self, hidden_states, input_ids): # 1. 現在のトークンの埋め込みを取得 token_emb = self.embedding_norm(embedding(input_ids)) # 2. メインモデルの隠れ状態とトークン埋め込みを融合 hidden_norm = self.hidden_norm(hidden_states) combined = torch.cat([hidden_norm, token_emb], dim=-1) combined = self.input_proj(combined) # 3. MTP Transformer ブロックを通過 mtp_output = self.mtp_block(combined) # 4. 出力予測 mtp_output = self.output_norm(mtp_output) logits = self.shared_head(mtp_output) return logits # トレーニング時に使用 hidden = transformer(input_ids) # メインモデルのフォワード logits_main = lm_head(hidden) # 標準の next-token 予測 logits_mtp = mtp_module(hidden, input_ids) # MTP 追加予測 loss_main = cross_entropy(logits_main[:, :-1], targets[:, 1:]) loss_mtp = cross_entropy(logits_mtp[:, :-2], targets[:, 2:]) total_loss = loss_main + 0.3 * loss_mtp # 加重組み合わせ

DeepSeek モデルのパフォーマンス分析

FLOPs 利用率、メモリ帯域幅、通信オーバーヘッド、スケーリング効率——DeepSeek のパフォーマンス全体像。

FLOPs 利用率

指標 DeepSeek V3 説明
理論ピーク FLOPs ~990 TFLOPS(H800 FP8) 単一 H800 GPU の FP8 理論ピーク
実際の達成 FLOPs ~580 TFLOPS トレーニング中の実際の計算スループット
FLOPs 利用率 ~58.6% 業界平均(通常 30-45%)をはるかに上回る

DeepSeek は、慎重に設計された計算カーネルと通信オーバーラップ戦略により、非常に高い FLOPs 利用率を達成しています。58.6% の利用率は MoE モデルの中でもトップレベルです(MoE モデルは、スパースな活性化と all-to-all 通信のため、通常は高密度モデルよりも利用率が低くなります)。

メモリ帯域幅の分析

メモリ分析

モデル重み

671B パラメータ、FP8 形式で保存。総重みメモリは約 671 GB(FP8)、BF16 形式では約 1342 GB。

  • FP8: ~671 GB
  • BF16: ~1342 GB
  • FP8 を使用すると 50% 削減
メモリ分析

KV キャッシュ(MLA)

MLA は KV キャッシュを従来方式の 1/32 に圧縮します。128K コンテキストでの KV キャッシュは約 40 GB。

  • 従来の MHA: ~973 GB
  • MLA: ~40 GB
  • 削減: ~96%
メモリ分析

オプティマイザ状態

AdamW オプティマイザは、モメンタムと分散(FP32)を保存する必要があり、パラメータあたり約 8 バイト。オプティマイザ状態は約 5.4 TB(FP32)。

  • モメンタム: 671B * 4 バイト
  • 分散: 671B * 4 バイト
  • 合計: ~5.4 TB

通信オーバーヘッド

MoE モデルの分散トレーニングには、2 つの通信パターンが含まれます:

  • All-Reduce(データ並列): すべての GPU 間で勾配を同期し、通信量は GPU 数に比例します。DeepSeek は 2048 台の H800 GPU を使用し、効率的な Ring All-Reduce アルゴリズムを採用しています。
  • All-to-All(エキスパート並列):現在のGPUから対応するエキスパートが存在するGPUへトークンを送信します。これはMoEモデル特有の通信オーバーヘッドであり、DeepSeekはエキスパートの均等分散と通信オーバーラップ戦略によりこれを最小化しています。
通信最適化戦略:DeepSeekは「計算-通信オーバーラップ」技術を採用し、GPU計算と同時に通信を行い、通信オーバーヘッドを計算に隠蔽します。緻密なパイプライン設計により、通信オーバーヘッドは総トレーニング時間の15%以内に抑えられています。

スケーリング効率

GPU数 1ステップあたりの時間 スケーリング効率 説明
256 H800 約8.0秒 100%(ベースライン) 強スケーリングのベースライン
512 H800 約4.5秒 約89% 通信オーバーヘッドの増加
1024 H800 約2.6秒 約77% All-to-All通信オーバーヘッドが顕著
2048 H800 約1.5秒 約67% トレーニング構成、スケーリング効率は依然として許容範囲

DeepSeek V3は2048基のH800 GPUで約67%のスケーリング効率を達成しています。671BパラメータのMoEモデルとしては、かなり優れた結果です。高密度モデルと比較して、MoEのAll-to-All通信がスケーリング効率の主要なボトルネックですが、DeepSeekは通信オーバーラップとエキスパート分布の最適化により、この影響を最小限に抑えています。

DeepSeek関連リソース

DeepSeekモデルの詳細を、使用方法からデプロイ、開発者エコシステムまで深く掘り下げます。

DeepSeek モデルアーキテクチャに関するFAQ

DeepSeek V3 の 671B パラメータと 37B アクティブパラメータとは何ですか? +
671B はモデルの総パラメータ数(すべてのエキスパートパラメータの合計)であり、37B は各トークンの推論時に実際に活性化されるパラメータ数です。MoE アーキテクチャはスパース活性化メカニズムを採用しており、各トークンは 8 つのルーティングエキスパートと 1 つの共有エキスパート(合計 9 つのエキスパート)にのみルーティングされるため、実際に計算に関与するパラメータは約 37B(総パラメータの 5.5%)に過ぎません。これにより、推論コストが大幅に削減されると同時に、671B パラメータの知識容量が維持されます。
MLA(マルチヘッド潜在注意)は従来の注意機構より優れている点は何ですか? +
MLA の核心的な利点は KV キャッシュの圧縮にあります。従来の MHA は完全な Key と Value の行列をキャッシュする必要があり、128K コンテキストでは約 1TB の GPU メモリを占有する可能性があります。MLA は低ランクの KV 結合圧縮を使用して、Key と Value を低次元の潜在空間(例:512 次元)に投影し、キャッシュ量を従来の約 1/32 に削減します。同時に、RoPE の分離設計により、回転位置エンコーディングの利点が保持されます。これにより、長いコンテキストの推論が単一 GPU で可能になり、推論スループットが 3〜5 倍向上します。
MTP(マルチトークン予測)は推論速度に影響しますか? +
いいえ。MTP モジュールは設計上、推論時には完全に破棄できます。推論時には標準のメインモデルの next-token prediction のみが使用されます。MTP はトレーニング段階でのみ機能し、より強力な学習信号を提供して、モデルがより良い表現と長距離依存関係を学習するのを助けます。さらに、MTP モジュールは投機的デコーディングのドラフトモデルとして使用でき、複数の候補トークンを同時に生成し、メインモデルが検証します。このモードでは、推論速度が 1.5〜2 倍向上します。
DeepSeek は MoE モデルのエキスパート負荷不均衡問題をどのように解決しますか? +
DeepSeek は革新的な補助損失なしの負荷分散戦略を提案しています。従来の MoE は補助損失関数を使用してエキスパートの負荷を強制的に均衡させますが、モデルの性能に影響を与える可能性があります。DeepSeek のアプローチは、各エキスパートに動的バイアス項を維持し、トレーニング中にエキスパートの負荷に応じて自動的に調整するものです。負荷が高すぎる場合はバイアスを下げ、低すぎる場合はバイアスを上げます。同時に、細粒度のエキスパート分割(256 のルーティングエキスパート)と共有エキスパートの分離(8 つの共有エキスパートが常に活性化)を組み合わせ、シーケンスレベルで軽微なバランス制約を適用することで、補助損失なしの負荷分散を実現します。
DeepSeek R1 の強化学習トレーニングは従来の RLHF とどう違いますか? +
DeepSeek R1 は GRPO(Group Relative Policy Optimization)アルゴリズムを採用しており、PPO の改良版です。主な違いは次のとおりです。1)GRPO は Critic モデル(価値ネットワーク)を必要とせず、グループ内の相対比較(同じ質問に対して複数の回答を生成し、グループ平均報酬をベースラインとして使用)によってアドバンテージを推定するため、トレーニングリソースを約 50% 節約できます。2)R1 の RL トレーニングは推論能力に焦点を当てており、正確性報酬(回答の正しさ)と形式報酬を使用します。従来の RLHF の人間の好みに基づく報酬ではありません。3)R1 のトレーニングパイプラインには、コールドスタート SFT、推論 RL、拒否サンプリング、全ドメイン SFT、全ドメイン RL の 5 つの段階が含まれており、体系的な推論能力強化のためのアプローチです。
FP8 トレーニングは 671B スケールでどのように安定性を維持しますか? +
DeepSeek は 671B スケールで FP8 トレーニングの実現可能性を検証しており、いくつかの主要技術に依存しています。1)ブロック量子化(Block-wise Quantization):アクティベーション値と重みを 128x128 ブロックにグループ化し、各ブロックでスケーリングファクターを個別に計算して量子化精度を確保します。2)混合精度戦略:フォワード GEMM は FP8 を使用し、勾配とオプティマイザ状態は BF16/FP32 を使用し、重要な操作(softmax、layernorm)は高精度を維持します。3)動的勾配スケーリング:トレーニング中にスケーリングファクターを適応的に調整し、FP8 のアンダーフローとオーバーフローを防ぎます。これらの対策により、超大規模での FP8 トレーニングが安定して収束し、メモリ使用量が半分になり、トレーニング速度が約 40% 向上し、総コストが 557 万ドルに削減されます。

参考来源と関連資料

このページの技術内容はDeepSeekの公式論文と技術レポートに基づいており、ご自身で確認いただけます。

每日精选 Skill 推荐,免费送到你邮箱

输入邮箱,每天接收一个精选 AI Agent 技能推荐。完全免费,持续更新。

完全免费,取消任意时间。我们不会发送垃圾邮件。