更新网站 seo,asp网站建设 文献,如何给网站弄ftp,小程序商场1. 基础架构#xff1a;MLA#xff0c;大幅减少了KV cache大小。#xff08;计算量能不能减少#xff1f;#xff09; 2. 基础架构#xff1a;MoE#xff0c;同等参数量#xff08;模型的”能力“#xff09;下#xff0c;训练、推理的计算量大幅减少。 3. MoE的load…
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发送第N1个token。 用于通信的SM20个就够了一张GPU卡上一般有100多个SM)。 用于通信的warp数目动态可调的。用PTX指令精细制作减少L2-cache使用和对其他SM的干扰。 7. 显存优化 激活缓存对计算量小的操作例如RMSNorm)只保存inputoutput在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 headMoE gatingnormalization操作attention操作。 为维持数值稳定性以下仍保持高精度主Wegiht梯度Optmizer状态(Adam的2个参数。可用Zero来减少显存占用。 细粒度量化激活的量化单元设为1*128权重的量化单元设为128*128。和整个矩阵做量化单元相比好处减少量化误差。 如上图分片矩阵的FP8乘法之后结果再乘以各自的scale2个加和到结果矩阵里。 这个叫做microscalingNVIDIA下一代GPU架构官宣会支持。 提升累加的精度发现H800的FP8乘加会累加到14位数上面精度不够易造成误差特别是累加的数多的时候。 解决在Tensor Core上每累加一定次数后就将中间累加结果传输至CUDA core上和FP32进行累加。 指数和尾数 老方法一般是用E4M3做前向传播用E5M2做反向传播。这里得益于细粒度的分片量化减少了分片内的数值范围因此全部使用E4M3。 在线量化 老方法一般是calibration时统计激活值范围确定好量化scale实际推理时复用该scale类似“静态量化”的概念。这里为了保持精度不预先统计随用随统计类似“动态量化”的概念。权重因为会边训练边更新所以训练时Weight也是随用随统计scale。 9. 低精度存储和通信 Adam Optimizer的和用的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-AllattentionMoE计算重叠起来。 显存换通信每个GPU上多放一倍的Expert。token路由时可以找更好的发送方案。 Decoding: 40台*8卡320卡。 attention层TP4SP外层套80路DP。 MoE层EP320每张卡上就放1个Expert。256个常规Expert64个shared/冗余Expert。 MoE的all-to-all使用IB的point-to-point通信降低了延迟。IBGDA技术。 MoE的副本冗余Expert: 也会在线上根据监控负载来动态调整。把流量少的下掉上线流量多的。 计算通信overlap: attention的耗时更大。因此仍然采用2个小batch并行只是改为attention计算all-to-allMoE计算重叠起来。SM分配后者计算量更小因此后者的SM少分些前者的SM多分些。