AI苏妲己
深度求索发布了DeepSeek-V2混合专家(MoE)语言模型,每百万tokens,2元人民币价格,简直便宜到令人发指(而且不是活动价格噢),可以说是继Groq以后,AI领域最惊艳的新闻了。那让我们来探究一下深度求索都做了哪些技术上的创新。
一、DeepSeek-V2基本情况
DeepSeek-V2依然是Transformer架构,包含2360亿个总参数,其中210亿个参数处于激活状态,支持128K的上下文长度。与其上一代模型DeepSeek 67B相比,DeepSeek-V2实现了显著更强的性能,同时节省了42.5%的训练成本,减少了93.3%的KV缓存,并将最大生成吞吐量提升至5.76倍。使用了8.1万亿个tokens的高质量、多源的语料库上进行预训练,通过收集150万个对话会话,涵盖了数学、代码、写作、推理、安全等多个领域,对DeepSeek-V2 Chat(SFT)进行监督微调(SFT)。采用组相对策略优化(GRPO)来进一步使模型与人类偏好对齐并产生DeepSeek-V2 Chat,即使只有210亿个激活参数,仍然在开源模型中达到了顶尖性能。
在《DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model》这篇论文中,深度求索提出了两个创新点,多头部潜在注意力(MLA)和DeepSeekMoE。传统的Transformer架构中的多头部注意力(MHA)的键值(KV)缓存对LLMs的推理效率构成了重大障碍,虽然有了分组查询注意力(GQA)和多查询注意力(MQA),但是这些方法在试图减少KV缓存时往往牺牲了性能。为此深度求索提出了多头部潜在注意力(MLA),利用低秩键值联合压缩方法,在推理过程中显著减少了KV缓存,从而提高了推理效率。架构方面,DeepSeekMoE架构采用细粒度的专家分割和共享专家隔离,以实现更高的专家专业化潜力,与传统的MoE架构如GShard相比,能够以经济的成本训练强大的模型。
为了讲清楚论文中的多头部潜在注意力,先说说注意力机制是什么,这可以说是Transformer架构的精髓所在。想象一下,你正在阅读一本书,并且想要理解一个复杂的句子,你可能需要关注句子中的不同部分,比如名词、动词和形容词,以便理解整个句子的意思。在Transformer模型中也是类似的处理过程,当用户输入一个问题时,Transformer模型会使用注意力机制来处理这个句子。
首先,模型会把整个句子拆分成单个的单词。然后对于每个单词,模型会给它贴上三种不同的标签:问题标签(Q)、关键词标签(K)和信息标签(V)。问题标签(Q)的作用是帮助模型找出"这个单词最相关的是哪些其他单词"。关键词标签(K)则代表着其他单词的"关键信息"。信息标签(V)里存储着单词本身的实际含义。
接下来模型会把所有单词分成几个小组。在每个小组里它会计算当前单词的问题标签(Q)与其他单词的关键词标签(K)有多么相似,这个相似度就代表了"这个单词与其他单词有多么相关"。根据这些相似度分数的高低。模型会对其他单词的信息标签(V)赋予不同的权重。将它们合并起来。作为对当前单词含义的理解。经过上述过程,模型就得到了对每个单词的理解,最后将所有单词的理解合并,形成对整个句子的全面理解和表示。
有了对整个句子的全面理解模型就可以开始生成回答了。在自回归生成中,模型会一次生成一个单词或标记(token),每次生成时都会参考之前生成的单词,就像是在写故事时每个新句子都要考虑前面的内容一样。这个过程会一直持续,直到生成完整的回答。在生成答案的过程中,每生成一个新单词,这个新单词不仅会与问题句子中的每个单词进行注意力计算,还会与之前生成的单词进行自注意力计算。这个过程可以帮助模型更好地理解已生成内容的上下文从而生成更连贯的答案。在注意力计算时,模型会使用之前在处理问题句子时生成的K和V向量,以及生成过程中每个新单词的K和V向量。这些向量在第一次计算后就会被缓存下来,称为KV缓存(Key-Value Cache)。KV缓存不仅存储了问题句子的信息,还会动态地存储生成过程中每个新单词的信息。当生成答案中的下一个新单词时,模型会直接使用缓存的K和V向量,而不需要重新计算。你可以把KV缓存想象成写故事时的记忆辅助工具,它帮助你记住之前写过的所有重要信息,让你能够更快地继续写作,而不需要回头去查找。
二、如何解决KV缓存制约推理的效率问题
传统的多头注意力(MHA)机制中,每个注意力头都有自己独立的键(K)和值(V)向量,这导致了在推理过程中需要大量的内存来存储这些KV缓存。随着序列长度的增加,KV缓存的大小呈线性增长,这对于长序列处理和资源受限的环境是一个显著的挑战。为了解决KV缓存大小的问题,有研究者提出了分组查询注意力(GQA)和多查询注意力(MQA)。这两种方法通过共享键和值向量来减少每个注意力头所需的独立计算和存储,从而减少了KV缓存的大小。然而,这种共享机制可能会降低模型的表达能力和信息多样性,因为每个注意力头不再能够独立地关注输入序列的不同方面。这可能导致模型在捕捉复杂模式和关系方面的能力下降。
(1)多头潜在注意力(Multi-head Latent Attention, MLA)
多头潜在注意力(Multi-head Latent Attention, MLA)的核心是通过对键(key)和值(value)进行低秩联合压缩,从而降低推理过程中需要缓存的键值对的数量。也就是说,在传统的多头注意力机制中,对于每一个输入的token,我们需要在每一层的attention中存储它的键(key)和值(value)向量,以便后续的token可以通过查询(query)这些键值对来计算注意力权重。这些键值向量的总元素数量等于2nhdh,其中nh是注意力头的数量,dh是每个头的维度。当模型的层数、头数和维度较大时,这个缓存的开销是非常大的。
而MLA通过一种叫做键值联合低秩压缩的技术,将原本需要单独存储的键向量和值向量压缩到了一个维度更低的向量cKVt中。这个压缩后的向量维度为dc,远小于原来的2nhdh。在推理时,我们只需要存储这个压缩后的cKVt向量,而不需要存储原始的键值向量。这样就大大减少了缓存的元素数量,从而显著提升了推理的效率。
但是,你可能会担心这种压缩会导致信息的丢失,从而影响注意力机制的性能。然而,实验结果表明,MLA不仅没有损失性能,反而比标准的多头注意力取得了更好的结果。这其中的奥秘在于,MLA的联合压缩方式能够更好地利用键和值之间的相关性。在传统的多头注意力中,,键和值是分别独立生成和存储的。但实际上它们都是从同一个输入token生成的,彼此之间存在一定的相关性。MLA通过将它们压缩到同一个向量中,强迫模型去学习和利用这种相关性。这种联合建模的方式使得压缩后的向量能更好地总结原始键值对的信息。因此,MLA在大幅降低缓存开销的同时,还能通过更好地挖掘键值相关性而获得性能的提升,可以说是一举两得。
再简单说,低秩键值联合压缩就像一套精简的读书笔记,提炼和书中的精华,还浓缩了很多倍的知识,这样阅读时能够快速找到需要的知识点,从而事半功倍。MLA通过一套"极简主义"的压缩方法,在提速的同时还能保证注意力机制的准确性。这种创新的压缩方式让MLA在推理效率和性能上,都实现了显著的提升。
(2)解耦旋转位置嵌入
RoPE是Rotary Position Embedding的缩写,是一种能够帮助模型学习位置信息的方法。它通过对模型中的键向量和查询向量施加旋转变换,使得它们对位置敏感。在自然语言处理任务中,我们常常需要让模型理解输入序列中每个词的位置信息。但是,MLA为了提高计算效率,会把键向量压缩到更低的维度。如果我们按照原来的方法,直接在压缩后的键向量上使用RoPE,就会导致一个问题:在模型推理的时候RoPE引入的位置信息会妨碍一些矩阵运算,导致我们必须重复计算一些中间结果,这会大大降低推理速度。
深度求索提出的解耦RoPE就是为了解决这个问题。它的思路很巧妙:与其直接把位置信息加到键向量和查询向量上,不如单独准备一些表示位置的向量,在需要的时候再把它们附加上去。这样一来,位置编码就和键值压缩解耦了,两者就不会互相影响。这种解耦的设计可以兼顾计算效率和位置信息的利用。模型可以先用压缩过的键向量进行计算,等到需要位置信息时再把预先准备好的位置向量附加上去。这样既节省了计算资源,又能让模型充分利用位置信息。
三、DeepSeekMoE架构
DeepSeekMoE架构是一种针对大规模深度学习模型的高效训练方法,特别是在处理自然语言处理(NLP)任务时。该架构旨在以经济的成本训练强大的模型,同时保持高性能。以下是DeepSeekMoE架构的关键特点和组件的总结:
1. 基本架构
(1)专家分割:DeepSeekMoE将专家(在模型中的特定子网络)分割成更细的粒度,以提高专家特化和更准确的知识获取。这种细粒度的分割允许模型更有效地学习和利用特定领域的知识。
(2)共享专家与路由专家:架构中同时包含共享专家和路由专家。共享专家用于减少路由专家之间的知识冗余,而路由专家则负责处理特定的任务或数据部分。这种设计有助于提高模型的整体效率和性能。
2. 设备限制的路由
设备并行:在采用专家并行时,路由专家分布在多个设备上。为了限制与MoE(混合专家)相关的通信成本,DeepSeekMoE引入了设备限制的路由机制,确保每个token的目标专家分布在最多m个设备上,从而减少通信频率和成本。
3. 辅助损失
负载平衡:为了解决自动学习的路由策略中的负载平衡问题,DeepSeekMoE设计了三种类型的辅助损失,分别用于控制专家级负载平衡、设备级负载平衡和通信平衡。这些损失有助于确保模型训练过程中的资源高效利用和通信效率。
4. Token丢弃策略
计算预算:为了进一步减轻由不平衡负载引起的计算浪费,DeepSeekMoE引入了设备级的token丢弃策略。在训练期间,根据每个设备的平均计算预算,丢弃亲和度分数最低的token,直到达到计算预算。这种方法有助于优化计算资源的分配。
四、深度求索的基础设施
众所周知,深度求索母公司幻方之前是做量化交易的,本身就开发了萤火超算平台,其在AI基础设施层上的工程经验很丰富。在这次论文中提到DeepSeek-V2模型的训练框架和优化策略,有以下一些关键点:
1.HAI-LLM框架:这是一个由研究团队内部工程师开发的高效轻量级训练框架,用于训练DeepSeek-V2模型。
2.16路零气泡流水线并行:这是一种并行策略,将模型的不同层分配到不同的设备上,形成一个流水线。"零气泡"意味着尽量减少设备之间的空闲等待时间,提高并行效率。
3.8路专家并行:这是一种将模型分成多个子模型(专家)的方法,每个专家负责处理不同的输入。这样可以提高模型的容量和多样性。
4.ZeRO-1数据并行:这是一种数据并行策略,将训练数据分割成多个部分,在不同的设备上同时处理,以加速训练过程。
5.减少通信开销:由于DeepSeek-V2的特点,它可以不必使用张量并行训练,从而减少了设备之间的通信开销。
6.计算与通信重叠:为了进一步提高训练效率,研究团队将共享专家的计算与专家并行的通信操作重叠,充分利用计算资源。
7.定制CUDA内核:研究团队为一些关键操作,如通信、路由算法和跨专家的融合线性计算,定制了更快的CUDA内核,以加速这些操作。
8.FlashAttention-2优化:MLA模型也基于改进版的FlashAttention-2进行了优化,这是一种高效的注意力机制实现。
9.NVIDIA H800 GPU集群:所有实验都在配备NVIDIA H800 GPU的集群上进行。每个节点包含8个GPU,通过NVLink和NVSwitch在节点内高速互连。节点之间则使用InfiniBand进行通信。
五、总结
DeepSeek-V2模型的推出,不仅在技术上实现了突破,而且在性能上也取得了显著的提升。通过广泛的内部评估框架和一系列基准测试,DeepSeek-V2在多项任务上展现出了卓越的表现,包括语言理解、推理、数学问题解决、代码生成等。特别是在处理长序列任务时,其128K的上下文长度支持为模型提供了前所未有的理解能力和生成连贯性的能力。
通过采用创新的多头部潜在注意力(MLA)和DeepSeekMoE架构,DeepSeek-V2在保持高性能的同时,大幅降低了训练和推理的成本。这一成就标志着深度求索在大型语言模型领域的又一重要里程碑,为未来的AI研究和应用开辟了新的可能性。