DeepSeek V4技术深度解析:国产最强模型如何以1/30价格对标GPT-5.5

写在前面:本文基于 2026 年 7 月 DeepSeek V4 正式发布后的公开技术资料、官方论文(DeepSeek-V2/V3/R1 技术报告)以及作者一线推理优化经验整理而成。全文约 6 万字,含可运行 Python 代码、架构图解、横向对比表格,以及 10 道高频面试题。建议先收藏,再慢慢看。

一句话总结:DeepSeek V4 Pro 用 ¥3/百万 token 的输入价格,把 GPT-5.5 的 $5/百万 token 按在地上摩擦,价格只有后者的 1/30,而 MMLU/GPQA 等核心榜单分数咬得很紧。它凭什么这么便宜?答案藏在三个词里:MLA、MoE、FP8


前言:为什么全网都在聊 DeepSeek V4?

2026 年 7 月,大模型圈又炸了。

原因很简单:DeepSeek V4 Pro 把旗舰模型的输入价格打到了 ¥3/百万 token,输出 ¥8/百万 token;而轻量的 V4 Flash 更狠,输出只要 ¥2/百万 token。对比一下大洋彼岸的 GPT-5.5:输入 $5、输出 $15(按 7.2 汇率算,约 ¥36/¥108),DeepSeek 的输入价格只有 GPT-5.5 的 1/30,输出也是 1/13 左右。

更有意思的是,GLM-4.7 Flash 直接 免费,豆包 2.0、Kimi K3 也在疯狂卷价格。国产模型把"价格战"打成了"价格屠杀"。

但作为技术人,我们不能只看热闹。真正值得深究的问题是:

  1. 凭什么这么便宜? 同样是万亿级参数的模型,DeepSeek 的训练成本只有同行零头,推理成本也只有零头。这背后不是"亏本赚吆喝",而是架构层面的代际差距。
  2. MLA 到底牛在哪? 为什么 KV Cache 能压到 1/30?为什么 GQA/MQA 做不到?
  3. MoE 的 256 选 8 怎么做到不崩的? 专家路由崩塌是世界级难题,DeepSeek 凭什么"通盘无妙手"?
  4. FP8 训练真的稳吗? DeepSeek 是业内第一个大规模验证 FP8 训练的团队,他们踩了哪些坑?
  5. 面试会怎么问? 现在 MLA、MoE、FP8 已经成了大厂算法岗的必考点。

这篇文章就把这些问题一次性讲透。我会用大量类比、可运行代码、对比表格,让你看完既能跟面试官 battle,又能直接上手写应用。

适合人群:算法工程师、后端工程师、AI 应用开发者、准备面试的同学、对大模型架构感兴趣的技术爱好者。

阅读建议:第 3、4 章是硬核数学+架构,建议配杯咖啡;第 7 章代码可直接复制运行;第 11 章面试题建议先自己想答案再对答案。


目录


一、从 V1 到 V4:DeepSeek 的技术演进路线

要看懂 V4,得先看懂 DeepSeek 这条"技术长征路"。很多人以为 DeepSeek 是一夜爆红,其实它的 MoE 优化工作从 2021 年就开始了。我们用一张表把演进路线捋清楚。

1.1 四代模型一图看懂

版本 发布时间 总参数 激活参数 核心架构创新 关键意义
DeepSeek-V1 (MoE) 2024.01 16B 2.8B 细粒度专家分割 + 共享专家隔离 确立"专家专业化"路线
DeepSeek-V2 2024.05 236B 21B MLA 首次提出 + Device-Limited Routing 推理成本断崖式下降
DeepSeek-V3 2024.12 671B 37B FP8 训练 + 无辅助损失负载均衡 + MTP 训练成本仅 $557万
DeepSeek-R1 2025.01 671B 37B RL 推理能力 + 知识蒸馏 推理能力对标 o1,开源
DeepSeek-V4 (Pro/Flash) 2026.07 671B / 238B 37B / 21B MLA v2 + MoE 通信重构 + 长上下文 + 多模态 价格对标 GPT-5.5,1/30 成本

一个关键认知:DeepSeek 的三代 MoE 论文题目一脉相承——《Towards Ultimate Expert Specialization》(迈向终极专家专业化)→《A Strong, Economical, and Efficient MoE》(强大、经济、高效)→《V3 Technical Report》。它从一开始就死磕一件事:用稀疏激活换性价比。这才是它能在 2026 年把价格打到 1/30 的根本原因。

1.2 V1:种下"专家专业化"的种子

2024 年 1 月的 DeepSeekMoE 论文,解决的是一个看似简单的问题:专家太少,知识太杂。

传统 MoE(比如 Mixtral 8x7B)只有 8 个专家,每个专家要学的内容又多又杂。打个比方:8 个专家就像 8 个"全科医生",什么病都得看,结果哪个都不精。

DeepSeek 的解法很巧妙,两招:

  1. 细粒度专家分割(Fine-Grained Expert Segmentation):把每个大专家拆成 m 个小专家,专家数从 8 变成 64,但总参数和计算量不变。这样每个 token 可以从更多组合里挑,"专科医生"更专业。
  2. 共享专家隔离(Shared Expert Isolation):单独留出 2 个"共享专家",不管路由怎么选,每个 token 都必走这 2 个共享专家。它们专门负责"通用知识"(比如语法、常识),避免每个路由专家重复学一遍,减少参数冗余。

V1 模型配置:64 个路由专家,每个 token 激活 6 个 + 2 个共享专家。这个设计成为后续所有版本的基因。

1.3 V2:MLA 诞生,推理成本第一次断崖

2024 年 5 月的 V2 是个分水岭。它做了两件大事:

  • 首次提出 MLA(Multi-head Latent Attention):把 KV Cache 压缩到原来的几十分之一,长上下文推理的显存瓶颈被打通。这一招是 DeepSeek 的"独门绝技",后面专门用一章讲。
  • 专家数扩到 160,配合 Device-Limited Routing(设备受限路由)解决多机训练的通信问题。

V2 让 DeepSeek 第一次有了"Economical(经济)"的标签——同样的效果,推理成本只有 LLaMA-3 70B 的几分之一。

1.4 V3 + R1:FP8 训练 + 推理能力爆发

2024 年底的 V3 是"集齐龙珠"的一代:

  • 671B 总参数,37B 激活,专家数扩到 256 选 8 + 1 共享专家
  • FP8 混合精度训练:业内首次大规模验证 FP8 训练可行性,训练总成本仅 $557 万美元(对比 GPT-4 估计 $1 亿+)。
  • 无辅助损失的负载均衡:用 bias 项替代 aux loss,路由更稳。
  • MTP(Multi-Token Prediction):一次预测多个 token,训练信号更密。
  • DualPipe 双向流水线:计算和通信重叠,把 MFU(模型算力利用率)拉满。

2025 年 1 月的 R1 则在 V3 基础上,用大规模 RL(强化学习)训出了强大的推理能力,对标 OpenAI o1,并且完全开源。R1 的发布直接引发了全球"蒸馏 R1"的热潮,无数小模型靠蒸馏 R1 获得了推理能力。

1.5 V4:价格屠夫的终极形态

2026 年 7 月的 V4,是在 V3/R1 架构上的"精雕细琢 + 量变到质变":

  • MLA v2:进一步优化潜在维度配置,KV Cache 压缩比再提升。
  • MoE 通信重构:针对跨节点 All-to-All 通信做了 PTX 级优化,专家分布更均衡。
  • 原生长上下文:Pro 支持 128K,Flash 支持 256K(通过稀疏注意力)。
  • 多模态:原生支持图像输入,不再是外挂视觉编码器。
  • 双版本策略:Pro(671B/37B 激活)打旗舰,Flash(238B/21B 激活)打性价比。

V4 最大的意义不是某项技术的突破,而是把"性价比"做成了不可复制的护城河。当别人还在卷参数和效果时,DeepSeek 已经把成本打到了让对手窒息的位置。

类比:如果 GPT-5.5 是一辆布加迪(贵、快、但油耗惊人),那 DeepSeek V4 就是一辆魔改的比亚迪——同样的极速,油耗只有 1/30。这不是靠偷工减料,而是靠"三电系统"(MLA/MoE/FP8)的代差。


二、V4 架构总览:671B 参数如何只激活 37B

这一章我们先建立全局观,搞清楚 V4 的"骨架"长什么样,后面几章再拆解每块"肌肉"。

2.1 整体架构图(文字版)

DeepSeek V4 Pro 仍然沿用 V3 确立的 Decoder-only Transformer + MoE 架构,但每个模块都做了升级:

┌─────────────────────────────────────────────────────────┐
│                    Input Embedding                       │
│                  (vocab: 129280, dim:7168)               │
└────────────────────────────┬────────────────────────────┘
                             │
              ┌──────────────▼──────────────┐
              │   Transformer Block × 61    │  ← 每层结构如下
              │  ┌────────────────────────┐ │
              │  │  1. RMSNorm            │ │
              │  │  2. MLA (注意力)        │  │  ← KV Cache 压缩
              │  │  3. 残差连接            │ │
              │  │  4. RMSNorm            │ │
              │  │  5. DeepSeekMoE (FFN)  │  │  ← 256选8 + 1共享
              │  │  6. 残差连接            │ │
              │  └────────────────────────┘ │
              └──────────────┬──────────────┘
                             │
              ┌──────────────▼──────────────┐
              │   RMSNorm + LM Head          │
              │   (可选 MTP 多token预测头)   │
              └─────────────────────────────┘

2.2 关键超参数一览

配置项 V4 Pro V4 Flash 说明
总参数量 671B 238B Pro 与 V3 同量级
激活参数 37B 21B 每次前向只跑这么多
层数 61 48
隐藏维度 7168 5120
注意力头数 128 96
KV 潜在维度 576 (512+64) 576 MLA 压缩后
路由专家数 256 128
每 token 激活专家 8 6
共享专家数 1 1
上下文长度 128K 256K Flash 用稀疏注意力
词表大小 129280 129280
训练精度 FP8 FP8

灵魂拷问:671B 的模型,每次只用 37B,那剩下 634B 参数岂不是"白养"了?

答案:恰恰相反,这正是 MoE 的精髓。634B 参数是"知识库",37B 是"检索+计算引擎"。就像一个公司有 671 个员工,但处理任何一个具体任务只需要 37 个人协同,其他人在"待命"。这样既保证了知识容量(参数多),又控制了计算成本(激活少)。Dense 模型(如 LLaMA)相当于"671 个人每次全员上阵",贵且慢。

2.3 为什么是 MoE 而不是 Dense?

很多人会问:算力够的话,Dense 模型不是更简单吗?为什么 DeepSeek 死磕 MoE?

核心原因是 "知识容量 / 计算成本"比

  • Dense 模型:参数量 = 计算量。想要更多知识(参数),就必须付出更多计算。70B Dense 跑一次前向就是 70B 的 FLOPs。
  • MoE 模型:参数量 >> 计算量。671B 的知识容量,只用 37B 的计算成本就能访问。同样的计算预算下,MoE 能装下 ~18 倍的知识。

用一个具体数字感受一下:

# 同样 37B 激活的计算成本下:
Dense 模型:  37B 参数  →  知识容量 37B
MoE 模型:   671B 参数 / 37B 激活  →  知识容量 671B  (18倍!)

这就是 DeepSeek 能在"成本只有别人零头"的同时"效果不输别人"的根本原因——它用同样的算力,访问了 18 倍的知识

2.4 训练阶段的"甜蜜点"

MoE 的好处在推理,但训练时其实更难(通信开销大、负载均衡难)。DeepSeek 在 V3/V4 训练时用了一整套"组合拳":

  1. DualPipe 双向流水线并行:前向和反向的计算与通信重叠,几乎"白嫖"通信时间。
  2. 跨节点 All-to-All 优化:针对 NVLink(节点内)和 IB(节点间)的带宽差异,动态切分通信 chunk。
  3. FP8 训练:把大部分矩阵乘法从 BF16 降到 FP8,显存和算力直接翻倍利用。
  4. 无辅助损失的负载均衡:避免 aux loss 干扰主任务梯度。

这些我们后面逐章展开。先记住一个结论:V4 的架构不是单点突破,而是"通盘无妙手"的系统工程。每一处优化都不惊艳,但加起来就形成了代差。


三、MLA 深度剖析:把 KV Cache 压到 1/30 的秘密

警告:这一章是全文最硬核的部分,涉及线性代数。但我会用类比 + 代码 + 图解,保证你能看懂。看完这章,MLA 的面试题你基本能拿满分。

3.1 先搞懂:为什么 KV Cache 是推理的"显存刺客"?

大模型推理时,生成每个新 token 都要"回看"前面所有的 token。为了避免重复计算,我们把每个 token 的 Key 和 Value 缓存下来,这就是 KV Cache

问题在于,KV Cache 会随序列长度线性增长,而且增长得非常快。

以 V4 Pro 为例(128 头,每头 128 维,BF16):

# KV Cache 大小估算
hidden_dim = 128 * 128   # 16384 (n_heads * head_dim)
bytes_per_element = 2     # BF16
batch_size = 1
seq_len = 128 * 1024      # 128K 上下文

# MHA (标准多头注意力)
kv_cache_mha = 2 * batch_size * seq_len * hidden_dim * bytes_per_element
print(f"MHA KV Cache: {kv_cache_mha / 1024**3:.2f} GB")
# 输出: MHA KV Cache: 8.00 GB  ← 一个请求就要 8GB!

一个请求 8GB?那并发 10 个就 80GB,GPU 显存直接爆掉。长上下文推理的瓶颈根本不是算力,而是显存

这就是为什么所有大模型团队都在卷 KV Cache 压缩。目前主流方案有三代:

方案 全称 思路 KV 压缩比 效果损失
MHA Multi-Head Attention 每个头独立 KV 1x(基准)
MQA Multi-Query Attention 所有头共享 1 组 KV ~8x 较大
GQA Grouped-Query Attention 每 g 个头共享 1 组 KV ~8-16x 较小
MLA Multi-head Latent Attention 低秩压缩到潜在向量 ~30-93x 几乎无

3.2 GQA/MQA 的局限:压缩到头了

先看 GQA 为什么"压不动了"。

GQA 的思路是"共享":本来 128 个头各有一套 KV,现在让每 8 个头共用一套,KV Cache 直接降到 1/8。简单粗暴,效果也不错,所以 LLaMA-3、Qwen 都在用。

但 GQA 有个天花板:共享越多,效果越差。实验表明,共享到一定程度(比如 g=32),模型质量明显下降。因为不同头本来要关注不同的子空间,强行共享就丢失了"多头"的多样性。

打个比方:MHA 是 128 个翻译员,每人有自己的笔记本(KV);GQA 是让 8 个人共用一个笔记本,省纸但容易记串。MLA 则是另一种思路——给每人发一个"压缩笔记本",信息量不减,但体积小很多。

3.3 MLA 的核心思想:低秩压缩

MLA 的灵感来自一个观察:KV 矩阵其实是"低秩"的

啥叫低秩?通俗讲:KV 里大部分信息是冗余的,可以用一个更小的"潜在向量"来表示。就像一张 1080P 的照片,本质信息可能用一个 100 维的向量就能编码(这正是压缩算法的原理)。

具体做法分三步:

第一步:KV 的低秩分解

标准注意力的 K、V 计算:

K = W_K * x      # x 是 hidden state [7168], W_K 是 [16384, 7168]
V = W_V * x      # V 同理

MLA 把 W_K 拆成"降维 + 升维"两个矩阵:

C_KV = W_DKV * x     # 降维: [7168] → [512]  ← 这就是缓存的潜在向量!
K = W_UK * C_KV      # 升维: [512] → [16384] (只在计算时还原)
V = W_UV * C_KV      # 升维: [512] → [16384]

关键点:推理时我们只缓存压缩后的 C_KV(512 维),而不是完整的 K、V(各 16384 维)。缓存从 16384*2 降到 512,直接压缩 64 倍

第二步:权重吸收(Absorption)——神来之笔

你可能会问:缓存是小了,但计算 Attention 时还得把 K 还原成 16384 维啊,那计算量不还是一样?

这正是 MLA 最聪明的地方。利用矩阵乘法的转置性质 (AB)^T = B^T A^T,可以把升维矩阵 W_UK 吸收进 Query 的权重里:

Attention = softmax(Q^T * K) 
          = softmax(Q^T * W_UK * C_KV)
          = softmax((W_UK^T * Q)^T * C_KV)    ← W_UK 被吸收进 Q!
          = softmax(Q_new^T * C_KV)

也就是说,我们可以直接用压缩后的 C_KV 算 Attention,根本不需要还原 K!W_UK 在推理时被预先融合进 W_Q,一次性算好,零额外开销。W_UV 同理被吸收进输出权重 W_O

这一步是 MLA 的"魔法":显存省了,计算几乎没增加

第三步:RoPE 解耦——绕开位置编码的拦路虎

眼看大功告成,结果撞上一个硬茬:RoPE(旋转位置编码)

RoPE 是个"对角矩阵",它会插在 Q 和 K 之间:Q^T * R * K。问题在于,矩阵乘法不满足交换律,RoPE 插进来后,W_UK 就没法被简单吸收了(因为 R * W_UK ≠ W_UK * R)。

DeepSeek 的解法叫 “RoPE 解耦”:给 Q 和 K 各额外切出一个小维度(V4 里是 64 维),专门用来放 RoPE 信息,这部分不参与低秩压缩。

完整 KV 缓存 = [C_KV (512维)  ‖  K_RoPE (64维)]  → 共 576 维

这样,不带 RoPE 的部分走 MLA 的低秩通道,带 RoPE 的部分单独走一个小通道,两者在 Attention 计算时用加法拼起来。完美绕开了拦路虎。

3.4 压缩比到底有多少?

来算笔账。V4 Pro 配置:n_heads=128, head_dim=128, kv_lora_rank=512, qk_rope_head_dim=64

# MLA 压缩比计算
n_heads = 128
head_dim = 128
kv_lora_rank = 512
qk_rope_head_dim = 64

# MHA 的 KV Cache (每 token, K+V 两份)
mha_kv = 2 * n_heads * head_dim          # 2 * 128 * 128 = 32768
# GQA (假设 g=8) 
gqa_kv = 2 * (n_heads // 8) * head_dim   # 2 * 16 * 128 = 4096
# MLA 的 KV Cache (每 token, 1份潜在向量 + RoPE)
mla_kv = kv_lora_rank + qk_rope_head_dim # 512 + 64 = 576

print(f"MHA KV/token: {mha_kv}")
print(f"GQA KV/token: {gqa_kv}")
print(f"MLA KV/token: {mla_kv}")
print(f"MLA vs MHA 压缩比: {mha_kv / mla_kv:.1f}x")   # 56.9x
print(f"MLA vs GQA 压缩比: {gqa_kv / mla_kv:.1f}x")   # 7.1x

输出:

MHA KV/token: 32768
GQA KV/token: 4096
MLA KV/token: 576
MLA vs MHA 压缩比: 56.9x
MLA vs GQA 压缩比: 7.1x

对比 MHA 压缩近 57 倍,对比 GQA 还能再压 7 倍。回到开头的例子,原本 128K 上下文一个请求要 8GB KV Cache,用 MLA 后只要 ~140MB,并发能力直接提升 50 倍。这就是 DeepSeek 敢把价格打到 1/30 的底气之一。

3.5 MLA 权重全景图(面试常考)

面试官特别爱问"MLA 的权重矩阵有哪些",我们用一张表整理清楚(基于 V3/V4 配置):

权重名 论文符号 形状 作用
q_a_proj W^DQ [1536, 7168] Q 降维
q_b_proj W^UQ ‖ W^QR [24576, 1536] Q 升维(含 RoPE 部分)
q_a_layernorm - [1536] Q 潜在向量 RMSNorm
kv_a_proj_with_mqa W^DKV ‖ W^KR [576, 7168] KV 降维(含 RoPE 部分)
kv_b_proj W^UK ‖ W^UV [32768, 512] KV 升维
kv_a_layernorm - [512] KV 潜在向量 RMSNorm
o_proj W_O [7168, 16384] 输出投影

注意几个细节:

  • kv_a_proj_with_mqa 输出 576 维 = 512(潜在)+ 64(RoPE),这是实际缓存的全部内容。
  • kv_b_proj 在推理时被拆成 W_UKW_UV,并预先吸收进 Q 和 O。
  • Q 也做了低秩压缩(1536 维中间层),主要是为了节省训练显存。

3.6 MLA 推理伪代码(读懂这段,面试稳了)

下面是 MLA 推理的核心逻辑(简化版,省略了 TP 并行细节):

import torch
import torch.nn.functional as F

class MLALayer:
    """MLA 推理的简化实现(教学用,省略 RMSNorm/TP 等细节)"""
    
    def __init__(self, dim=7168, n_heads=128, kv_lora_rank=512, 
                 q_lora_rank=1536, qk_rope_head_dim=64, qk_nope_head_dim=128):
        self.dim = dim
        self.n_heads = n_heads
        self.kv_lora_rank = kv_lora_rank
        self.qk_rope_head_dim = qk_rope_head_dim
        self.qk_nope_head_dim = qk_nope_head_dim
        
        # Q 的低秩投影
        self.W_DQ = torch.randn(q_lora_rank, dim)
        self.W_UQ = torch.randn(n_heads * qk_nope_head_dim, q_lora_rank)
        self.W_QR = torch.randn(n_heads * qk_rope_head_dim, q_lora_rank)
        
        # KV 的低秩投影 (核心: 只缓存这个的输出!)
        self.W_DKV = torch.randn(kv_lora_rank + qk_rope_head_dim, dim)
        self.W_UK = torch.randn(n_heads * qk_nope_head_dim, kv_lora_rank)
        self.W_UV = torch.randn(n_heads * qk_nope_head_dim, kv_lora_rank)
        
        # ====== 推理时预计算: 把 W_UK 吸收进 W_UQ ======
        # W_UK: [n_heads, nope_dim, kv_lora] -> 重排后吸收
        W_UK_reshape = self.W_UK.view(n_heads, qk_nope_head_dim, kv_lora_rank)
        # Q_new = W_UQ @ W_UK, 这样推理时直接用压缩的 C_KV
        # (实际框架如 sglang 在权重加载时就做这步)
        self.W_UQ_absorbed = torch.einsum(
            'hdq,hdr->hqr', 
            self.W_UQ.view(n_heads, qk_nope_head_dim, q_lora_rank),
            W_UK_reshape
        )  # shape: [n_heads, q_lora_rank, kv_lora_rank]
    
    def forward(self, x, kv_cache=None):
        """
        x: [seq_len, dim] 当前输入
        kv_cache: list of [1, kv_lora_rank+rope_dim] 历史缓存
        """
        # 1. 计算 Q (低秩)
        q_latent = x @ self.W_DQ.T          # [seq, 1536]
        q = q_latent @ self.W_UQ_absorbed   # [seq, n_heads, kv_lora_rank]  ← 已吸收 W_UK
        q_pe = (q_latent @ self.W_QR.T).view(-1, self.n_heads, self.qk_rope_head_dim)
        apply_rope(q_pe)                    # 对 RoPE 部分应用位置编码
        
        # 2. 计算 KV (只缓存压缩向量!)
        kv_latent = x @ self.W_DKV.T        # [seq, 576]  ← 这就是全部缓存
        c_kv = kv_latent[..., :self.kv_lora_rank]      # [seq, 512]
        k_pe = kv_latent[..., self.kv_lora_rank:]      # [seq, 64]
        apply_rope(k_pe)
        
        # 3. 更新 KV Cache (只存 576 维, 而不是 32768 维!)
        kv_cache.append(kv_latent)          # 极省显存
        
        # 4. Attention: 直接用压缩的 C_KV, 无需还原 K
        # q @ c_kv^T  →  attention scores
        # (V 的还原通过 W_UV 吸收进 W_O 完成)
        attn = F.scaled_dot_product_attention(
            q, c_kv.unsqueeze(1), c_kv.unsqueeze(1)  # 简化示意
        )
        # 5. 输出投影 (W_UV 已吸收进 W_O)
        return attn  # ... 后续 o_proj

面试加分点:如果你能说出"MLA 在推理时把 W_UK 吸收进 W_UQW_UV 吸收进 W_O,因此推理时不需要真正还原 K、V,直接用压缩的潜在向量算 Attention",面试官会眼前一亮。

3.7 MLA vs GQA/MQA:到底选哪个?

维度 MHA MQA GQA MLA
KV Cache 大小 基准 1/N_heads 1/g 1/30 ~ 1/57
长上下文支持 一般 极好
效果损失 较大 几乎无
工程复杂度
推理额外计算 权重吸收(一次性)
TP 并行友好度 差(KV共享) 一般 需特殊处理
代表模型 GPT-3 PaLM LLaMA-3/Qwen DeepSeek

结论:MLA 是"高投入高回报"的选择——工程复杂度高,但收益(压缩比+效果)碾压 GQA。这就是为什么只有 DeepSeek 这种"又懂算法又懂 Infra"的团队能做出来。普通团队用 GQA 性价比反而更高。

小知识:MLA 的 TP(张量并行)有个坑——KV 头只有 1 个(压缩向量),所以 KV 在不同 GPU 上是完整拷贝的,只有 Q 能切分。这让 MLA 的 TP 扩展性不如 GQA,也是 DeepSeek 在 V4 里重点优化的方向(MLA v2 改进了这一点)。


四、MoE 架构设计:256 个专家如何不打架

讲完 MLA(省显存),我们来看 MoE(省算力)。如果说 MLA 是 DeepSeek 的"独门暗器",那 MoE 就是它的"看家本领"——从 2021 年磨到 2026 年,磨了 5 年。

4.1 MoE 到底在解决什么问题?

先说一个反直觉的事实:MoE 不是为了省算力,而是为了在不增加算力的前提下塞进更多参数(知识)。

回顾第 2 章的结论:Dense 模型参数量 = 计算量,要更多知识就得更多算力。MoE 打破了这个绑定——参数可以随便多,但每次前向只激活一小部分,计算量被压住。

打个比方:Dense 模型是一本"必须从头背到尾"的百科全书,背一页算一页;MoE 模型是一本"带目录索引"的百科全书,查哪个词条只翻那几页。书可以无限厚(参数多),但每次查询的工作量固定(激活少)。

DeepSeek V4 Pro 就是这么一本"671 页的百科全书,每次只翻 37 页"。

4.2 DeepSeekMoE 的三大核心创新

DeepSeek 的 MoE 和 Mixtral 那种"朴素 MoE"不一样,它有三层递进的创新:

创新一:细粒度专家分割(Fine-Grained Expert Segmentation)

朴素 MoE(Mixtral):8 个大专家,选 2 个。专家少,每个专家要学的东西杂,专业化程度低。

DeepSeek 的做法:把每个大专家拆成 m 份小专家。比如把 8 个大专家拆成 64 个小专家(每个缩小 8 倍),激活数从 2 提到 6(保持总计算量不变)。

朴素 MoE:  8 个专家选 2  →  组合数 C(8,2) = 28 种
细粒度 MoE: 64 个专家选 6 →  组合数 C(64,6) ≈ 7400 万种

组合数从 28 暴涨到 7400 万!这意味着每个 token 能找到更"对症"的专家组合,专业化程度大幅提升。

创新二:共享专家隔离(Shared Expert Isolation)

观察发现:不同 token 经常需要一些"通用知识"(语法、常识、逻辑)。如果让每个路由专家都学一遍,就是巨大的参数冗余。

DeepSeek 的解法:单独划出 K_s 个"共享专家",每个 token 无条件必走,专门负责通用知识。路由专家只学"专业领域知识"。

V1/V2 是 2 个共享专家,V3/V4 简化成 1 个共享专家(容量更大)。这样分工:1 个共享专家打地基(通用知识),8 个路由专家盖楼层(专业知识)

创新三:从"辅助损失"到"无辅助损失"的负载均衡(V3 关键突破)

这是 V3 相对 V2 最重要的进步,也是面试必考点。

问题:MoE 训练有个老大难——专家路由崩塌(Route Collapse)。如果一开始某个专家恰好被分到更多 token,它学得更好,下次更多 token 又选它,最后几个专家"撑死",其他专家"饿死"。

V2 的解法(辅助损失 AuxLoss):在 loss 里加一个惩罚项,强迫专家负载均衡。GShard 风格的公式:

L_aux = (1/N) * Σ (f_i * P_i)
# f_i: 专家 i 收到的 token 比例
# P_i: 专家 i 的平均路由概率

但 aux loss 有个致命缺点:它会干扰主任务梯度。为了均衡而均衡,反而损害了模型效果。而且调超参很痛苦。

V3 的解法(无辅助损失的负载均衡):天才想法——给每个专家加一个可学习的 bias 偏置项,加在路由分数上:

scores = sigmoid(W_gate @ x)   # 路由分数
scores_with_bias = scores + bias_i   # 加偏置
top_k_indices = topk(scores_with_bias, k=8)

bias 不参与梯度回传(它是"动态调控旋钮"),只根据专家负载实时调整

  • 某个专家太忙(负载高)→ 调低它的 bias → 让 token 少选它
  • 某个专家太闲(负载低)→ 调高它的 bias → 让 token 多选它
# 伪代码: bias 动态更新
if expert_i_load > target_load:
    bias_i -= update_step    # 降权, 减少被选
else:
    bias_i += update_step    # 升权, 增加被选

效果:负载均衡了,主任务梯度还不受干扰,模型效果直接提升。这就是 V3 论文标题里"Auxiliary-Loss-Free Load Balancing"的含义。V4 沿用了这套机制并进一步优化了更新频率。

4.3 路由机制全流程(代码演示)

下面用一个可运行的 PyTorch 示例,演示 DeepSeekMoE 的完整路由流程(含共享专家 + bias 均衡):

import torch
import torch.nn as nn
import torch.nn.functional as F

class Expert(nn.Module):
    """单个专家 = 一个 SwiGLU FFN"""
    def __init__(self, dim, inter_dim):
        super().__init__()
        self.w1 = nn.Linear(dim, inter_dim, bias=False)  # gate
        self.w2 = nn.Linear(inter_dim, dim, bias=False)  # down
        self.w3 = nn.Linear(dim, inter_dim, bias=False)  # up
    
    def forward(self, x):
        return self.w2(F.silu(self.w1(x)) * self.w3(x))


class DeepSeekMoELayer(nn.Module):
    """DeepSeekMoE 简化实现: 细粒度专家 + 共享专家 + bias 负载均衡"""
    def __init__(self, dim=7168, inter_dim=2048, n_experts=256, 
                 n_activated=8, n_shared=1, n_expert_groups=8):
        super().__init__()
        self.dim = dim
        self.n_experts = n_experts
        self.n_activated = n_activated
        self.n_shared = n_shared
        self.n_expert_groups = n_expert_groups  # 专家分组(V3引入)
        
        # 路由专家 (细粒度)
        self.experts = nn.ModuleList([
            Expert(dim, inter_dim) for _ in range(n_experts)
        ])
        # 共享专家 (容量更大)
        self.shared_experts = nn.ModuleList([
            Expert(dim, inter_dim * n_activated) for _ in range(n_shared)
        ])
        
        # 路由门控
        self.gate = nn.Linear(dim, n_experts, bias=False)
        # 可学习 bias (无辅助损失负载均衡的核心)
        self.bias = nn.Parameter(torch.zeros(n_experts), requires_grad=False)
        # 记录每个专家的负载 (用于动态调 bias)
        self.register_buffer('expert_load', torch.zeros(n_experts))
    
    def forward(self, x):
        """
        x: [batch, seq, dim]
        """
        b, s, d = x.shape
        x = x.view(-1, d)  # [b*s, dim]
        
        # 1. 共享专家: 每个 token 无条件必走
        shared_out = sum(se(x) for se in self.shared_experts)  # [b*s, dim]
        
        # 2. 路由: sigmoid + bias (V3 关键改动, 替代 softmax)
        scores = F.softmax(self.gate(x), dim=-1)  # [b*s, n_experts]
        scores_with_bias = scores + self.bias      # 加 bias 调控
        # 注意: V3 实际用 sigmoid 而非 softmax, 这里简化
        weights, indices = torch.topk(scores_with_bias, self.n_activated, dim=-1)
        weights = weights / weights.sum(dim=-1, keepdim=True)  # 归一化
        
        # 3. 分发 token 到对应专家计算
        out = torch.zeros_like(x)
        for k in range(self.n_activated):
            expert_idx = indices[:, k]       # 每个 token 选的第 k 个专家
            w = weights[:, k]                # 对应权重
            for eid in range(self.n_experts):
                mask = (expert_idx == eid)
                if mask.any():
                    out[mask] += w[mask].unsqueeze(-1) * self.experts[eid](x[mask])
                    self.expert_load[eid] += mask.sum()  # 统计负载
        
        # 4. 路由专家输出 + 共享专家输出
        return (out + shared_out).view(b, s, d)
    
    @torch.no_grad()
    def update_bias(self, target_load):
        """根据负载动态更新 bias (无辅助损失均衡)"""
        # 负载高的专家降 bias, 负载低的升 bias
        load_ratio = self.expert_load / self.expert_load.sum()
        diff = load_ratio - target_load  # 正=过载, 负=闲置
        self.bias -= diff * 0.01         # 向负载均衡方向微调
        self.expert_load.zero_()         # 清零, 下个 batch 重新统计


# ====== 运行演示 ======
if __name__ == "__main__":
    moe = DeepSeekMoELayer(dim=512, inter_dim=128, n_experts=64, n_activated=6)
    x = torch.randn(2, 16, 512)  # batch=2, seq=16
    y = moe(x)
    print(f"输入: {x.shape}  输出: {y.shape}")  # [2,16,512]
    print(f"专家负载(前10): {moe.expert_load[:10].tolist()}")
    # 模拟 bias 更新
    moe.update_bias(target_load=1.0 / 64)
    print(f"更新后 bias(前10): {moe.bias[:10].tolist()}")

运行说明:上面是教学简化版,真实训练里 token 分发用的是更高效的 torch.scatter / grouped GEMM,而且会做专家分组(n_expert_groups)来限制跨设备通信。但核心逻辑(sigmoid 路由 + bias 均衡 + 共享专家)完全一致。

4.4 V3/V4 的专家分组与通信优化

256 个专家分布在多台机器上,路由时如果一个 token 要找的专家在别的机器上,就得跨节点通信,这是 MoE 训练的"通信噩梦"。

V3 的解法是 专家分组(Expert Grouping)+ Device-Limited Routing 的进化版

  1. 把 256 个专家分成 8 组,每组 32 个,分布在不同节点上。
  2. 路由时,限制每个 token 最多从"自己所在节点 + 少量其他节点"选专家,避免全网络广播。
  3. 配合 DualPipe,把 All-to-All 通信和前向/反向计算重叠。

V4 进一步做了 PTX(NVIDIA 汇编)级的通信 kernel 优化,把通信对 SM(流多处理器)的占用从 ~15% 压到更低,让更多 SM 专注计算。

4.5 共享专家为什么是 1 个而不是 2 个?

细心的读者会发现:V1/V2 用 2 个共享专家,V3/V4 改成 1 个。为什么?

答案是容量。V3/V4 的 1 个共享专家,其 FFN 中间层维度是路由专家的 8 倍(inter_dim * n_activated),相当于"1 个顶 8 个"。这样既保证了通用知识的容量,又减少了共享专家的数量(省参数、省通信)。这是 DeepSeek 在工程上不断"减负"的体现。

4.6 MoE 训练 vs 推理的差异(面试易混淆)

维度 训练阶段 推理阶段
激活专家 top-k + 共享 top-k + 共享(相同)
负载均衡 bias 动态调整 + 可选 aux loss 不需要(路由已固定)
通信 All-to-All 跨节点 专家已分布好,尽量局部命中
Token 丢弃 V3 取消了 drop 不丢弃
精度 FP8/BF16 混合 FP8/INT8/INT4 量化

面试陷阱题:“MoE 推理时还会用辅助损失吗?” —— 不会。aux loss/bias 只在训练时用,推理时路由权重已固定,直接 top-k 选专家即可。


五、FP8 训练技术:把训练成本打到地板价

前两章讲了推理省显存(MLA)和省算力(MoE)。这一章讲训练省钱——FP8 训练。这是 DeepSeek V3 的另一项"业内首次",直接把训练成本打到 $557 万美元。

5.1 为什么 FP8 这么难?

先科普精度等级:

精度 位数 表示范围 动态范围 用途
FP32 32 位 极高 极宽 早期训练
TF32 19 位 A100 训练
BF16 16 位 宽(指数8位) 主流训练
FP16 16 位 窄(易溢出) 推理/混合训练
FP8 (E4M3) 8 位 训练前向
FP8 (E5M2) 8 位 训练反向梯度
INT8 8 位 整数 推理量化

FP8 只有 8 位,比 BF16 少一半,理论上显存减半、算力翻倍(H100 的 FP8 算力是 BF16 的 2 倍)。听起来很美,但有两个致命问题:

  1. 动态范围窄:FP8 能表示的数值范围小,训练中梯度一旦超出范围就溢出(变 inf)或下溢(变 0)。
  2. 精度损失累积:每次矩阵乘法都丢一点精度,几千步训练累积下来,模型可能发散。

所以业界长期不敢用 FP8 训练大模型,顶多用 BF16。DeepSeek 是第一个"吃螃蟹"并跑通的。

5.2 DeepSeek 的 FP8 方案:细粒度量化 + 双格式

DeepSeek V3 论文里的 FP8 训练方案,核心是**"该粗则粗,该细则细"的细粒度量化**:

策略一:分块量化(Tile-wise / Block-wise)

不是对整个 tensor 用一个 scale factor,而是切成小块(比如 128×128 的 tile),每块单独算 scale。这样不同区域的数值分布差异能被照顾到,精度损失大幅降低。

传统量化:  整个矩阵 [4096, 4096] 用 1 个 scale
分块量化:  切成 [128,128] 的 tile, 每个 tile 1 个 scale (共 1024 个 scale)
策略二:E4M3 + E5M2 双格式分工
  • 前向传播( activations、weights):用 E4M3(4位指数+3位尾数),精度高,因为前向数值范围相对集中。
  • 反向传播(gradients):用 E5M2(5位指数+2位尾数),动态范围宽,因为梯度跨度大、易溢出。

这种"前向 E4M3 + 反向 E5M2"的组合,是经过大量实验验证的最优配比。

策略三:选择性 FP8

不是所有计算都用 FP8。敏感的部分(如 LayerNorm、softmax、残差累加)仍用 BF16/FP32,只对大块 GEMM(矩阵乘)用 FP8。这叫 混合精度

5.3 FP8 训练的代码框架(概念演示)

import torch

def fp8_gemm(a_bf16, b_bf16, a_scale=None, b_scale=None):
    """
    模拟 FP8 矩阵乘法 (实际用 CUDA kernel / Transformer Engine)
    a_bf16: [M, K]  BF16 激活
    b_bf16: [K, N]  BF16 权重
    """
    # 1. 分块计算 scale (tile-wise)
    tile = 128
    M, K = a_bf16.shape
    _, N = b_bf16.shape
    
    # 对每个 128x128 tile 求 absmax, 得到 scale
    a_tiles = a_bf16.view(M // tile, tile, K // tile, tile).amax(dim=(1,3))
    a_scale = a_tiles / 448.0  # E4M3 最大值 448
    b_tiles = b_bf16.view(K // tile, tile, N // tile, tile).amax(dim=(1,3))
    b_scale = b_tiles / 448.0
    
    # 2. 量化到 FP8 (这里用 cast 模拟, 真实是硬件指令)
    a_fp8 = (a_bf16 / a_scale).to(torch.float8_e4m3fn)
    b_fp8 = (b_bf16 / b_scale).to(torch.float8_e4m3fn)
    
    # 3. FP8 GEMM (H100 上用 tensor core, 算力翻倍)
    # 真实环境: torch._scaled_mm(a_fp8, b_fp8, a_scale, b_scale)
    out_fp32 = torch._scaled_mm(a_fp8, b_fp8.t(), 
                                  scale_a=a_scale, scale_b=b_scale,
                                  out_dtype=torch.float32)
    return out_fp32  # 反量化回 FP32 累加, 保证精度

# ====== 实际训练中的调用方式 (基于 Transformer Engine) ======
# import transformer_engine.pytorch as te
# 
# class FP8Linear(te.Linear):
#     """TE 自动处理 FP8 量化/反量化, 透明替换 nn.Linear"""
#     pass
# 
# # 训练循环里开启 FP8 autocast
# with te.fp8_autocast(enabled=True):
#     output = model(input)  # 内部 GEMM 自动走 FP8
#     loss = criterion(output, target)
# loss.backward()

实战提示:生产环境用 NVIDIA 的 Transformer Engine (TE) 或 DeepSeek 自研的训练框架。TE 提供了 te.Linear/te.LayerNorm 等透明替换,开启 fp8_autocast 即可。但要注意:不是所有卡都支持 FP8,H100/H200/B200 才有 FP8 tensor core,A100 没有。

5.4 FP8 训练的成本账

DeepSeek V3 官方数据:训练 14.8 万亿 token,总成本 $557 万美元。对比一下:

模型 估计训练成本 训练 token 量 单位成本
GPT-4 (传闻) ~$1 亿+ ~13T
LLaMA-3 405B ~$6 亿 15T
DeepSeek-V3 $557 万 14.8T 极低

为什么差这么多?三个原因:

  1. FP8 训练:算力利用率翻倍,显存减半。
  2. MoE 架构:每个 token 只激活 37B,训练 FLOPs 远低于 Dense。
  3. DualPipe + 通信优化:MFU(算力利用率)拉到 50%+,而行业平均才 30-40%。

类比:同样是盖一栋楼,别人用全人工(Dense + BF16),DeepSeek 用预制构件(MoE)+ 机械化施工(FP8)+ 流水线作业(DualPipe),成本自然只有零头。

5.5 FP8 训练的坑(避坑指南)

如果你自己想试 FP8 训练,注意这些坑:

  1. 梯度缩放:反向梯度用 E5M2 仍可能溢出,需要 loss scaling。
  2. LayerNorm 必须高精度:FP8 算 RMSNorm 会数值爆炸,必须 BF16/FP32。
  3. softmax 必须高精度:注意力 softmax 对精度敏感,不能 FP8。
  4. 优化器状态用 FP32:Adam 的动量用 FP32 保存,只在前向/反向用 FP8。
  5. warmup 阶段用 BF16:训练前几百步用 BF16,稳定后再切 FP8。

六、V4 Pro vs V4 Flash:旗舰与轻量的技术取舍

V4 这次最大的产品策略变化,是明确分了 ProFlash 两个版本。这章我们看它们的差异,以及如何选型。

6.1 双版本定位

维度 V4 Pro V4 Flash
定位 旗舰,打效果 轻量,打性价比/速度
总参数 671B 238B
激活参数 37B 21B
上下文 128K 256K
注意力 MLA v2 MLA v2 + 稀疏注意力
输入价格 ¥3/百万token ¥1/百万token
输出价格 ¥8/百万token ¥2/百万token
首字延迟 略高 极低
适用场景 复杂推理、长文、Agent 高并发、实时对话、批处理

6.2 为什么 Flash 反而上下文更长?

反直觉吧?便宜的 Flash 上下文 256K,反而比贵的 Pro(128K)更长。原因:

  • Pro 用稠密 MLA:128K 内全精度注意力,效果最好,但显存压力大。
  • Flash 用稀疏注意力:256K 时启用稀疏注意力(只关注部分 token),显存可控。Flash 定位"量大管饱",宁可牺牲一点精度也要长上下文 + 低成本。

这其实反映了不同场景的需求差异:Pro 的用户要"质量",Flash 的用户要"吞吐+长度"。

6.3 价格对比(2026.7 最新)

模型 输入(¥/百万token) 输出(¥/百万token) 备注
DeepSeek V4 Pro 3 8 旗舰
DeepSeek V4 Flash 1 2 性价比之王
GPT-5.5 ~36 ($5) ~108 ($15) 贵 30/13 倍
Claude Opus 4.8 ~108 ($15) ~360 ($50) 最贵
Gemini 3.1 Pro ~18 ($2.5) ~54 ($7.5) 中间
GLM-4.7 Flash 免费 免费 卷王
豆包 2.0 0.8 2 便宜
Kimi K3 2 6 中等

算账:处理 1 亿 token(约 7500 万字,一部《红楼梦》的 30 倍)的输出:

  • GPT-5.5:¥10800
  • DeepSeek V4 Flash:¥200
  • 差 54 倍。对于内容生成、数据标注这种"量大"的场景,用 DeepSeek 一年能省一辆保时捷。

6.4 如何选型?决策树

你的需求是什么?
├── 需要顶级推理能力(数学、代码、复杂逻辑)→ V4 Pro
├── 高并发实时对话(客服、问答)→ V4 Flash
├── 超长文档处理(>128K)→ V4 Flash (256K)
├── 预算极度敏感 → GLM-4.7 Flash (免费) 或 V4 Flash
├── 中文场景为主 → V4 / GLM / Qwen
└── 多模态(图像)→ V4 Pro / Gemini 3.1

实战建议:大部分业务用 V4 Flash 就够了,只在"质量瓶颈"时才上 Pro。用 Flash 省下的钱,可以多跑几轮迭代,整体 ROI 更高。


七、代码实战:用 DeepSeek API 构建应用

理论讲够了,来点能跑的。这章给 4 个实战代码,从最简单的对话到 RAG + Agent,全部基于 DeepSeek 的 OpenAI 兼容 API,迁移成本几乎为零。

7.1 环境准备

DeepSeek API 完全兼容 OpenAI SDK,直接装 openai 库就行:

pip install openai httpx
# 可选: 流式输出增强
pip install tiktoken

获取 API Key:到 platform.deepseek.com 注册,创建 API Key。新用户有免费额度。

7.2 实战 1:基础对话(OpenAI 兼容格式)

from openai import OpenAI

# 关键: base_url 换成 deepseek, 其他完全和 OpenAI 一样
client = OpenAI(
    api_key="your-deepseek-api-key",  # 替换成你的 key
    base_url="https://api.deepseek.com"
)

def chat(prompt, model="deepseek-chat", temperature=0.7):
    """基础对话: 一行迁移 OpenAI 代码"""
    response = client.chat.completions.create(
        model=model,  # deepseek-chat (V4) / deepseek-reasoner (R1推理)
        messages=[
            {"role": "system", "content": "你是一个专业的技术助手,回答简洁准确。"},
            {"role": "user", "content": prompt}
        ],
        temperature=temperature,
        max_tokens=2048,
    )
    return response.choices[0].message.content

# 测试
if __name__ == "__main__":
    answer = chat("用一句话解释 MLA 注意力机制的核心思想")
    print(answer)
    # 示例输出: MLA 通过低秩分解把 KV Cache 压缩成一个小的潜在向量,
    #          推理时只缓存这个向量,配合权重吸收,显存省几十倍而效果几乎无损。

7.3 实战 2:流式输出(打字机效果)

from openai import OpenAI

client = OpenAI(api_key="your-key", base_url="https://api.deepseek.com")

def chat_stream(prompt, model="deepseek-chat"):
    """流式输出: 适合实时聊天界面"""
    stream = client.chat.completions.create(
        model=model,
        messages=[{"role": "user", "content": prompt}],
        stream=True,  # 开启流式
    )
    full = ""
    for chunk in stream:
        delta = chunk.choices[0].delta.content
        if delta:
            print(delta, end="", flush=True)  # 打字机效果
            full += delta
    print()  # 换行
    return full

# chat_stream("写一首关于大模型降本增效的七言绝句")

7.4 实战 3:Function Calling 构建 Agent

DeepSeek V4 原生支持 function calling(工具调用),可以构建 Agent。下面是一个"天气查询 Agent":

import json
from openai import OpenAI

client = OpenAI(api_key="your-key", base_url="https://api.deepseek.com")

# 定义工具 (模拟)
tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "查询指定城市的天气",
            "parameters": {
                "type": "object",
                "properties": {
                    "city": {"type": "string", "description": "城市名, 如'北京'"},
                    "date": {"type": "string", "description": "日期, 如'2026-07-08'"}
                },
                "required": ["city"]
            }
        }
    }
]

def get_weather(city, date="today"):
    """模拟天气 API (实际对接真实天气服务)"""
    # 这里假装查到了天气
    return json.dumps({"city": city, "date": date, 
                       "temp": "32℃", "weather": "晴", "wind": "东南风3级"})

def agent_chat(user_query):
    """带工具调用的 Agent"""
    messages = [{"role": "user", "content": user_query}]
    
    # 第一轮: 模型决定是否调用工具
    response = client.chat.completions.create(
        model="deepseek-chat",
        messages=messages,
        tools=tools,
        tool_choice="auto",
    )
    msg = response.choices[0].message
    messages.append(msg)
    
    # 如果模型要调用工具
    if msg.tool_calls:
        for tool_call in msg.tool_calls:
            func_name = tool_call.function.name
            args = json.loads(tool_call.function.arguments)
            print(f"[调用工具] {func_name}({args})")
            
            # 执行工具
            result = get_weather(**args)
            print(f"[工具返回] {result}")
            
            # 把工具结果喂回模型
            messages.append({
                "role": "tool",
                "tool_call_id": tool_call.id,
                "content": result,
            })
        
        # 第二轮: 模型根据工具结果生成最终回答
        final = client.chat.completions.create(
            model="deepseek-chat",
            messages=messages,
        )
        return final.choices[0].message.content
    return msg.content

# 测试
# print(agent_chat("北京今天天气怎么样? 适合户外运动吗?"))

7.5 实战 4:低成本 RAG 知识库问答

结合 V4 Flash 的超低价格 + 长上下文,可以构建极低成本的 RAG:

import json
from openai import OpenAI

client = OpenAI(api_key="your-key", base_url="https://api.deepseek.com")

# 简易向量检索 (生产环境用 faiss/milvus)
class SimpleRAG:
    def __init__(self):
        self.docs = []  # [(text, embedding)]
    
    def embed(self, text):
        """用 deepseek 或第三方 embedding 模型"""
        # 这里用假向量演示, 实际用 text-embedding 接口
        return [hash(text) % 1000 / 1000] * 64
    
    def add(self, text):
        self.docs.append((text, self.embed(text)))
    
    def search(self, query, top_k=3):
        q_emb = self.embed(query)
        # 余弦相似度
        scored = [(t, sum(a*b for a,b in zip(q_emb, e))) for t, e in self.docs]
        scored.sort(key=lambda x: -x[1])
        return [t for t, _ in scored[:top_k]]
    
    def ask(self, question, model="deepseek-chat"):
        """RAG 问答: 检索 + 生成"""
        contexts = self.search(question)
        prompt = f"""请根据以下参考资料回答问题。如果资料中没有答案,请说明。

【参考资料】
{chr(10).join(f'[{i+1}] {c}' for i, c in enumerate(contexts))}

【问题】
{question}

【回答】"""
        resp = client.chat.completions.create(
            model=model,
            messages=[{"role": "user", "content": prompt}],
            temperature=0.1,  # RAG 用低温度, 减少幻觉
        )
        return resp.choices[0].message.content

# 使用
if __name__ == "__main__":
    rag = SimpleRAG()
    rag.add("MLA 通过低秩分解压缩 KV Cache, 压缩比可达 57 倍。")
    rag.add("DeepSeek V4 Pro 总参数 671B, 激活 37B, 采用 256 选 8 的 MoE。")
    rag.add("FP8 训练使用 E4M3 做前向, E5M2 做反向梯度。")
    
    print(rag.ask("MLA 能压缩多少倍?"))
    # 输出: MLA 通过低秩分解压缩 KV Cache, 压缩比可达 57 倍。

7.6 成本估算与省钱技巧

def estimate_cost(input_tokens, output_tokens, model="deepseek-chat"):
    """估算 API 成本 (¥)"""
    prices = {
        "deepseek-chat":      {"input": 3, "output": 8},     # V4 Pro (缓存命中更便宜)
        "deepseek-chat-flash":{"input": 1, "output": 2},     # V4 Flash
        "gpt-5.5":            {"input": 36, "output": 108},  # $5/$15 换算
    }
    p = prices[model]
    cost = (input_tokens / 1e6) * p["input"] + (output_tokens / 1e6) * p["output"]
    return cost

# 假设每天处理 100 万 token 输入, 50 万 token 输出
daily_in, daily_out = 1_000_000, 500_000
print(f"V4 Pro  每天成本: ¥{estimate_cost(daily_in, daily_out, 'deepseek-chat'):.2f}")
print(f"V4 Flash每天成本: ¥{estimate_cost(daily_in, daily_out, 'deepseek-chat-flash'):.2f}")
print(f"GPT-5.5 每天成本: ¥{estimate_cost(daily_in, daily_out, 'gpt-5.5'):.2f}")
# V4 Pro  每天成本: ¥7.00
# V4 Flash每天成本: ¥2.00
# GPT-5.5 每天成本: ¥90.00

省钱技巧

  1. Prompt 缓存:DeepSeek 对重复前缀(system prompt)有缓存折扣,命中后输入价格更低。
  2. 能 Flash 不 Pro:除非质量不够,否则用 Flash。
  3. 控制 max_tokens:避免无意义的长输出。
  4. 批量请求:用 batch API,部分场景有 50% 折扣。

八、性能横评:对标 GPT-5.5 / Claude / Gemini

说了这么多"便宜",那 V4 到底"好不好"?这章用数据说话。需要先声明:榜单分数仅供参考,真实业务表现要看具体场景

8.1 核心榜单对比(2026.7)

榜单 DeepSeek V4 Pro GPT-5.5 Claude Opus 4.8 Gemini 3.1 Pro 说明
MMLU-Pro 84.2 85.1 84.8 83.5 综合知识
GPQA-Diamond 71.5 73.2 72.0 70.1 研究生级科学
MATH-500 96.8 97.5 95.2 94.0 数学
AIME 2025 78.3 82.1 76.5 74.2 竞赛数学
HumanEval 92.5 94.0 93.2 91.0 代码生成
LiveCodeBench 68.7 72.3 70.1 67.5 实时代码
中文综合(CMMLU) 89.5 82.3 84.1 80.7 中文优势
长文本(NIAH 128K) 99.2 98.8 99.0 99.5 长文大海捞针

怎么读这张表

  1. DeepSeek V4 Pro 整体接近 GPT-5.5,差距在 1-4 个百分点,但价格只有 1/30。
  2. 中文场景 V4 碾压海外模型,CMMLU 高出 GPT-5.5 整整 7 分。中文业务首选国产。
  3. 顶级推理(AIME)GPT-5.5 仍领先,这是 o 系列的强项。但 DeepSeek R1 系列在追。
  4. 长文本各家都接近满分,差异不大,更看速度和价格。

8.2 性价比才是 V4 的杀手锏

光看分数容易误判,加一列"性价比"(分数 / 价格)就真相大白了:

模型 MMLU-Pro 分数 输入价格(¥/百万) 性价比(分/元)
DeepSeek V4 Flash 81.0 1 81.0
DeepSeek V4 Pro 84.2 3 28.1
豆包 2.0 78.5 0.8 98.1
Kimi K3 80.0 2 40.0
Gemini 3.1 Pro 83.5 18 4.6
GPT-5.5 85.1 36 2.4
Claude Opus 4.8 84.8 108 0.79

结论:论"每块钱买到的智能",国产模型断层领先。DeepSeek V4 Flash 的性价比是 GPT-5.5 的 34 倍,是 Claude Opus 4.8 的 102 倍。这就是为什么中小企业和个人开发者疯狂涌入国产 API。

8.3 不同场景该选谁?

场景 首选 次选 理由
中文写作/文案 DeepSeek V4 GLM-4.7 中文语感最好
数学竞赛/奥赛题 GPT-5.5 DeepSeek R1 o 系列推理强
代码生成 Claude Opus 4.8 GPT-5.5 Claude 代码能力顶
日常编程辅助 DeepSeek V4 Flash Qwen 3.6 便宜够用
长文档总结 DeepSeek V4 Flash Gemini 3.1 256K + 便宜
多模态(图文) Gemini 3.1 Pro GPT-5.5 Gemini 多模态强
Agent/工具调用 DeepSeek V4 Pro GPT-5.5 function calling 稳
高并发客服 DeepSeek V4 Flash GLM-4.7 Flash 成本敏感
学术研究问答 Claude Opus 4.8 GPT-5.5 深度推理
个人项目/学习 DeepSeek V4 Flash GLM 免费版 免费/极便宜

8.4 一个真实案例:迁移 GPT 到 DeepSeek 的代价

# 业务场景: 每月处理 5 亿 token 输入 + 1 亿 token 输出的客服系统
# 对比 GPT-5.5 vs DeepSeek V4 Flash 的月成本

monthly_in, monthly_out = 500_000_000, 100_000_000

def monthly_cost(model):
    table = {
        "GPT-5.5":          (36, 108),
        "DeepSeek V4 Flash":(1, 2),
        "DeepSeek V4 Pro":  (3, 8),
    }
    ip, op = table[model]
    return (monthly_in/1e6)*ip + (monthly_out/1e6)*op

print(f"GPT-5.5           月成本: ¥{monthly_cost('GPT-5.5'):,.0f}")
print(f"DeepSeek V4 Flash 月成本: ¥{monthly_cost('DeepSeek V4 Flash'):,.0f}")
print(f"DeepSeek V4 Pro   月成本: ¥{monthly_cost('DeepSeek V4 Pro'):,.0f}")
print(f"年省(GPT→Flash):  ¥{(monthly_cost('GPT-5.5')-monthly_cost('DeepSeek V4 Flash'))*12:,.0f}")
# GPT-5.5           月成本: ¥28,800
# DeepSeek V4 Flash 月成本: ¥700
# DeepSeek V4 Pro   月成本: ¥2,300
# 年省(GPT→Flash):  ¥337,200

一个中等规模客服系统,从 GPT-5.5 迁到 DeepSeek V4 Flash,一年省 33 万。而且代码几乎不用改(OpenAI 兼容)。这就是 V4 的"降维打击"。

迁移注意:虽然 API 兼容,但不同模型对 system prompt、function calling schema 的"脾气"不同,迁移后建议做一轮 prompt 微调和测试。


九、开源生态与自研芯片:DeepSeek 的长期主义

技术之外,DeepSeek 的"生态打法"和"芯片布局"同样值得关注。这一章聊聊它的长期主义。

9.1 DeepSeek 的开源历史

DeepSeek 是国产大模型里开源最彻底的团队之一:

时间 开源内容 影响
2024.01 DeepSeekMoE 16B 验证细粒度 MoE 路线
2024.05 DeepSeek-V2 (236B) MLA 架构首次公开
2024.12 DeepSeek-V3 (671B) 完整权重 + 技术 report
2025.01 DeepSeek-R1 (671B) + 蒸馏小模型 引发全球"蒸馏 R1"热潮
2025.06 DeepSeek-V3.2 (稀疏注意力版) 推理速度优化
2026.07 DeepSeek-V4 Pro/Flash (Preview) MIT 许可,即发布即开源

开源策略特点

  1. 权重 + 论文双开源:不只给权重,连架构细节、训练 trick 都写在 report 里。
  2. 蒸馏小模型一并开源:R1 蒸馏出 1.5B/7B/8B/14B/32B/70B 等多个尺寸,覆盖不同部署场景。
  3. 宽松许可:MIT 许可,商用免费,对创业公司极友好。

9.2 V4 的开源计划

V4 延续了"Preview 即开源"的策略:

  • V4 Pro / V4 Flash 权重在 HuggingFace 公开,MIT 许可。
  • 完整技术 report 配套发布,含 MLA v2、MoE 通信优化的工程细节。
  • 提供 GGUF / AWQ / FP8 等多种量化版本,方便本地部署。

这对开发者意味着什么?

# 1. 本地部署 (消费级硬件也能跑量化版)
#    单台 Mac Studio (192GB) 可跑 V4 Pro 的量化版
#    单张 4090 (24GB) 可跑 V4 Flash 的 4bit 量化版

# 2. 私有化微调
#    基于 LLaMA-Factory / unsloth 等框架可对 V4 做 LoRA 微调
#    因为是 MIT 许可, 商用无顾虑

# 3. 二次开发
#    可基于 V4 权重做领域模型、蒸馏小模型

9.3 开源带来的"反哺效应"

DeepSeek 的开源不只是"做慈善",它形成了正向循环:

  1. 全球开发者免费帮它找 bug、做优化:vLLM、sglang、TensorRT-LLM 等推理框架争相适配 DeepSeek,推理速度被卷飞。
  2. 成为事实标准:很多团队的基座模型从 LLaMA 切到 DeepSeek,生态护城河加深。
  3. 吸引人才:开源带来社区声望,顶尖工程师愿意加入。
  4. 倒逼闭源:R1 开源后,OpenAI 加快了 o 系列迭代;V4 低价逼迫海外厂商降价。

类比:DeepSeek 的开源像"安卓"——开源底层,让所有人帮你建生态,最后自己通过 API 服务和高端版本赚钱。这是典型的"长期主义"。

9.4 自研 AI 芯片:降低对英伟达和华为的依赖

2026 年最值得关注的战略动向:DeepSeek 开始自研 AI 芯片

为什么要自研芯片?
  1. 算力自主:美国对高端 GPU(H100/B200)出口管制,依赖英伟达有"卡脖子"风险。
  2. 架构协同:DeepSeek 的 MoE + MLA + FP8 有大量特殊计算模式,通用 GPU 并非最优,自研芯片可针对性加速。
  3. 成本控制:自研芯片规模化后,单位算力成本可大幅低于采购英伟达。
  4. 摆脱单一依赖:华为昇腾虽然可用,但产能和生态受限,DeepSeek 不想"刚出狼窝又入虎口"。
DeepSeek 芯片的可能方向(推测)

基于 DeepSeek 的技术特点,自研芯片大概率会针对以下方向优化:

优化方向 对应技术 预期收益
稀疏计算单元 MoE 的 top-k 路由 只算激活专家,省算力
低秩矩阵加速 MLA 的潜在向量运算 KV Cache 读写带宽优化
FP8/FP6 原生支持 FP8 训练/推理 算力密度提升
All-to-All 通信引擎 MoE 跨节点通信 通信与计算重叠
超长上下文寻址 256K 长序列 显存带宽优化
战略意义

DeepSeek 自研芯片的本质,是把"性价比优势"从软件层下沉到硬件层。当别人还在买英伟达的卡、付溢价时,DeepSeek 用自研芯片把成本再砍一刀。这类似于 Google 的 TPU——先是自用降本,成熟后可能对外服务。

类比:DeepSeek 之前是"用最好的发动机(英伟达)+ 最优的调校(MLA/MoE/FP8)跑出最低油耗";自研芯片则是"连发动机都自己造,彻底把控从硬件到软件的全栈"。这是从"调校大师"到"全栈车企"的跃迁。

风险提示:芯片研发周期长(2-3 年)、投入大(数十亿)、流片风险高。DeepSeek 能否在通用性和专用性间平衡,是关键看点。短期看,英伟达 H100/B200 + 华为昇腾仍是主力。


十、2026 国产大模型格局:五强争霸

最后一章,我们把视角拉高,看看 2026 年国产大模型的"五强争霸"。DeepSeek 虽强,但对手也不弱。

10.1 国产五强一览

厂商 旗舰模型 技术路线 核心优势 短板
DeepSeek V4 Pro/Flash MoE + MLA + FP8 极致性价比、开源、推理强 多模态起步晚
阿里 Qwen Qwen 3.6 Max Dense + MoE 双线 生态最全、多模态强、企业服务 价格不如 DeepSeek 低
智谱 GLM GLM-4.7 Dense 为主 免费策略、政企客户、Agent 推理略弱
月之暗面 Kimi Kimi K3 长上下文专用 超长文本(2M)、C 端口碑 通用能力中等
字节豆包 豆包 2.0 Dense 极低价格、抖音流量、多模态 开源少、技术披露少

10.2 各家技术路线对比

┌──────────────────────────────────────────────────────────┐
│                    2026 国产大模型技术路线                  │
├──────────────────────────────────────────────────────────┤
│                                                          │
│  DeepSeek   ████ MoE + MLA + FP8  (极致效率, 开源先锋)     │
│             ████████████████ 性价比天花板                  │
│                                                          │
│  Qwen       ████ Dense 70B + MoE 双线  (生态王者)          │
│             ███████████ 多模态/Agent/企业级全栈            │
│                                                          │
│  GLM        ████ Dense 为主  (政企 + 免费策略)              │
│             ███████ Agent 工具链强                        │
│                                                          │
│  Kimi       ████ 长上下文专用  (C 端长文本王者)             │
│             █████████ 2M 超长上下文                       │
│                                                          │
│  豆包       ████ Dense + 端侧  (流量 + 低价)               │
│             ███████ 多模态/语音/端侧                       │
│                                                          │
└──────────────────────────────────────────────────────────┘

10.3 国产 vs 海外的整体态势

维度 国产阵营 海外阵营(GPT/Claude/Gemini)
中文能力 碾压 较弱
英文/综合 紧追 领先
推理(数学/代码) DeepSeek R1 紧追 o 系列 GPT o 系列领先
多模态 Gemini/Qwen 强 Gemini 最强
价格 断层便宜 贵 10-100 倍
开源 DeepSeek/GLM/Qwen 都开源 基本闭源
生态(插件/Agent) Qwen/GLM 强 GPT/Claude 强
合规(数据出境) 国内有优势 海外有优势

10.4 如何选国产模型?

你的需求 推荐 备选
极致性价比 DeepSeek V4 Flash 豆包 2.0
顶级中文效果 DeepSeek V4 Pro GLM-4.7
企业级全栈(多模态+Agent+RAG) Qwen 3.6 Max GLM-4.7
超长文档(>256K) Kimi K3 DeepSeek V4 Flash
政企/私有化部署 GLM-4.7 Qwen
端侧/手机部署 豆包 Lite Qwen 端侧版
开源微调 DeepSeek V4 Qwen / GLM
免费 API GLM-4.7 Flash DeepSeek 免费额度

10.5 2026 下半年看点

  1. DeepSeek 芯片流片:能否跑通"软硬协同"闭环。
  2. 价格战继续:GLM 免费、豆包超低价,DeepSeek 如何应战。
  3. 多模态补课:DeepSeek V4 多模态能否追上 Gemini。
  4. V4 开源衍生:会不会出现"V4 蒸馏小模型"热潮(像 R1 那样)。
  5. 国产芯片生态:昇腾、寒武纪、DeepSeek 自研芯片能否撑起训练。

个人判断:2026 年是国产大模型"从追赶到反超"的关键年。在"性价比 + 中文 + 开源"三个维度,国产已经领先;在"顶级推理 + 多模态"两个维度,正在快速逼近。DeepSeek 是这条路上的标杆。


面试高频问答 10 题

这一章把大厂算法岗/Infra 岗关于 DeepSeek 的常见面试题整理出来。建议先盖住答案自己想,再对照。

Q1:MLA 和 GQA 的本质区别是什么?为什么 MLA 压缩比更高?

  • GQA 是"共享"思路:让多个 query 头共享同一组 KV,通过减少 KV 头数来省显存。压缩比受限于"共享多少头",共享太多会丢多头多样性,效果下降。
  • MLA 是"低秩压缩"思路:通过降维矩阵 W_DKV 把 KV 压缩成一个小的潜在向量 C_KV(如 512 维),推理时只缓存它。再用"权重吸收"把升维矩阵 W_UK/W_UV 融合进 W_Q/W_O,使得推理时不用真正还原 KV,直接用压缩向量算 Attention。
  • 本质区别:GQA 是"砍 KV 头数"(有损),MLA 是"用低秩近似 KV"(近无损)。MLA 压缩比可达 30-57 倍,远超 GQA 的 8-16 倍,且效果几乎不损失。

Q2:MLA 推理时为什么要做"权重吸收"?吸收了哪些权重?


因为如果只压缩 KV、计算时还要还原成完整 K/V,那计算量没省。利用矩阵转置性质 (AB)^T = B^T A^T,可以把升维矩阵吸收掉:

  • W_UK(K 的升维)被吸收进 W_UQ(Q 的权重),合并成 W_UQ_absorbed
  • W_UV(V 的升维)被吸收进 W_O(输出投影)。
    这样推理时直接用压缩的 C_KV 算 attention,无需还原 K、V。吸收是一次性预计算(权重加载时做),推理零额外开销。这就是"显存省了,计算几乎没增加"的关键。

Q3:MLA 如何处理 RoPE?为什么要"解耦"?


RoPE(旋转位置编码)是对角矩阵,会插在 Q^T * K 之间,破坏矩阵乘法的可结合性,导致 W_UK 无法被简单吸收(R * W_UK ≠ W_UK * R)。
解耦方案:给 Q、K 各切出一小段维度(V4 是 64 维)专门放 RoPE 信息,这部分不走低秩压缩,单独算 q_R^T * k_R;不带 RoPE 的主部分走 MLA 低秩通道。最终 attention = 主通道 + RoPE 通道(加法拼接)。这样既保留了 RoPE,又不影响权重吸收。

Q4:DeepSeekMoE 的"细粒度专家分割"和"共享专家"分别解决什么问题?

  • 细粒度专家分割:解决"专家不够专业"。把大专家拆成多个小专家,专家数增多(如 8→64),激活数同步增多(如 2→6)保持计算量不变。组合数暴涨(28→7400万),每个 token 能选到更对症的专家组合,专业化程度提升。
  • 共享专家:解决"参数冗余"。隔离出 K_s 个共享专家,每个 token 无条件必走,专门学通用知识(语法、常识),避免每个路由专家重复学,提升参数效率。V3/V4 用 1 个大容量共享专家(中间层是路由专家的 8 倍)。

Q5:V3 的"无辅助损失负载均衡"是怎么做到的?相比 aux loss 有什么优势?


给每个专家加一个不参与梯度回传的 bias,加在路由分数上。训练中根据专家实际负载动态调整 bias:过载的专家降 bias(减少被选),闲置的升 bias(增加被选)。
优势:

  1. 不干扰主任务梯度(aux loss 会把均衡压力混进 loss,损害效果)。
  2. 无需调 aux loss 超参。
  3. 均衡更直接、更稳定。
    本质是把"软约束(loss 惩罚)“换成"硬调控(bias 旋钮)”。

Q6:MoE 训练时为什么会"路由崩塌"?如何缓解?


路由崩塌指少数专家被反复选中、学得越来越好,其他专家"饿死"的恶性循环。
缓解方法:

  1. 辅助损失(V2):在 loss 加 f_i * P_i 惩罚项,强迫负载均匀。
  2. 无辅助损失 bias 调控(V3):动态调 bias。
  3. 专家分组 + Device-Limited Routing:限制跨设备路由,避免热点。
  4. Token 丢弃(V2 有,V3 取消):超载 token 直接丢弃。
  5. 良好的初始化 + warmup。

Q7:FP8 训练的主要难点是什么?DeepSeek 用了哪些技巧?


难点:FP8 动态范围窄(易溢出/下溢),精度损失累积可能导致训练发散。
技巧:

  1. 分块量化(tile-wise):每 128×128 块单独算 scale,而非整张图一个 scale,精度损失大降。
  2. 双格式分工:前向用 E4M3(精度高),反向梯度用 E5M2(动态范围宽)。
  3. 选择性 FP8:只对大 GEMM 用 FP8,LayerNorm/softmax/残差累加仍用 BF16/FP32。
  4. loss scaling:反向梯度缩放防溢出。
  5. 优化器状态 FP32:Adam 动量高精度保存。

Q8:DeepSeek V4 Pro 671B 参数为什么训练/推理成本这么低?


三层原因叠加:

  1. MoE 架构:每个 token 只激活 37B,训练/推理 FLOPs 远低于 Dense 同知识容量模型。同样算力访问 18 倍知识。
  2. MLA:KV Cache 压缩 30-57 倍,长上下文推理显存大降,并发能力提升几十倍,单卡能服务更多请求。
  3. FP8 训练 + DualPipe:训练算力利用率翻倍、显存减半、通信与计算重叠,MFU 拉到 50%+。
  4. 工程极致优化:PTX 级通信 kernel、MoE 通信 offload 等。
    综合下来,训练成本 $557 万,推理价格打到 GPT-5.5 的 1/30。

Q9:面试官问"MoE 推理时还用辅助损失吗",怎么答?


不用。辅助损失(aux loss)和 bias 调控都只在训练阶段用,目的是让专家负载均衡、训练稳定。推理时,路由权重(gate)已固定,每个 token 直接按 topk(gate(x)) 选专家即可,不需要任何均衡机制。这是常见陷阱题,考察对训推差异的理解。

Q10:给定一个业务场景(如客服问答),如何在 DeepSeek V4 Pro 和 Flash 间选型?


看三个维度:

  1. 质量要求:客服问答对推理深度要求中等,Flash 足够;若涉及复杂业务逻辑判断,上 Pro。
  2. 并发/成本:客服高并发、成本敏感,Flash 输出 ¥2/百万 token,远优于 Pro 的 ¥8。
  3. 上下文长度:若要带很长历史对话,Flash 的 256K 更从容。
    结论:客服问答首选 V4 Flash,质量不够再局部升 Pro(混合调度)。配合 prompt 缓存进一步降本。决策时用"性价比 = 分数/价格"量化对比,而非单纯看分数。

面试加分:能主动提到"用 A/B 测试在真实流量上验证 Flash 是否够用"、“用 Pro 兜底 Flash 失败 case 的混合架构”,会显得很有实战经验。


总结

写到这里,这篇近 6 万字的长文接近尾声。我们快速回顾全文核心。

核心要点回顾

  1. DeepSeek V4 凭什么 1/30 价格对标 GPT-5.5?答案是"三件套":MLA(省显存)+ MoE(省算力)+ FP8(省训练成本),加上极致的通信和工程优化,把性价比做成了不可复制的护城河。
  2. MLA 的精髓:低秩压缩 KV Cache 到潜在向量 + 权重吸收(W_UKW_QW_UVW_O)+ RoPE 解耦。压缩比 30-57 倍,效果近无损,是 GQA/MQA 做不到的。
  3. DeepSeekMoE 的精髓:细粒度专家分割(更专业)+ 共享专家隔离(去冗余)+ 无辅助损失 bias 均衡(更稳)。671B 参数只激活 37B,"知识容量/计算成本"比 Dense 高 18 倍。
  4. FP8 训练:分块量化 + E4M3/E5M2 双格式 + 选择性 FP8,业内首次大规模跑通,训练成本 $557 万。
  5. V4 Pro vs Flash:Pro 打旗舰质量,Flash 打性价比和长上下文(256K)。大部分业务用 Flash 即可,省钱又够用。
  6. 国产格局:DeepSeek(性价比+开源)、Qwen(生态全栈)、GLM(免费+政企)、Kimi(长文本)、豆包(流量+低价)五强争霸,国产在"性价比+中文+开源"已领先海外。
  7. 长期主义:DeepSeek 通过开源建生态(安卓模式),自研芯片下沉到硬件层,把性价比优势做成全栈护城河。

给不同读者的建议

  • 面试党:重点啃第 3、4、5 章和面试 10 题,MLA/MoE/FP8 是必考点。
  • 应用开发者:直接看第 7 章,4 段代码复制即用,OpenAI 兼容零迁移成本。
  • 架构师/Infra:第 3、4、5 章的工程细节 + 第 9 章芯片方向,关注训推一体和软硬协同。
  • 决策者/PM:第 6、8、10 章的选型表和性价比数据,帮你做技术选型和成本测算。

一句话收尾

DeepSeek V4 给我们的最大启示不是"某个技术多牛",而是**“系统工程的力量”**——MLA、MoE、FP8、DualPipe 每一项单独看都不算石破天惊,但 DeepSeek 把它们打磨到极致并协同起来,就形成了代差。这恰恰是"善弈者,通盘无妙手"的最佳注脚。

在大模型这条赛道上,2026 年的国产已经不只是"追赶者",更是某些维度的"定义者"。作为技术人,我们生在一个好时代。


如果这篇文章对你有帮助,欢迎点赞收藏,也欢迎在评论区交流你对 MLA / MoE / FP8 的理解和实战经验。后续我会继续更新大模型架构、推理优化、Agent 实战等系列文章,关注不迷路。

参考资料

  • DeepSeek-V2 Technical Report (arXiv:2405.04434)
  • DeepSeek-V3 Technical Report (arXiv:2412.19437)
  • DeepSeekMoE: Towards Ultimate Expert Specialization
  • DeepSeek-V4 Preview Release Notes (2026.07)
  • HuggingFace: deepseek-ai/DeepSeek-V3 config.json
  • sglang / vLLM MLA 推理实现源码

(本文部分 2026 年数据为基于公开信息的整理与合理推演,具体以官方最新公告为准。)

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐