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

DeepSeek-v3在训练和推理方面的优化

1. 基础架构:MLA,大幅减少了KV cache大小。(计算量能不能减少?)

2. 基础架构:MoE,同等参数量(模型的”能力“)下,训练、推理的计算量大幅减少。

3. MoE的load-balance

训练中,边训练,边调整每个MoE的路由权重。负载高的减少权重,负载低的增加权重。(传统方法是将负载均衡情况作为附加旁路loss。缺点是影响模型训练的主目标)。

训练中,用旁路loss来鼓励句子中命中expert更均匀。

限制每个token最多和M个GPU上的experts进行通信。

4. Multi-Token Prediction (MTP)

推理的时候就是Speculative Decoding。可以一次推理多个tokens(第1次全量推理,后面K次用很小的模型链式推理)。

训练的时候,一次可训练整个一个句子。可视为一张网络,用所有推理步的loss加和,作为总loss,更新一次模型。

把“未来”考虑到训练里,可以让模型不再“短视”。

推理时,既可以扔掉MTP Module使用token-by-token老式推理,又可以利用MTP Module使用speculative decoding推理。

5. DualPipe

总体架构:16路Pipeline并行,64路EP并行,Zero-1 DP并行。(如何布局在2048张卡上的?)

如果不做任何优化,MoE会导致训练集群的计算:通信=1:1.

forward阶段的batch,和backward阶段的batch,可同时调度到同一张卡上,从而overlap通信和计算:

想象有一排工人(GPU),面前有2条传送带(DualPipe),各自往相反的方向传送,每个工人可对1~2条传送带上的东西(任务)进行加工处理,如果,2个东西一个是计算任务一个是通信任务,则可并行处理之。

优点:1. overlap通信和计算。2.减少了bubble。

缺点:每张卡要保存2段模型(被EP路数分片多所化解)。新增少量要缓存的activation。

我的疑问:更新模型的同时还在做前向操作,如何确保同一个样本使用同一版本的模型参数呢?

6. All-to-All通信优化

NVLink带宽:160GB/s;  IB带宽:50GB/s

限制每个token只能被dispatch到最多4台机器(node),减少IB通信量。

先去重,后通过IB网传给各个node,再在各个node内部通过NVLink传给需要的GPU。好处1:去重,避免同一个token的激活在IB上传给同一个node多次,减少了跨节点通信量。好处2:形成流水线,目的地node的NVLink在多播第N个token时,IB可以同时在往目的地node发送第N+1个token。

用于通信的SM,20个就够了(一张GPU卡上一般有100多个SM)。

用于通信的warp数目,动态可调的。用PTX指令精细制作,减少L2-cache使用和对其他SM的干扰。

7. 显存优化

激活缓存:对计算量小的操作(例如RMSNorm),只保存input,output在backward时重新计算。

EMA参数放至CPU memory,异步放。

Token embedding层和output head层,放到了同一张卡上,可以share。share参数,share梯度存储。

8. FP8

开源大模型里首次使用FP8混合精度训练的。

FP8和INT8一样快;FP8比FP16(或BF16)要快1倍。

FP8原理类似INT8,先要统计矩阵数值,拿到scaling factor,矩阵绝对值的最大值对准FP8最大值;FP8乘法,累加到FP16或FP32的结果里。最后再用scaling factor恢复到FP16或FP32。

FP8混合精度训练架构:

大部分计算密集任务,用FP8来计算。小部分需要精度高才行的任务,保持BF16或FP32计算。

3个GEMM(正向传播,反向计算Weight梯度,反向计算Activation梯度),都用FP8计算。正向传播是的激活值,以FP8进行缓存,供反向传播计算Weight梯度时使用,减少了显存占用量。

非计算密集任务,或精度敏感的操作,仍保持高精度:embedding, output head,MoE gating,normalization操作,attention操作。

为维持数值稳定性,以下仍保持高精度:主Wegiht,梯度,Optmizer状态(Adam的2个参数)。可用Zero来减少显存占用。

细粒度量化:激活的量化单元设为1*128,权重的量化单元设为128*128。和整个矩阵做量化单元相比,好处:减少量化误差。

如上图,分片矩阵的FP8乘法之后,结果再乘以各自的scale(2个),加和到结果矩阵里。

这个叫做microscaling,NVIDIA下一代GPU架构官宣会支持。

提升累加的精度:发现H800的FP8乘加,会累加到14位数上面,精度不够易造成误差,特别是累加的数多的时候。

解决:在Tensor Core上,每累加一定次数后,就将中间累加结果,传输至CUDA core上和FP32进行累加。

指数和尾数:

老方法一般是用E4M3做前向传播,用E5M2做反向传播。这里得益于细粒度的分片量化,减少了分片内的数值范围,因此全部使用E4M3。

在线量化:

老方法一般是calibration时统计激活值范围,确定好量化scale,实际推理时复用该scale(类似“静态量化”的概念)。这里为了保持精度,不预先统计,随用随统计(类似“动态量化”的概念)。(权重因为会边训练边更新,所以训练时Weight也是随用随统计scale)。

9. 低精度存储和通信

Adam Optimizer的\alpha\beta,用的BF16。累加用的Gradient,全量Weight,用的FP32。

大部分激活值,缓存FP8值。特例:1. attention之后Linear变换之前的激活,用E5M6共12位来缓存。2. 只缓存SwiGLU的输入激活值,其输出激活值在backward时临时计算,可进一步减少缓存存储量。

MoE通信:1. forward时,激活值的dispatch通信(第1个矩阵乘法之前的),先量化为FP8,再all-to-all通信。2. backward时,梯度值的dispatch通信(第2个矩阵乘法之后的),先量化为FP8,再all-to-all通信。3. forward时,激活值的combine通信(第2个矩阵乘法之后的),保持BF16,进行all-to-all通信。4. backward时,梯度值的combine通信(第1个矩阵乘法之前的),保持BF16,进行all-to-all通信。  3和4涉及到加和操作,为了保持精度,所以采用BF16。

10. 推理:

采用PD分离。Decoding阶段用了10倍于Prefilling阶段的卡。暗合了我的测试结论,相同的token长度,Decoding阶段的耗时大约是Prefilling阶段的10倍。

Prefilling:

4台*8卡=32卡。

attention层:4路TP,外面套8路DP。4路TP比8路TP的好处是通信开销减小。

MoE层:32路Expert并行。好处:每个Expert可以分到更多的tokens(如果每个DP是一份完整的MoE,则总的Expert数目变成DP倍,每个Expert分到的token就少了)。我猜测的另一个好处:节约显存。

MoE的all-to-all:和训练阶段类似,也是先去重后通过IB网传给各个node,再在各个node内部通过NVLink传给需要的GPU。

MoE的负载均衡:在线推理阶段,监测Expert负载情况,每10分钟调整一次。让Heavy的GPU和清闲的GPU,互换一些Expert。对Heavy的Expert,启动一个冗余副本Expert,分散一部分token流量。比例:256个expert里选32个流量最大的,启动32个副本。

计算通信overlap: 把1个大batch拆分成2个小batch,错开发射时间,力争将<MoE前后的2次All-to-All,attention&MoE计算>,重叠起来。

显存换通信:每个GPU上,多放一倍的Expert。token路由时,可以找更好的发送方案。

Decoding:

40台*8卡=320卡。

attention层:TP4+SP,外层套80路DP。

MoE层:EP320,每张卡上就放1个Expert。256个常规Expert&64个shared/冗余Expert。

MoE的all-to-all:使用IB的point-to-point通信,降低了延迟。IBGDA技术。

MoE的副本冗余Expert: 也会在线上根据监控负载,来动态调整。把流量少的下掉,上线流量多的。

计算通信overlap: attention的耗时更大。因此,仍然采用2个小batch并行,只是改为<attention计算,all-to-all&MoE计算>,重叠起来。SM分配:后者计算量更小,因此,后者的SM少分些,前者的SM多分些。

相关文章:

DeepSeek-v3在训练和推理方面的优化

1. 基础架构&#xff1a;MLA&#xff0c;大幅减少了KV cache大小。&#xff08;计算量能不能减少&#xff1f;&#xff09; 2. 基础架构&#xff1a;MoE&#xff0c;同等参数量&#xff08;模型的”能力“&#xff09;下&#xff0c;训练、推理的计算量大幅减少。 3. MoE的load…...

将 AzureBlob 的日志通过 Azure Event Hubs 发给 Elasticsearch(3 纯python的经济方案)

前情&#xff1a; 将 AzureBlob 的日志通过 Azure Event Hubs 发给 Elasticsearch&#xff08;1&#xff09;-CSDN博客 将 AzureBlob 的日志通过 Azure Event Hubs 发给 Elasticsearch&#xff08;2&#xff09;-CSDN博客 python脚本实现 厉害的小伙伴最终使用python脚本免费…...

1️⃣Java中的集合体系学习汇总(List/Map/Set 详解)

目录 01. Java中的集合体系 02. 单列集合体系​ 1. Collection系列集合的遍历方式 &#xff08;1&#xff09;迭代器遍历&#xff08;2&#xff09;增强for遍历​编辑&#xff08;3&#xff09;Lambda表达式遍历 03.List集合详解 04.Set集合详解 05.总结 Collection系列…...

闪豆多平台视频批量下载器

1. 视频链接获取与解析 首先&#xff0c;在哔哩哔哩网页中随意点击一个视频&#xff0c;比如你最近迷上了一个UP主的美食制作视频&#xff0c;想要下载下来慢慢学。点击视频后&#xff0c;复制视频页面的链接。复制完成后&#xff0c;不要急着关闭浏览器&#xff0c;因为接下来…...

深入解析:如何用Java爬取淘宝分类详情接口(cat_get)

一、前言 淘宝分类详情接口&#xff08;cat_get&#xff09;是淘宝开放平台提供的一个接口&#xff0c;允许开发者获取淘宝商品的分类详情&#xff0c;包括分类ID、分类名称、父分类等信息。这些数据对于电商分析、市场研究和商品分类管理等具有重要价值。本文将详细介绍如何使…...

语音识别的预训练模型

语音识别的预训练模型 语音识别模型 大致分为两类: 连接时序分类(Connectionist Temporal Classification, CTC):仅编码器(encoder-only)的模型,顶部带有线性分类(CTC)头序列到序列(Sequence-to-sequence, Seq2Seq):编码器-解码器(encoder-decoder)模型,编码器…...

element-ui制作多颜色选择器

将颜色存储到一个数组中去。 <template><div class"color-picker-container" style"margin-top: 10px;"><!-- 显示已选颜色 --><div class"color-selection"><divv-for"(color, index) in selectedColors"…...

JVM体系结构

目录 一. JVM 规范 二. JVM 实现 (1) HotSpot (2) JRockit (3) IBM JDK&#xff08;J9 VM&#xff09; (4) Azul Zing (5) OpenJ9 三. JVM 实现的选择 四. JVM 的核心组件 五.JVM总结 六.Java 虚拟机&#xff08;JVM&#xff09;架构概述 1.Java 虚拟机&#xff08…...

wandb使用遇到的一些问题

整合了一下使用wandb遇到的问题 1.请问下如果电脑挂了代理&#xff0c;应该怎么办呢&#xff1f;提示&#xff1a;Network error (ProxyError), entering retry loop. 在本地&#xff08;而非服务器&#xff09;运行代码时&#xff0c;常常因为开启代理而无法使用wandb&#…...

Java中的继承

引入继承 Java中使用类对实体进行描述&#xff0c;类经过实例化之后的产物对象&#xff0c;就可以用来表示现实中的实体&#xff0c;描述的事物错综复杂&#xff0c;事物之间可能会存在一些关联&#xff0c;因此我们就需要将他们共性抽取&#xff0c;面向对象的思想中提出了继…...

Cadence笔记--原理图导入PCB

1、以PMU6050为例&#xff0c;首先在原理图双击PMU6050器件&#xff0c;在PCB_Footprint目录填写PCB封装名称并且保存&#xff0c;如下图所示&#xff1a; 2、确保原理图命名的名称不一样&#xff0c;否则会出错&#xff0c;这里PMU6050更改了NC等名称&#xff0c;如下图所示&a…...

从AI生成内容到虚拟现实:娱乐体验的新边界

引言 在快速发展的科技时代&#xff0c;娱乐行业正经历一场前所未有的变革。传统的娱乐方式正与先进技术融合&#xff0c;创造出全新的沉浸式体验。从AI生成的个性化内容&#xff0c;到虚拟现实带来的身临其境的互动场景&#xff0c;科技不仅改变了我们消费娱乐的方式&#xf…...

【Linux】gdb_进程概念

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由 JohnKi 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f4e2;未来很长&#…...

安全类脚本:拒绝ssh暴力破解

要求如下&#xff1a; 一个小时内&#xff0c;连续密码错误4次。 Linux lastb 命令用于列出登入系统失败的用户相关信息。 实验过程如下&#xff1a; 1. 创建两个IP地址不同的干净环境&#xff0c;分别是&#xff1a;192.168.46.101 Rocky 2 和 192.168.46.120 openEuler 2. 2.…...

Android15源码编译问题处理

最近想在Raspberry Pi5上面运行自己编译的Android15镜像,参考如下链接来处理: GitHub - raspberry-vanilla/android_local_manifest GitHub - raspberry-vanilla/android_kernel_manifest 代码同步完后,编译就出问题了,总是提示: FAILED: analyzing Android.bp files and…...

图解Git——分布式Git《Pro Git》

分布式工作流程 Centralized Workflow&#xff08;集中式工作流&#xff09; 所有开发者都与同一个中央仓库同步代码&#xff0c;每个人通过拉取、提交来合作。如果两个开发者同时修改了相同的文件&#xff0c;后一个开发者必须在推送之前合并其他人的更改。 Integration-Mana…...

Linux内核编程(二十一)USB应用及驱动开发

一、基础知识 1. USB接口是什么&#xff1f; USB接口&#xff08;Universal Serial Bus&#xff09;是一种通用串行总线&#xff0c;广泛使用的接口标准&#xff0c;主要用于连接计算机与外围设备&#xff08;如键盘、鼠标、打印机、存储设备等&#xff09;之间的数据传输和电…...

什么是数据仓库?

什么是数据仓库&#xff1f; 数据仓库&#xff08;Data Warehouse&#xff0c;简称DW&#xff09;是一种面向分析和决策的数据存储系统&#xff0c;它将企业中分散的、异构的数据按照一定的主题和模型进行集成和存储&#xff0c;为数据分析、报表生成以及商业智能&#xff08;…...

计算机网络 (48)P2P应用

前言 计算机网络中的P2P&#xff08;Peer to Peer&#xff0c;点对点&#xff09;应用是一种去中心化的网络通信模式&#xff0c;它允许设备&#xff08;或节点&#xff09;直接连接并共享资源&#xff0c;而无需传统的客户端-服务器模型。 一、P2P技术原理 去中心化架构&#…...

SK海力士(SK Hynix)是全球领先的半导体制造商之一,其在无锡的工厂主要生产DRAM和NAND闪存等存储器产品。

SK海力士&#xff08;SK Hynix&#xff09;是全球领先的半导体制造商之一&#xff0c;其在无锡的工厂主要生产DRAM和NAND闪存等存储器产品。以下是SK海力士的一些主要产品型号和类别&#xff1a; DRAM 产品 DDR4 DRAM 特点: 高速、低功耗&#xff0c;广泛应用于PC、服务器和移…...

量子计算中Loschmidt回声相位测量的创新方法

1. 量子计算中的Loschmidt回声相位测量方法概述Loschmidt回声是量子动力学中一个重要的概念&#xff0c;它描述了量子系统在时间反演演化后与初始状态的相似程度。在量子计算领域&#xff0c;精确测量Loschmidt回声的相位信息对于理解量子系统的非平衡态行为、计算能量本征值以…...

论文创新点像挤牙膏?导师强推这几个AI论文平台

想写论文又快又好&#xff0c;关键是用对 AI 工具、走对流程——资深教授普遍推荐&#xff1a;千笔AI&#xff08;中文全流程首选&#xff09; 豆包学术版&#xff08;轻量高效&#xff09; DeepSeek 学术版&#xff08;理工 / 长文本&#xff09; Grammarly Academic&#xff…...

ESP32多任务水位监测:从Arduino到ESP-IDF的FreeRTOS实战

1. 项目概述&#xff1a;从Arduino到ESP-IDF的跃迁去年我在做毕业设计时&#xff0c;为了搭建一个ESP32的传感器节点演示程序&#xff0c;第一次深入使用了FreeRTOS。那段时间&#xff0c;我几乎天天和任务调度、队列、信号量打交道&#xff0c;从最初的一头雾水到后来能流畅地…...

机器学习与SHAP在教育公平研究中的应用:精准定位学业困境根源

1. 项目概述&#xff1a;当机器学习遇见教育公平&#xff0c;我们如何精准定位学业困境的根源&#xff1f;在拉丁美洲的教育研究领域&#xff0c;一个长期困扰政策制定者和研究者的核心问题是&#xff1a;究竟是什么因素&#xff0c;在复杂的社会经济背景下&#xff0c;系统性地…...

网络配置工具类详解

CNet 网络配置工具类详解平台&#xff1a;仅支持 Linux&#xff0c;大量使用 ioctl 系统调用一、概述 CNet 是一个 纯静态方法的网络配置工具类&#xff0c;封装了 Linux 下常用的网络操作&#xff1a;功能类别涵盖内容IP 地址读取/设置本机 IP、子网掩码网关读取/添加/删除/设…...

长期使用Token Plan套餐在项目开发中的成本观察

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 长期使用Token Plan套餐在项目开发中的成本观察 在AI驱动的项目开发中&#xff0c;成本控制与预算管理是团队负责人必须面对的现实…...

Hindsight API参考:REST接口完整文档

Hindsight API参考&#xff1a;REST接口完整文档 【免费下载链接】hindsight Hindsight: Agent Memory That Learns 项目地址: https://gitcode.com/GitHub_Trending/hindsight2/hindsight Hindsight是一个强大的Agent Memory系统&#xff0c;提供了全面的REST API接口&…...

告别DLL缺失烦恼!Visual C++运行库合集一键搞定Windows应用依赖问题

告别DLL缺失烦恼&#xff01;Visual C运行库合集一键搞定Windows应用依赖问题 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经在打开某个软件或游戏时…...

3步快速解密中兴光猫配置:ZET工具终极实战指南

3步快速解密中兴光猫配置&#xff1a;ZET工具终极实战指南 【免费下载链接】ZET-Optical-Network-Terminal-Decoder 项目地址: https://gitcode.com/gh_mirrors/ze/ZET-Optical-Network-Terminal-Decoder 中兴光猫配置解密工具是每个网络管理员必备的神器&#xff01;Z…...

终极免费音乐解锁工具:5步轻松解密你的加密音乐文件

终极免费音乐解锁工具&#xff1a;5步轻松解密你的加密音乐文件 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库&#xff1a; 1. https://github.com/unlock-music/unlock-music &#xff1b;2. https://git.unlock-music.dev/um/web 项目地址: https:/…...