欢迎大家~这里是量子茶馆儿,一个致力于将业内优雅的技术设计艺术沉淀为画册的频道。
我们会在这里邀请国内外前沿技术圈的优质嘉宾,为大家观察市场/讲解paper/拆解产品/指南避坑,希望大家能在这个频道感受到我们对优质技术内容的分享诚意。🧡
以下是本茶馆儿第一期内容:deepseek算法串讲(上)· 模型架构浅析
【📝 嘉宾】
赵博士毕业于清华大学自动化系cfins(智能与网络化系统研究中心),是国内最早做强化学习与神经网络结合的博士实验室,和MIT,Stanford、以及强化学习之父sutton,都有持续的深度的密切合作。目前在国内一线大模型公司进行大语言模型的训练以及优化的算法工作,有非常成熟的学术背景以及工业应用经验。
【📝 Catalog】
[粗讲] · 大模型分层架构简介
[粗讲] · 硬件:
- V3 - 2048块H800 GPU
[粗讲] · 硬件加速:
- 3FS(day5): 分布式文件系统,针对模型训练和推理的大数据吞吐/并发优化,解决训练常见的IO瓶颈
- DeepGEMM(day4): FP8下的底层矩阵优化,最底层计算加速
- FlashMLA(day1): MLA的加速库,GPU内核层面,也能使A100/V100老GPU达到H100性能
[粗讲] · 训练框架&推理框架:
HAI-LLM deepseek 自研
- DeepEP(day2): 优化MoE模型多专家通信
- DualPipe & Expert-Parallel Load Balancer:DualPipe:双向调度,减少GPU空闲;EPLB: MoE下:平衡各个expert的GPU负载,减少通信
- cross-node all-to-all 通信内核(尚未开源,ptx编写)
(-- 是以上基建侧的细化投入,换来了下面在模型侧高效做更多探索的从容 -- )
[精讲] · 模型结构:
- 常见名词简介
- 1.1 什么是语言模型:预测一句话在当前时刻的下一个字是哪个字的模型。
- 1.2 什么是transformer:对一个语言序列做的数据映射变形,输入是一句语言序列token,输出是转换之后的数学表征,中间的变形过程就是transformer,初期可以将其理解为selfattention+FFN的组合。
- 1.3 什么是self-attention:计算一句话中某个词与上下文之间的相似度。
- 1.4什么是 FFN:将sa后的内容在全连接层做一次变换,变成隐空间的表征。
- 1.5 什么是MOE:mixture of expert,原有含义是在业务系统里对多模型做一次路由,每次预测是路由到某一个模型上进行inference,而大模型的MOE的区别在于是token粒度的moe,优势在于每一次token预测并不需要激活全局网络,只需要激活某一/几个专家网络,参数量远低于全局参数量,进而使得推理性能能到优化。
- 模型结构的创新:
- 2.1 MLA(从self-attention到multihead self-attention再到multhead latent selfattention,递进式的深水区运用)
- 2.1.1「水深10m」self-attention:数据建模上下文理解的方式,既一句话的每个单词与这句话的其他单词的计算一下相关性,既数据建模QKV。假设一句话N个单词,每个单词有D个向量表征,那么输入序列=N*D。每个单词都变换成三个矩阵空间,分别是Query/KEY/Value,每个单词都会拿自己的QKV矩阵去问其他单词跟谁最像,这个判断是不是最像的数据方法就是用提问单词的query与被提问单词的key做点乘计算,结果越大越像,越小越不像。这样每个单词都会通过归一化拿到一个与其他单词的相似度的数学衡量。训练时越像就取value(语义)多一点,反之少一点。在知道了像与不像之后,会希望对每个value再补充一些“带上像与不像的关系”的数学表征,也就是最后对每一个单词的语义(value)通过其他N-1个单词的语义(value)做加权的求和作为一个新的表征,权重就是与N-1的各词的QK点乘结果。
- 2.1.2「水深100m」multihead self-attention:区别于2.1.1,这里的一句话的一个单词要与其他N-1个单词计算多组QKV,原因类比视频标签索引,在检索视频时如果把tag分为视频风格、视频年代、视频题材等维度让搜索质量更好更准,这就是多个子空间的Query/Key/Value的作用。
- 2.1.3「水深1000m」multihead latent self-attention:区别于2.1.2,在多个子空间得到Q/K之后,对其矩阵结果做一次压缩。假设一个单词是1024个维度,计算QK分别是512个维度,权重矩阵就是512*1024,query和key的点乘是512*512,这个维度还是有优化空间的,通过把512*512加入一个MLP全连接网络压缩成128维,这样计算量降低到128*128,存储空间也得到优化,这里的128压缩结果空间就叫latentspace。同时除了计算效率优化,还有效果上的考量。比如人类理解图像,1080p的图像每一个像素点都是有丰富的rgb信息的,但是某个像素产生波动时其实对人类的图像理解是毫无影响的,所以这里的信息是冗余的,为了去掉这些从语义理解的冗余信息,也是隐空间的另一个关键假设。
- 2.2 MTP,Multi token prediction。区别于gpt系列的模型应用next token prediction,用一句话的前五个字预测第六个字是什么。而改进点在于用前五个字预测下面五个字而不是下面一个字。
- 2.3 load balancer:为了避免损失函数可能会造成的某单一expert过忙而其他expert没有效率最大化,或某单一expert过忙导致单一expert的学习能力成为了模型全局能力的上限的效果问题规避这两类问题,引入了load-balancing的设计。
2.3.1. 不使用损失函数的load-balancing设计:在moe的路由阶段引入超参,例当某专家的负载大就把超参调小,反之调大,那么就可以通过反馈机制进行全局均衡的实施。
补充说明:用损失函数可以类比为老板每天打烊后看账单,发现A厨师累死、B厨师闲死,于是在工资单扣钱惩罚,老板检查并扣钱的这一系列行为就是损失函数的作用。而新方法的逻辑类比为,智能监控:大堂经理实时看监控(动态跟踪每个专家的负载)+ 即时调度:新客人进门时,直接把订单塞给最闲的厨师(路由算法动态分配)+ 预防过载:给忙碌的厨师自动挂「暂停接单」牌(硬性约束最大负载),这样做的好处就是a.避免「事后惩罚」的延迟反应(损失函数要等反向传播才生效)b.防止损失函数互相打架(主任务loss和均衡loss产生冲突)c.像滴滴派单系统一样实时最优分配,进而优化计算开销(不需要计算后再反向检查的二次计算、通过最大化并行提高利用率、通过不攒够一定数量再分类而是单一分配的方式降低内存占用)。
- 2.3.2. batch level 到 sequence level:语言模型里的batch是一系列的话,batchlevel是指多样本之间使用专家更均衡,例如batchsize=256,就意味着256句话的每一句都均衡的分发给各个专家进行学习,这样的问题是在某句话内的内容分发给各个专家是不均衡的,所以就有了更细粒度的优化,每句话里的各个token分发给各专家时也做了一次balance。
【📝 下期预告】
deepseek的训练设计,pretrain/posttrain/ahamoment!!!
欢迎订阅 💌 ,我们下期不见不散!!!
