DeepSeek v3 技术报告阅读笔记

news2025/2/19 16:22:33

在这里插入图片描述

  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.coloradmin.cn/o/2299071.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GESP2024年9月认证C++七级( 第三部分编程题(1)小杨寻宝)

参考程序&#xff1a; #include <bits/stdc.h> using namespace std; const int N 1e510; vector<int> g[N]; // 图的邻接表 int col[N], dep[N], has[N];// 深度优先遍历&#xff0c;计算每个节点的深度 void dfs(int x, int fa) {dep[x] dep[fa] 1; // 计算…

解锁电商数据宝藏:淘宝商品详情API实战指南

在电商蓬勃发展的今天&#xff0c;数据已成为驱动业务增长的核心引擎。对于商家、开发者以及数据分析师而言&#xff0c;获取精准、实时的商品数据至关重要。而淘宝&#xff0c;作为国内最大的电商平台&#xff0c;其海量商品数据更是蕴含着巨大的价值。 本文将带你深入探索淘…

webshell通信流量分析

环境安装 Apatche2 php sudo apt install apache2 -y sudo apt install php libapache2-mod-php php-mysql -y echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php sudo ufw allow Apache Full 如果成功访问info.php&#xff0c;则环境安…

在 rtthread中,rt_list_entry (rt_container_of) 已知结构体成员的地址,反推出结构体的首地址

rt_list_entry (rt_container_of)宏定义&#xff1a; /*** rt_container_of - return the start address of struct type, while ptr is the* member of struct type.*/ #define rt_container_of(ptr, type, member) \((type *)((char *)(ptr) - (unsigned long)(&((type *…

趣味魔法项目 LinuxPDF —— 在 PDF 中启动一个 Linux 操作系统

最近&#xff0c;一位开源爱好者开发了一个LinuxPDF 项目&#xff08;ading2210/linuxpdf: Linux running inside a PDF file via a RISC-V emulator&#xff09;&#xff0c;它的核心功能是在一个 PDF 文件中启动并运行 Linux 操作系统。它通过巧妙地使用 PDF 文件格式中的 Ja…

【Linux】Socket编程—TCP

&#x1f525; 个人主页&#xff1a;大耳朵土土垚 &#x1f525; 所属专栏&#xff1a;Linux系统编程 这里将会不定期更新有关Linux的内容&#xff0c;欢迎大家点赞&#xff0c;收藏&#xff0c;评论&#x1f973;&#x1f973;&#x1f389;&#x1f389;&#x1f389; 文章目…

新数据结构(9)——Java异常体系

异常的种类 程序本身通常无法主动捕获并处理错误&#xff08;Error&#xff09;&#xff0c;因为这些错误通常表示系统级的严重问题&#xff0c;但程序可以捕获并处理异常&#xff08;Excrption&#xff09;&#xff0c;而Error则被视为一种程序无法或不应尝试恢复的异常类型。…

NixHomepage - 简单的个人网站

&#x1f4bb; NixHomepage - 简单的个人网站 推荐下个人的开源项目&#xff0c;演示网站&#xff0c;项目链接 https://github.com/nixgnauhcuy/NixHomepage&#xff0c;喜欢的话可以为我的项目点个 Star~ &#x1f4f7; 预览 ⚙️ 功能特性 多平台适配 明亮/暗黑模式切换 W…

HCIA项目实践---OSPF的知识和原理总结

9.5 OSPF 9.5.1 从哪些角度评判一个动态路由协议的好坏&#xff1f; &#xff08;1&#xff09;选路佳&#xff08;是否会出环&#xff09; OSPF 协议采用链路状态算法&#xff0c;通过收集网络拓扑信息来计算最短路径&#xff0c;从根本上避免了路由环路的产生。 &#xff08…

Calico网络组件本地部署支持IPv6(Kubernetes)

知其然 问题背景 因项目现场的网络正逐步从IPv4向IPv6迁移&#xff0c;这几年现场服务器基本上都配置了双栈&#xff1b;但随着IPv6铺开&#xff0c;出现了很多纯IPv6的服务器&#xff0c;并且要求通信优先使用IPv6。 在项目建设之初&#xff0c;其实就考虑了上述情况&#…

【广州大学主办,发表有保障 | IEEE出版,稳定EI检索,往届见刊后快至1个月检索】第二届电气技术与自动化工程国际学术会议 (ETAE 2025)

第二届电气技术与自动化工程国际学术会议 (ETAE 2025) The 2nd International Conference on Electrical Technology and Automation Engineering 大会官网&#xff1a;http://www.icetae.com/【更多详情】 会议时间&#xff1a;2025年4月25-27日 会议地点&#xff1a…

Python项目31:待办事项列表应用1.0(命令行界面+Json+类+初学者必做)

------------★Python练手项目源码★------------ Python项目27&#xff1a;用Tkinter写日志管理系统&#xff08;中下等难度&#xff09; Python项目26&#xff1a;设计学生成绩管理系统&#xff08;简易版&#xff09; Python项目25&#xff1a;带滚动效果的商场抽奖系统&…

Redis 01 02章——入门概述与安装配置

一、入门概述 &#xff08;1&#xff09;是什么 Redis&#xff1a;REmote Dictionary Server&#xff08;远程字典服务器&#xff09;官网解释&#xff1a;Remote Dictionary Server(远程字典服务)是完全开源的&#xff0c;使用ANSIC语言编写遵守BSD协议&#xff0c;是一个高…

Large Language Model Distilling Medication Recommendation Model

摘要&#xff1a;药物推荐是智能医疗系统的一个重要方面&#xff0c;因为它涉及根据患者的特定健康需求开具最合适的药物。不幸的是&#xff0c;目前使用的许多复杂模型往往忽视医疗数据的细微语义&#xff0c;而仅仅严重依赖于标识信息。此外&#xff0c;这些模型在处理首次就…

2025最新版Node.js下载安装~保姆级教程

1. node中文官网地址&#xff1a;http://nodejs.cn/download/ 2.打开node官网下载压缩包&#xff1a; 根据操作系统不同选择不同版本&#xff08;win7系统建议安装v12.x&#xff09; 我这里选择最新版win 64位 3.安装node ①点击对话框中的“Next”&#xff0c;勾选同意后点…

springboot如何将lib和jar分离

遇到一个问题&#xff0c;就是每次maven package或者maven install后target中的jar很大&#xff0c;少的50几MB&#xff0c;大的100多兆 优化前&#xff1a; 优化后&#xff1a; 优化前 优化后压缩率77.2MB4.65MB93% 具体方案&#xff1a; pom.xml中 <build><…

RocketMQ和Kafka如何实现顺序写入和顺序消费?

0 前言 先说明kafka&#xff0c;顺序写入和消费是Kafka的重要特性&#xff0c;但需要正确的配置和使用方式才能保证。本文需要解释清楚Kafka如何通过分区来实现顺序性&#xff0c;以及生产者和消费者应该如何配合。   首先&#xff0c;顺序写入。Kafka的消息是按分区追加写入…

Node.js技术原理分析系列——Node.js调试能力分析

本文由体验技术团队屈金雄原创。 Node.js 是一个开源的、跨平台的 JavaScript 运行时环境&#xff0c;它允许开发者在服务器端运行 JavaScript 代码。Node.js 是基于 Chrome V8引擎构建的&#xff0c;专为高性能、高并发的网络应用而设计&#xff0c;广泛应用于构建服务器端应…

从技术债务到架构升级,滴滴国际化外卖的变革

背 景 商家营销简述 在外卖平台的运营中&#xff0c;我们致力于通过灵活的补贴策略激励商家&#xff0c;与商家共同打造良好的合作关系&#xff0c;也会提供多样化的营销活动&#xff0c;帮助商家吸引更多用户下单。通过这些活动&#xff0c;不仅能够提高商家的销量&#xff0c…

SQL Query美化

推荐一个可以美化Query的网站&#xff01; 名称&#xff1a;SQL formatter | Online free SQL Beautifier 地址&#xff1a;https://sqlformatter.org/# 在处理 SQL 查询语句时&#xff0c;可读性是至关重要的。 杂乱无章的 SQL代码不仅难以理解&#xff0c;还会给后续的维…