当前位置: 首页 > article >正文

DeepSeek v3 技术报告阅读笔记

在这里插入图片描述

  1. 本文参考 DeepSeek-v3 / v2 / v1 Technical Report 及相关参考模型论文
  2. 本文不包括基础的知识点讲解,为笔记/大纲性质而非教程,建议阅读技术报告原文
  3. 交流可发送至邮箱 henryhua0721@foxmail.com

在这里插入图片描述
在这里插入图片描述

架构核心

核心:

  • MLA 高效推理
  • DeepSeekMOE 更经济的训练
  • MTP 提高模型性能

架构上看主要改进在于Attention层和FFN层:
在这里插入图片描述

MLA

参考deepseekv2的technical report内容

KV cache

类GPT模型的decoder架构在推理时一个个token输出,每一次输出都作为下一次输出的输入,带来大量重复计算。KV cache空间换时间,降低推理复杂度

w/o KV cache:

每一次推理计算attention时,当前token前的token QK计算在前面步骤被重复计算,结果可以使用KV cache存储而非再次计算。
在这里插入图片描述
huggingface/transformers/gpt2的KV cache代码:

        if layer_past is not None:
            past_key, past_value = layer_past
            key_states = torch.cat((past_key, key_states), dim=-2)
            value_states = torch.cat((past_value, value_states), dim=-2)

        if use_cache is True:
            present = (key_states, value_states)
        else:
            present = None

KV cache存在的问题:对GPU memory的需求巨大
解决办法:

  • Quantization
  • (Deepseek)减小输入以减小cache

Letent KV

在这里插入图片描述
使用letent KV替代传统KV存储到cache中。对kv压缩
在这里插入图片描述

  • 传统attention:k = Wh / v = Wh
  • latent KV:使用更小的letent变量c作为中间变量,可以表示 k/v,存储cache

在推理的时候本质上不需要计算出单独的k和v变量:
在这里插入图片描述

计算q*kT的时候可以使用线性代数运算使得不需要单独提出参数矩阵,而是可以化为大的参数矩阵(图中 W^ QT 和 W^ UK 相乘)

同样对key压缩
在这里插入图片描述

Decouple RoPE

参考:Multi-Head Latent Attention: Boosting Inference Efficiency
RoPE的引入导致q和k都被R矩阵加权,对KV cache造成的损害:
在这里插入图片描述

解决办法:引入新的multi-head queries(和不做低秩分解的q相同)
在这里插入图片描述

  • 每个 attn 层额外增加 multi-head queries q^R
  • 添加共享的key用于 k^R
  • 再将 q^ R 和低秩分解的 q、k^R 和低秩分解的k concate起来

huggingface discussion上似乎提供了更sufficient方法:将rope part和none-rope part进行sum up而非concatenate
(链接找不到了qwq)

在这里插入图片描述

KV cache存储的:

  • c^KV
  • k^R

DeepSeekMOE

MOE

大语言模型主要的计算量集中在attention层,参数量集中在FFN层。
MoE的本质是将FFN分组。好处在于模型易于scale up以及降低cost。
在这里插入图片描述
Gate将输入计算前往各个FFN分组的概率:

  • Dense MoE:计算每个分支的概率,并进行加权
  • Sparse MoE:取概率top-k

每个expert是两个MLP层。
传统MoE的问题:学习知识重合、expert之间无法区分 -> DeepSeekMOE

Load Balance

传统MOE训练出现马太效应:某个单个expert训练较好,引导gate划分更多token给它训练,导致单个expert过拟合、其他expert欠拟合。

Load balance的解决办法:

  • (Switch transformer) loss control:在损失函数中制约
  • (DeepSeek) loss free:添加bias

在这里插入图片描述

DeepSeekMOE

  • 划分更小的exert
  • 设置某些共享expert学习常识

在这里插入图片描述

  • Fine-grained Expert Segmentation
    • N expert -> 2N expert,top2 -> top4。
    • 降低每个expert(两层MLP)中间层宽度,使得model整体参数量没有变大,但是减小了模型variance
  • Shared Expert Isolation:shared expert
    • 具有error correction机制:大多数问题shared expert会回答(通),其他expert(专)进行correct

load balance

  • 添加bias
    在这里插入图片描述

通过添加bias手动提高softmax后某些expert的概率。在训练中,观察后不断进行调整(但是不属于loss的范畴)

  • sequence-wise balance loss(区别于传统的token-wise)
    在这里插入图片描述
  • Node-limited Routing:训练时限制每个token只送到M个nodes中,降低通信成本。
  • No token-dropping:token-dropping是对于load balance比较高的expert drop掉新的token input(直接过残差层不经过FFN)。这里不使用,因为上面的方法已解决load balance。

MTP

Deepseek MTP参考:

  1. Meta MTP
  2. EAGLE
    在这里插入图片描述

当前language model的训练方式导致的问题:

  • teaching force导致training每次输入的都是perfect content
  • NTP导致近视👓,planning能力差
  • 每次只预测下一个token,training signal较弱

-> 一次预测多个token :MTP

Meta MTP

将head分组,每个head负责一个token
在这里插入图片描述

  • training singal更强(每一层都有反馈)
  • 一次预测4个token,加强planning能力
  • 缓解teaching force问题,不再过于local

但是并行heads违背了auto regression的想法,打破前后依赖 -> EAGLE(使用auto regression heads)

Speculative Decoding

LLM inference的问题 -> Slow

  • KV cache
  • speculative decoding
    • quick guess(小模型,快但精度低)
    • cheap verification(大模型,慢但精度高)

实现方式

  • independent:两个LLM一大一小
    • 简化过程:小LM生成sequence后给大LM计算每个token概率,若一致则accept,否则从reject token开始重新生成
    • 实际上使用小LM加速大LM生成过程,大LM生成过程中实时纠错
      在这里插入图片描述
  • self:只借助大LLM中间某些head实现
    • Medusa / EAGLE 模型
      在这里插入图片描述

DeepSeek MTP

使用类似EAGLE的casual arc(而不是parallel)替换META MTP中的实现:
在这里插入图片描述


http://www.kler.cn/a/546795.html

相关文章:

  • spring 中 AspectJ 基于 XML 的实现分析
  • 安全启动(secure boot)怎么关闭_史上最全的各品牌机和组装机关闭安全启动教程
  • 将错误消息输出到标准错误流:Rust中的最佳实践
  • web第三次作业
  • 浏览器安全学习
  • 中兴R5300 G4服务器配置磁盘RAID
  • 人工智能之知识图谱实战系列
  • 三格电子——TCP转ProfibusDP网关使用场景
  • 从技术债务到架构升级,滴滴国际化外卖的变革
  • [0696].第11节:Kafka-Eagle监控
  • dayjs的isSameOrAfter、isSameOrBefore、isAfter、isBefore学习
  • 微软AutoGen高级功能——Selector Group Chat
  • 【webview Android】视频获取首帧为封面
  • 服务器防护(ubuntu)
  • 辛格迪客户案例 | 钥准医药科技GMP文件管理(DMS)项目
  • oracle 19c安装DBRU补丁时报错CheckSystemSpace的处理
  • 百度 AI开源!将在6月30日开源文心大模型4.5系列
  • 上下文编辑器在不同场景下的功能(含使用案例)
  • Spring Boot 常用依赖详解:如何选择和使用常用依赖
  • django上传文件