来源丨https://www.zhihu.com/question/655172528/answer/3495218670
编辑丨GiantPandaCV
个人评价 DeepSeekV2 是一次具备全球技术创新性、领先性的大模型开源,不仅是最强/最先进的国内开源大模型,在国际舞台上亦能比肩 LLaMa3 和 Mixtral-8x7/22-MoE。非常期待后续在 Chatbot Arena Leaderboard ( https://chat.lmsys.org/?leaderboard )中的排名表现。
本文主要讨论 训练/推理成本 与 全新 MLA 和 MoE 架构对于分布式训练带来的挑战。
评论区经
@233
提醒:KVCache 的公式计算没有考虑到 DeepSeekV2 的特殊情况不满足 h = n_head * d_h,应该直接使用 d_h 进行估计。已更正合并到下方正文中:
之前推理成本的估计不太准确,这里附上一个更详细的比较方式,比较 DeepSeekV2 和 LLaMa3-70B 的推理成本:
影响推理成本的三个主要因素:(主要说 Decoding 阶段)
首先给出 KVCache 的计算公式:
其中:
MLA 和 GQA 的对比
根据技术报告中的 Table 1 我们可以知道:MLA 在推理成本上等效于 GQA 的
我们统一假设对于 KVCache 而言
, 对于 Weight 而言
,seq len 默认取 4k,则二者需要的显存可以见下表:
DeepSeekV2 单机可以支持 5K batch size
参考 config:
以 A800 8x80G 单节点为例, 总显存大小共 640GB。DeepSeekV2 用 EP8,单节点只放一个实例, LLaMa3 用 TP4,单节点放 2 个实例, EP8 的通信量(限制 max routed device = 3)比 TP4 要小。且 EP 的通信可以跟 Expert 计算做 Overlap。这里简单假设忽略掉通信开销。则单机 DeepSeekV2 需要消耗 236GB 存储 weight (剩余 404GB), LLaMa3 70B 需要消耗 142GB 存储 2 份 weight (剩余 498GB)。我们留一定的空间存储 Activation,则至少可以满足:
则可知,单机 8x80GB,DeepSeekV2 的 batch size 可以开到 LLaMa3-70B 的 5120/1344= 3.8 倍。
假设总共都是 5K 的 batch size,使用 8x80GB 的 A800-SXM 机器,推理 next token,总的推理成本:
假设 5K 的 batch size, token 一定会分布在所有的 160 routed expert,所以需要加载 MoE 全部的权重
1. DeepSeekV2 带宽需求:需要加载 236GB (weight size) + 363GB (kvcache) 的显存
2. LLaMa3-70B 带宽需求:需要加载 ( 142GB (weight size) + 451GB (kvcahce) ) * 4 次 的显存
因此带宽需求上 LLaMa3-70B 的带宽需求就是 DeepSeekV2 的近 4 倍。
该预测结果和 DeepSeekV2 技术报告中的 KVCache 节省量的估计出入较大,而我们可以认为 DeepSeek-67B 是一个 LLaMa3-70B 的近似版本(在 Inference 角度)。和 @罗福莉 讨论后了解到这里的 93% 是一个加上量化之后的效果,相当于 6bit 量化对标原先的 16bit。除开量化的效果是 60*2.25/(95*8) = 0.18,节省程度是 82%。
DeepSeekV2 和 DeepSeek-67B 的 KVCache 估计
计算成本上,理论计算量为 FLOPs=2ND,则两者的比值是:
实际的推理成本比值是 带宽读取时间 + 计算时间,无论是 Memory Bound 还是 Compute Bound,两者的比值都是在 3.4 - 3.8 之间。
因此 推理成本上 LLaMa3-70B 的推理成本是 DeepSeekV2 的 4 倍。
DeepSeekV2 的激活参数量 21B,总参数量 236B,激活参数占比不到 9%,于此对应的是: - Mixtral-8x7B 激活参数量 13B,总参数量 46B,激活参数占比 28%; - Grok-1 激活参数量 86B,总参数量 314B,激活参数占比 27%; - LLaMa3-70B 激活参数量和总参数量均为 71B,激活参数占比 100%。
DeepSeekV2 的 Benchmark 指标和 LLaMa3-70B 接近,但区别是:
训练成本估计:
理论计算量:
但实际的训练成本考虑到 MFU,假设 LLaMa3-70B 的 MFU 和 DeepSeek-67B 的 MFU 接近:
DeepSeekV2 和 DeepSeek-67B 的 GPU cost
因此实际的训练成本开销是 LLaMa3-70B 的
左右。
【以下推理成本估计不对,已经更正到正文的最开头。】
~~ 推理成本估计: 由于 EP 的通信量比 TP 要低,且 all2all communication 可以跟 expert compute 做 overlap,所以 MoE 在推理时的优势更大(单机 8 卡单个模型实例叠加超大 batch size 做 load balance), 叠加 MLA 在 KVCache 上的大幅节省。 一般 GQA 中的
, 因此:
总的推理加速效果为:
不到 LLaMa3 的 1/10 ~~
DeepSeekV2 的极致性价比引入的代价就是训练难度大幅增加。相较于目前的 Dense 模型和之前最流行的 MoE 模型, DeepSeekV2 的 Expert token 训练量 和 Attention token 训练量的差距是最大的:
当 Expert 训练 token 量占比过低时,expert 可能未充分训练 under-trained,而 Attention 部分的参数早已是 over-trained,导致最终模型性能很差。这也是 MoE 的稀疏程度不能过高的主要约束。
相较于业界常规的 8/16/32 expert 选 top2 的常规套路,DeepSeekV2 设计了一种 shared expert 2 + 160 routed expert 选 top6 的 MoE 规则,确实非常具有创新性。因此我自己对 DeepSeekV2 开源的评价是要高于 LLaMa3 的开源的。本质上 LLaMa3 以及其他所有 Dense 开源模型,都是在复现 LLaMa2 的基础上卷数据,其中 LLaMa3 是卷数据卷的最狠的,因此也是模型能力最强的 8B/70B 模型。而 Mistral 的 MoE,用的是最容易训练的 Upcycling 路线,8选2 的稀疏性也是很低的,是一个很接近 Dense 的 MoE。而 DeepSeekV2 则是在一个非常具有挑战性的稀疏程度上训练且效果很好的 MoE 模型,并第一时间开源,非常敬佩。
大家讨论 MLA 主要在聊推理优化方面的事情,且 DeepSeek 非常 NICE 的开源了他们适配 VLLM 做推理加速的代码:
官方推荐的 VLLM 支持 DeepSeekV2 推理加速的示例
我这里就从 训练 infra 角度也聊聊 MLA + shared expert。相较于 Mistral MoE, DeepSeekV2 的训练 infra 工作挑战是显著增加的。(内心狂喜哈哈哈)
1.MLA 导致需要重新设计 Transformer Tensor Parallel
目前 Transformer 一族分布式训练的 3-D 并行均沿用了 Megatron 的设计:Efficient Large-Scale Language Model Training on GPU Clusters Using Megatron-LM ( https://arxiv.org/pdf/2104.04473 ),其中 Attention 部分是用一个 Column Parallel Linear + Row Parallel Linear 来实现的 Tensor Parallel:
Attention 部分的 TP 设计
这样设计的好处是人工最小化 TP 的通信量,前向(g)和反向(f)均只有一次 AllReduce ,前向的通信大小是 Z Tensor 的大小。Attention 中间的 Add、Softmax、Dropout 等操作都是不需要通信、且是 partial 的,没有冗余计算。
具体原理参考: 成诚:OneFlow —— 让每一位算法工程师都有能力训练 GPT ( https://zhuanlan.zhihu.com/p/371499074 )中对于两种 TP 的 Linear :Column Parallel Linear 和 Row Parallel Linear 的逻辑化描述,col 输出的 S1 的 Tensor 可以一直保留到 row 输入不用变(假设中间的 op 均支持 S1 计算)
使用 OneFlow SBP 原语描述 Column Parallel Linear
使用 OneFlow SBP 原语描述 Row Parallel Linear
但 MLA 不一样, 原本 MHA 逻辑里只有两层 Linear (QKV 和 B),但 MLA 是压缩了 KV,在解压缩的过程中就需要多一层 Linear 计算:
MLA 解压缩 latent kv 的逻辑
三层的 Linear,如何设计 Tensor Parallel 呢?如何组合 Column/Row Parallel Linear,则是一个新的问题,既跟网络结构相关,也跟三层 Linear 的 tensor shape 相关,毕竟压缩前后的 shape 有一个明显的大小关系。
另一个值得注意的点是,即使是 236B 的超大模型, DeepSeekV2 在训练的时候也是没有开启 Tensor Parallel 的,而是:
DeepSeek V2 的分布式并行配置
@罗福莉
不知道训练时不开 Tensor Parallel 的考虑主要是因为什么呢?
按照 DeepSeek V2 的设计,Attention 部分的 weight 大小是大于 6 个 Expert 的 weight 的,即激活参数中,Attention 占比超过 50%。
2.Unbalanced Pipeline Parallelism ?
技术报告中明确了 Pipeline Parallel Size 是 16,但模型的结构是 60 层 Transformer Layer:
DeepSeekV2 模型 config
而 60 层是不能整除 16 的。
@罗福莉
这样设计的好处是什么?如果要最小化缝隙的话,可能 62 或者 63 (64-1) 更合适?
3.MoE Shared Expert
MoE 部分在别家都是 8/16 Expert 选 top2 时, DeepSeekV2 设计了一种 Shared Expert 2 + Routed Expert top-6 from 160 的新 routing 逻辑。在并行时,还限制了 单个 token (top-6)只能分配到至多 3 个 GPU 上。(不做限制的话,最多可以到 6 个 GPU 上)
DeepSeek MoE 部分, Ns=2,Kr=6
总共的 Expert 数量是 162 个。
对于常规的 MoE 模型,EP = 8 时, 就将所有 Expert 均分即可。但是对于 DeepSeek MoE 这种非对称的分发方式,如何在 Expert Parallel 中给不同的 GPU 分配 Shared Expert 和 Routed Expert,则是一个新的话题。
以上就是目前认为的几处对于分布式训练提出的挑战,每个问题我这边都有一个 naive 的解决方案。也欢迎大家对于上述问题与我讨论~
总之,DeepSeekV2 是一个非常让人惊喜的模型,并且还开源了。与 LLaMa3 不同的是, DeepSeekV2 有多处很有分量的原创工作,甚至有可能引领全球 LLM 的发展潮流,非常值得赞赏!也为 DeepSeek 是一个中国 team 感到自豪。
- The End -
本文分享自 GiantPandaCV 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!