论文笔记 - ULTRA-SPARSE MEMORY NETWORK

embedded/2025/3/14 17:26:57/

1、目前Transformer模型现状

  • dense模型相同激活参数下,性能远低于MOE模型,因此大家倾向于训练MOE模型
  • 虽然同激活参数下,MOE性能比dense好,但MOE模型内存访问高,因此推理速度相比dense要慢不少。比如top2的moe,推理速度要慢2倍多。
    因此,本文提出Ultra-Mem架构,拟解决MOE模型内存访问成本高,推理速度慢的问题。

2、结论说在前面

  • 对比同参数、同激活参数的MOE
    Ultra-Mem的valid loss 更低,推理速度快了1.7 ~ 6倍不等
  • 对比4倍激活参数的dense 模型
    Ultra-Mem的valid loss 更低,推理速度仅慢一点。

3、怎么做的?

3.1 相关工作

介绍之前,先介绍几种常见的架构:

  • Dense模型:MLP采用致密的矩阵向量
  • MOE架构,MLP采用多个稀疏的矩阵向量,选择topn个专家进行推理
  • large memory layer,PKM(Lample et al. (2019) )
    mlp采用类似Attention q、k、v。每个头的qi从k中进行检索,基于检索的索引很分数从value中取值,公式如下:

PKM为了减少计算,k采用了分块的思想。qi每次检索可以获得2个分数,一个是kj块的分数,另一个是kj种每个key的分数,基于这2个分数相加得到一个二维逻辑查询表,从value中抽取出相应的向量进行加权求和。公式如下:


在这里插入图片描述

PKM存在问题:每个token在推理时仅仅激活极少的value,推理时不会遇到访存瓶颈,但效果较差,且scaling能力差

原因:
1、随着值的数量 N 显著增加,query更难找到正确的值:
当记忆表value的规模变得非常大时,查询向量在检索过程中会面临更高的难度,因为需要在庞大的候选集中找到最相关的值,这可能导致检索效率下降。
2、乘积键分解引入了检索拓扑的偏差:
例如,假设 (i,j) 是网格中得分最高的逻辑地址,那么得分第二高的值必须位于第 i 行或第 j 列。这种限制显著降低了 top-m 选择的多样性,因为检索结果被限制在特定的行或列中。
(因为qk分数是基于行和列的分数相加得到的)
3、大规模参数训练时存在多 GPU 计算和通信不平衡的问题:
在大规模训练中,由于模型参数过多,无法将整个模型放置在单个 GPU 上,这导致了计算和通信的不平衡。例如,当一个层的参数量超过单个 GPU 的容量时,传统的并行策略可能无法有效处理。

3.2 Ultra-Mem,改进版PKM
[图片]

小trick

  • 移除qk之后的softmax

  • qk进行nom

  • value常量学习率 -> 逐渐变小学习率

  • q proj之前增加一个对q的单向深度卷积
    大trick

  • PKM的部分采用share query

  • TDQKR: 针对PKM 原因2
    引入可学习参数C ∈ r x r。r表示Tucker 分解中的秩。并且C也可以是多个,即C∈hxrxr。这就是论文后面用到的MCS方法。论文的h采用的是2.

    但同时也带来了新问题:Srow X C X Scol的比较低效。因此,将C拆分为2个低秩矩阵:

为了确保u和t不会被训练为全1矩阵,因此加上了一个辅助loss:

其中λi表示u,t。
τ:常量,论文采用0.15
r:表示Tucker 分解中的秩,论文采用2,更到r如3和4效果不大
α:常量,论文采用0.001

  • value向量的维度减半,数量加倍,并将value分块。最后减半的维度加一个线性层转为model dim。针对PKM 原因1
    在这里插入图片描述

  • 针对PKM 原因3
    UltraMem 层被设计为替代或与 Transformer 中的 MLP 层并行运行
    1、UltraMem 层可以完全替代 Transformer 中的 MLP 层,尤其是在模型的深层部分。
    2、或者,UltraMem 层可以与 MLP 层并行运行,共享输入并合并输出。这种方式允许模型同时利用 MLP 的灵活性和 UltraMem 的高效性。
    在论文的实验中,作者采用了以下配置:

  • 对于较小的模型(如 151M 参数模型),UltraMem 层被插入到 Transformer 的特定层之间,例如在第 3 层插入,得到的输出添加到第3层的输出和第 5 层的输入里面。…

  • 对于较大的模型(如 680M 和 1.6B 参数模型),UltraMem 层被分布在多个 Transformer 层之间,以实现更高效的计算和更好的性能。

4、实验结果

  • 模型对比
    [图片]

  • Scaling、稀疏性对loss和推理速度的影响
    bc图横坐标表示稀疏参数和激活参数的比例
    20k、40k…表示value的大小
    越稀疏loss越高,推理速度越快
    [图片]

  • 消融实验

    • 效果提升最多的是half vdim + proj 和value lr decay
      [图片]

[图片]


http://www.ppmy.cn/embedded/172535.html

相关文章

在Pycharm配置conda虚拟环境的Python解释器

〇、前言 今天在配置python解释器时遇到了这样的问题 经过一下午自行摸索、上网搜寻后,终于找到的解决的方案,遂将该方法简要的记录下来,以备后用,并希望能帮助到有同样问题或需求的朋友:) 我所使用的软件的版本如下,假…

【AIGC】计算机视觉-YOLO系列家族

YOLO系列家族 (1)YOLO发展史(2) YOLOX(3) YOLOv6(4) YOLOv7(5) YOLOv8(6) YOLOv9(7)YOLOv10(8&…

虚拟机下ubuntu进不了图形界面

6.844618] piix4_smbus 0000:07.3: SMBus Host ContrFoller not enabled! 7.859836] sd 2:0:0:0:0: [sda] Assuming drive cache: wirite through /dev/sda1: clean, 200424/1966080 files, 4053235/7864064 blocks ubuntu启动时,卡在上面输出位置 当前遇到的原因…

QT系列教程(13) 事件系统

事件系统 Qt事件系统是非常重要事件传递机制,所有消息传递流程都离不开这个机制,这里主要从重写类的事件响应函数,事件过滤器以及重写event函数三种方式做介绍。 重写事件函数 这种方式最为直接,我们先创建项目,选择QApplicati…

使用RabbitMQ实现流量削峰填谷

原理 流量削峰填谷是指在面对突发的高流量时,通过消息队列将瞬时大量请求暂时存储起来,并逐步处理这些请求,从而避免系统过载。RabbitMQ 作为消息中间件可以很好地支持这一需求,特别是结合其延时消息插件(rabbitmq_de…

C++程序设计语言笔记——基本功能:源文件与程序

0 用头文件表达接口、强调逻辑结构。 我们以 C 语言为例,展示如何通过头文件组织模块化设计: 示例场景:日志模块接口设计 文件结构 include/log.h // 公共接口log_config.h // 配置参数log_internal.h // 内部实现细节&#xf…

什么是大模型微调?

在大模型(如GPT、BERT、LLaMA等)广泛应用的今天,“微调”(Fine-Tuning)已成为释放模型潜力的关键技术。它通过针对特定任务调整预训练模型,使其从“通才”变为“专才”。本文将从概念、原理到实践&#xff…

C语言 进阶指针学习笔记

文章目录 字符指针指针数组数组指针数组名数组传参 函数指针函数指针数组指向函数指针数组的指针 回调函数Qsort 的使用通过冒泡排序模拟实现 qsort 大部分的内容都写在代码注释中 指针有类型,指针的类型决定了指针的整数的步长,指针解引用操作的时候的权…