分类: AI

  • DeepSeek-V2中的MLA详解

    DeepSeek-V2是DeepSeek团队最新发布的MoE(Mixture of Experts)架构的LLM(大型语言模型)底座。该模型拥有236B的总参数量和21B的每个token激活参数量,支持128K tokens的上下文长度。DeepSeek-V2的一个核心创新点就是Multi-head Latent Attention(MLA)。

    Multi-head Latent Attention(MLA)简介

    MLA对传统Transformer中的多头注意力机制(MHA)进行了改进,主要目标是:

    1. 降低推理时KV Cache的存储开销;
    2. 缓解GQA(Grouped-Query Attention)和MQA(Multi-Query Attention)等方法导致的模型性能损耗。

    标准的MHA结构

    在标准的MHA结构中,每个token的query、key和value通过参数矩阵映射得到,并分割成多个注意力头。每个头独立计算注意力权重并得到输出,这个过程虽然能捕捉丰富的上下文信息,但在推理时需要缓存大量的KV Cache。

    MLA如何改进?

    MLA通过对keys和values进行低秩联合压缩来降低KV Cache:

    1. 低秩Key-Value联合压缩
      [
      \mathbf{c}_t^{KV} = W^{DKV} \mathbf{h}_t
      ]
      [
      \mathbf{k}_t^C = W^{UK} \mathbf{c}_t^{KV}
      ]
      [
      \mathbf{v}_t^C = W^{UV} \mathbf{c}_t^{KV}
      ]
      其中,(\mathbf{c}_t^{KV})表示压缩后的隐向量,(W^{DKV})是降维映射矩阵,(W^{UK})和(W^{UV})是升维映射矩阵。在推理时,只需要缓存隐向量(\mathbf{c}_t^{KV}),显著减少了KV Cache的容量。
    2. Queries的低秩压缩
      [
      \mathbf{c}_t^Q = W^{DQ} \mathbf{h}_t
      ]
      [
      \mathbf{q}_t^C = W^{UQ} \mathbf{c}_t^Q
      ]
      这样即便不能减少KV Cache,但可以降低训练过程中的激活内存。

    代码实现

    以下是MLA在DeepSeek-V2中的Python代码实现片段:


    class DeepSeekV2Attention(nn.Module):
    def init(self, config: DeepSeekV2Config, layer_idx: Optional[int] = None):

    self.w_dq = nn.Linear(self.hidden_size, config.q_lora_rank, bias=config.attention_bias)
    self.w_uq = nn.Linear(config.q_lora_rank, self.num_heads * self.q_head_dim, bias=False)
    self.w_dkv = nn.Linear(self.hidden_size, self.dc, bias=config.attention_bias)
    self.w_uk = nn.Linear(self.dc, self.num_heads * self.q_head_dim, bias=False)
    self.w_uv = nn.Linear(self.dc, self.num_heads * self.q_head_dim, bias=False)

    def forward(self, hidden_states: torch.Tensor, attention_mask: Optional[torch.Tensor] = None, 
                position_ids: Optional[torch.LongTensor] = None, past_key_value: Optional[Cache] = None, 
                output_attentions: bool = False, use_cache: bool = False, **kwargs):
        bsz, q_len, _ = hidden_states.size()
    
        q = self.w_uq(self.q_a_layernorm(self.w_dq(hidden_states))).view(bsz, q_len, self.num_heads, self.q_head_dim).transpose(1, 2)
        kv_seq_len = q.size(-2)
        if past_key_value is not None:
            kv_seq_len += past_key_value.get_usable_length(kv_seq_len, self.layer_idx)
    
        compressed_kv = self.w_dkv(hidden_states)
        if past_key_value is not None:
            compressed_kv = past_key_value.update(compressed_kv)
    
        k = self.w_uk(compressed_kv).view(bsz, -1, self.num_heads, self.q_head_dim).transpose(1, 2)
            v = self.w_uv(compressed_kv).view(bsz, -1, self.num_heads, self.q_head_dim).transpose(1, 2)
    
            attn_weights = torch.matmul(q, k.transpose(2, 3)) * self.softmax_scale
            attn_weights = nn.functional.softmax(attn_weights, dim=-1)
    
            if output_attentions:
                outputs = (attn_weights,)
            else:
                outputs = ()
    
            attn_output = torch.matmul(attn_weights, v)
            attn_output = attn_output.transpose(1, 2).contiguous().view(bsz, q_len, self.hidden_size)
    
            attn_output = self.out_proj(attn_output)
            outputs = (attn_output,) + outputs
    
            if use_cache:
                outputs = outputs + (past_key_value,)
    
            return outputs
    ```
    
    

    结论
    DeepSeek-V2通过引入Multi-head Latent Attention(MLA)结构,成功优化了传统的多头注意力机制(MHA),在保证模型性能的同时,显著降低了推理时KV Cache的存储开销。这不仅提高了模型的效率,也为未来的大模型架构设计提供了新的思路。

    MLA的实现通过对queries、keys和values进行低秩压缩,减少了存储需求,缓解了因GQA和MQA方法导致的性能损耗。这种创新在深度学习模型的设计中具有重要的参考价值。

    如果你对于DeepSeek-V2的MLA结构有更多的兴趣,建议查看其开源代码和详细文档,以便深入理解其工作机制和实现细节。

  • GPT-4o背后的神仙团队

    在OpenAI最近的一场20多分钟的发布会中,GPT-4o正式亮相。然而,这一新发布的模型并未获得所有专家的一致认可。尽管GPT-4o原生支持多模态,但一些业内大佬对其进步似乎并不买账。

    GPT-4o:小升级还是重大突破?

    在OpenAI联合创始人、现已离开的传奇大神AK看来,GPT-4o仅仅是一个文本、音频和视觉组合的模型,可以在一个神经网络中处理所有三种模态,甚至可以在特殊情况下进行实时语音翻译。马老板也认为,这种对GPT-4o的描述更加准确,隐隐透露出一丝酸意。

    然而,当OpenAI CEO Sam Altman转发了开发GPT-4o背后的团队故事后,外界才真正了解到,要实现原生多模态能力,需要一个怎样的神仙团队。

    18人内核团队:开创人机交互新历史

    马斯克曾在采访中表示,OpenAI推出ChatGPT的最大意义在于,创造了一个人机交互的界面,让普通人能用文本与AI交流。而GPT-4o则希望在人机交互的媒介上进一步拓展,除了文本,还包括音频和视觉等。

    要实现这一目标,OpenAI的Omni Team共由18人组成,其中4名华人,几乎都是90后。团队领导Prafulla Dhariwal本科学历的背景也显得尤为特别,他在本科毕业后直接加入OpenAI,参与过强化学习、无监督学习以及Scaling Law等前沿研究,还参与了DALL-E 2、GPT-3、DALL-E 3等关键项目。

    核心成员:多领域天才齐聚

    1. James Betker:负责图像、音频、数据和后期训练等方面,被评价为任何任务都能搞定的多面手。曾在Garmin和谷歌工作过,适应能力和职业道德备受认可。
    2. Rowan Zellers:视频方面的负责人,让模型能够像人类一样观看视频。他博士毕业后直接加入OpenAI,参与了多个关键项目,包括GPT-4。
    3. Alexis Conneau:音频方向的负责人,第一个提出将电影《Her》中Samantha角色复刻到现实中的人。他在谷歌和Meta AI工作过,参与过影响10亿用户的项目,论文曾获EMNLP最佳论文奖。

    华人科学家的贡献

    OpenAI的重要项目中从不缺乏华人的身影,GPT-4o的研发也不例外:

    • Li Jing:北大物理系毕业,MIT博士,曾参与DALL-E和Sora项目。
    • Jiahui Yu:中科大本科,UIUC博士,现为OpenAI感知团队的负责人,曾是谷歌Gemini多模态的负责人。
    • Yu Zhang:上海交大本科,MIT博士,曾在谷歌DeepMind工作。
    • Huiwen Chang:清华大学本科,普林斯顿大学博士,加入OpenAI前在谷歌担任研究科学家。
    • Qiming Yuan:清华大学本科,德州大学奥斯丁分校硕士,负责语言的预训练数据处理,曾在Dropbox和微软工作。

    未来展望

    GPT-4o的推出,不仅展示了OpenAI团队的非凡实力,也揭示了未来人机交互的更多可能性。虽然目前的评价存在争议,但不可否认的是,GPT-4o在多模态处理上的突破,将为人类与AI的交流带来更多新方式和新体验。

    总的来说,这18人的神仙团队,正通过他们的聪明才智和不懈努力,开创人机交互的新历史,将AI的可能性推向新的高度。

    GPT-4o背后的神仙团队:项目负责人为本科学历,北大/清华/交大/中科大校友在列
    dig.chouti.com/link/42443601

人生梦想 - 关注前沿的计算机技术 acejoy.com 🐾 步子哥の博客 🐾 背多分论坛 🐾 借一步网 沪ICP备2024052574号-1