0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

650亿参数,8块GPU就能全参数微调!邱锡鹏团队把大模型门槛打下来了!

CVer 来源:机器之心 2023-06-21 14:00 次阅读

全参数微调的显存使用量和推理一样多,大模型不再只是大型科技公司的玩具了。

在大模型方向上,科技巨头在训更大的模型,学界则在想办法搞优化。最近,优化算力的方法又上升到了新的高度。

大型语言模型(LLM)彻底改变了自然语言处理(NLP)领域,展示了涌现、顿悟等非凡能力。然而,若想构建出具备一定通用能力的模型,就需要数十亿参数,这大幅提高了 NLP 研究的门槛。在 LLM 模型调优过程中通常又需要昂贵的 GPU 资源,例如 8×80GB 的 GPU 设备,这使得小型实验室和公司很难参与这一领域的研究。

最近,人们正在研究参数高效的微调技术(PEFT),例如 LoRA 和 Prefix-tuning,为利用有限资源对 LLM 进行调优提供了解决方案。然而,这些方法并没有为全参数微调提供实用的解决方案,而全参数微调已被公认为是比参数高效微调更强大的方法。

在上周复旦大学邱锡鹏团队提交的论文《Full Parameter Fine-tuning for Large Language Models with Limited Resources》中,研究人员提出了一种新的优化器 LOw-Memory Optimization(LOMO)。

通过将 LOMO 与现有的内存节省技术集成,与标准方法(DeepSpeed 解决方案)相比,新方法将内存使用量减少到了之前的 10.8%。因此,新方法能够在一台具有 8×RTX 3090 的机器上对 65B 模型进行全参数微调,每个 RTX 3090 具有 24GB 内存。

d4d050e6-0ff1-11ee-962d-dac502259ad0.jpg

论文链接:https://arxiv.org/abs/2306.09782

在该工作中,作者分析了 LLM 中内存使用的四个方面:激活、优化器状态、梯度张量和参数,并对训练过程进行了三方面的优化:

算法的角度重新思考了优化器的功能,发现 SGD 在微调 LLM 完整参数方面是一种很好的替代品。这使得作者可以删除优化器状态的整个部分,因为 SGD 不存储任何中间状态。

新提出的优化器 LOMO 将梯度张量的内存使用量减少到 O (1),相当于最大梯度张量的内存使用量。

为了使用 LOMO 稳定混合精度训练,作者集成了梯度归一化、损失缩放,并在训练期间将某些计算转换为全精度。

新技术让内存的使用等于参数使用加上激活和最大梯度张量。全参数微调的内存使用被推向了极致,其仅等同于推理的使用。这是因为 forward+backward 过程的内存占用应该不会比单独的 forward 过程少。值得注意的是,在使用 LOMO 节省内存时,新方法确保了微调过程不受影响,因为参数更新过程仍然等同于 SGD。

该研究评估了 LOMO 的内存和吞吐量性能,表明借助 LOMO,研究者在 8 个 RTX 3090 GPU 上就可以训练 65B 参数的模型。此外,为了验证 LOMO 在下游任务上的性能,他们应用 LOMO 来调优 SuperGLUE 数据集集合上 LLM 的全部参数。结果表明了 LOMO 对具有数十亿参数的 LLM 进行优化的有效性。

方法介绍

在方法部分,本文详细介绍了 LOMO(LOW-MEMORY OPTIMIZATION)。一般而言,梯度张量表示一个参数张量的梯度,其大小与参数相同,这样一来内存开销较大。而现有的深度学习框架如 PyTorch 会为所有参数存储梯度张量。现阶段,存储梯度张量有两方面原因:计算优化器状态以及归一化梯度。

由于该研究采用 SGD 作为优化器,因此没有依赖于梯度的优化器状态,并且他们有一些梯度归一化的替代方案。

他们提出了 LOMO,如算法 1 所示,LOMO 将梯度计算与参数更新融合在一个步骤中,从而避免了梯度张量的存储。

下图为 SGD 和 LOMO 在反向传播和参数更新阶段的比较。Pi 为模型参数,Gi 为 Pi 对应的梯度。LOMO 将梯度计算和参数更新融合到一个步骤中,使梯度张量最小。

d4f56eda-0ff1-11ee-962d-dac502259ad0.png

LOMO 对应的算法伪代码:

d571db50-0ff1-11ee-962d-dac502259ad0.png

具体而言,该研究将 vanilla 梯度下降表示为

d598b068-0ff1-11ee-962d-dac502259ad0.png

,这是一个两步过程,首先是计算梯度,然后更新参数。融合版本为

d5a1c482-0ff1-11ee-962d-dac502259ad0.png

。 该研究的关键思想是在计算梯度时立即更新参数,这样就不会在内存中存储梯度张量。这一步可以通过在向反向传播中注入 hook 函数来实现。PyTorch 提供了注入 hook 函数的相关 API,但却无法用当前的 API 实现精确的即时更新。相反,该研究在内存中最多存储一个参数的梯度,并随着反向传播逐一更新每个参数。本文方法减少了梯度的内存使用,从存储所有参数的梯度到只存储一个参数的梯度。

大部分 LOMO 内存使用与参数高效微调方法的内存使用一致,这表明 LOMO 与这些方法相结合只会导致梯度占用内存的轻微增加。这样就可以为 PEFT 方法调优更多的参数。

实验结果

在实验部分,研究者从三个方面评估了他们提出的方法,即内存使用情况、吞吐量和下游性能。如果不作进一步解释,所有的实验都是用 7B 到 65B 的 LLaMA 模型进行的。

内存使用情况

研究者首先剖析了,在不同设置下,训练期间的模型状态和激活的内存使用情况。如表 1 所示,与 AdamW 优化器相比,LOMO 优化器的使用导致内存占用大幅减少,从 102.20GB 减少到 14.58GB;与 SGD 相比,在训练 LLaMA-7B 模型时,内存占用从 51.99GB 减少到 14.58GB。内存用量的大幅减少主要归因于梯度和优化器状态的内存需求减少。因此,在训练过程中,内存大部分被参数占据,与推理过程中的内存用量相当。

d5bb8ac0-0ff1-11ee-962d-dac502259ad0.png

如图 2 所示,如果采用 AdamW 优化器进行 LLaMA-7B 训练,相当大比例的内存(73.7%)被分配给优化器状态。用 SGD 优化器替换 AdamW 优化器可以有效减少优化器状态占用内存的百分比,从而减轻 GPU 内存使用(从 102.20GB 减少到 51.99GB)。如果使用 LOMO,参数更新和 backward 会被融合到一个步骤中,进一步消除优化器状态对内存的需求。

d5e05454-0ff1-11ee-962d-dac502259ad0.png

吞吐量

研究者比较了 LOMO、AdamW 和 SGD 的吞吐性能。实验是在一台配备了 8 个 RTX 3090 GPU 的服务器上进行的。

对于 7B 的模型,LOMO 的吞吐量呈现显著优势,超过 AdamW 和 SGD 约 11 倍。这一重大改进可归功于 LOMO 在单个 GPU 上训练 7B 模型的能力,这减少了 GPU 间的通信开销。与 AdamW 相比,SGD 的吞吐量略高,这可归因于 SGD 排除了动量和方差的计算。

至于 13B 模型,由于内存的限制,它无法在现有的 8 个 RTX 3090 GPU 上用 AdamW 训练。在这种情况下,模型的并行性对 LOMO 来说是必要的,LOMO 在吞吐量方面仍然优于 SGD。这一优势归功于 LOMO 的内存高效特性,以及只需要两个 GPU 以相同的设置来训练模型,从而降低了通信成本,提高了吞吐量。此外,在训练 30B 模型时,SGD 在 8 个 RTX 3090 GPU 上遇到了内存不足(OOM)的问题,而 LOMO 在只有 4 个 GPU 的情况下表现良好。

最后,研究者使用 8 个 RTX 3090 GPU 成功训练了 65B 模型,实现了 4.93 TGS 的吞吐量。利用这样的服务器配置和 LOMO,模型在 1000 个样本上的训练过程(每个样本包含 512 个 token)大约需要 3.6 小时。

下游性能

为了评估 LOMO 在微调大型语言模型方面的有效性,研究者进行了一系列广泛的实验。他们将 LOMO 与其他两种方法进行比较,一种是不需要微调的 Zero-shot,另一种是目前很流行的参数高效微调技术 LoRA。

d5ea4626-0ff1-11ee-962d-dac502259ad0.png

表 3 结果显示:

LOMO 的表现明显好于 Zero-shot;

在大多数实验中,LOMO 普遍优于 LoRA;

LOMO 可以有效扩展至 650 亿参数的模型。

LOMO 和 LoRA 在本质上是相互独立的。为了验证这一说法,研究者使用 LLaMA-13B 在 BoolQ 和 MultiRC 数据集上进行了实验。结果如图 3 所示。

他们发现,LOMO 在持续增强 LoRA 的性能,不管 LoRA 取得的结果有多高。这表明,LOMO 和 LoRA 采用的不同微调方法是互补的。具体来说,LOMO 专注于微调预训练模型的权重,而 LoRA 则调整其他模块。因此,LOMO 不会影响到 LoRA 的性能;相反,它有助于对下游任务进行更好的模型调优。

d623accc-0ff1-11ee-962d-dac502259ad0.png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • gpu
    gpu
    +关注

    关注

    27

    文章

    4426

    浏览量

    126754
  • 参数
    +关注

    关注

    11

    文章

    1398

    浏览量

    31482
  • 模型
    +关注

    关注

    1

    文章

    2709

    浏览量

    47716

原文标题:650亿参数,8块GPU就能全参数微调!邱锡鹏团队把大模型门槛打下来了!

文章出处:【微信号:CVer,微信公众号:CVer】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    请教:如何建立pspice模型参数

    请教:如何建立元器件模型参数
    发表于 03-16 16:43

    轿车参数化分析模型的构造研究及应用

    (8)§2.2.1 轿车车身概念设计阶段简述 (8)§2.2.2 概念设计阶段建立参数化简化模型的必要性 (10)§2.3 简化模型
    发表于 04-16 13:40

    LogP简化模型参数估计

    LogP简化模型参数估计针对LogP微观通信模型涉及参数较多,其算法分析较复杂;而简化的LogP模型
    发表于 06-17 09:52

    元件模型各项参数讲解

    本帖最后由 azsxdcfv1871514 于 2013-1-6 14:53 编辑 大家都知道学习EDA软件 首先要了解元器件的各项参数,要理解各项参数的含义现在我现有的元件的各项参数
    发表于 01-06 08:49

    能测各种焊锡的度数(含量)

    ,倒出个小块出来,最好倒成瓜子形状,也不要太长了,方便下面的操作!搞好后,在的尖出两边,用剪刀各弄个小口,方便下面的操作。用小称先称
    发表于 04-28 19:36

    元件的中文模型参数

    请教:有人用中文版的Multisim13 导出了2N3773这个元件的中文参数图,不知是在哪个路径下面导出来的。我只能在元件模型编辑界面上看到英文Spice参数没有这个清楚。
    发表于 03-01 21:32

    ARM用以解决图像超分模型参数问题

    本文提出一种Any-time super-Resolution Method(ARM)用以解决图像超分模型参数问题,其出发点在于如下三个观察:不同图像的性能会超分模型的大小而变化;
    发表于 06-10 17:52

    Mali GPU支持tensorflow或者caffe等深度学习模型

    Mali GPU 支持tensorflow或者caffe等深度学习模型吗? 好像caffe2go和tensorflow lit可以部署到ARM,但不知道是否支持在GPU运行?我希望
    发表于 09-16 14:13

    GPU上OpenVINO基准测试的推断模型的默认参数与CPU上的参数不同是为什么?

    在 CPU 和 GPU 上推断出具有 OpenVINO™ 基准的相同模型: benchmark_app.exe -m model.xml -d CPU benchmark_app.exe -m
    发表于 08-15 06:43

    消费者不着急出手?都在等苹果加大供货加个被“打下来

    越来越多经销商表示,随着iPhone 12 Pro供货的加强,这款手机的加价也不如以前,最多也即是加个几百块,而目前不少消费者也都不着急出手,大家也都在等苹果加大供货,等着加个被“打下来”。
    的头像 发表于 10-29 11:04 937次阅读

    一个GPU训练一个130亿参数模型

    现在的模型动辄数百、数千亿参数,普通人训不动怎么办? 前不久,谷歌发布了参数量为 1.6 万亿的语言模型Swith Transformer,将 GPT-3 创下的
    的头像 发表于 02-11 09:04 2222次阅读
    一个<b class='flag-5'>GPU</b>训练一个130亿<b class='flag-5'>参数</b>的<b class='flag-5'>模型</b>

    HMC650 S参数

    HMC650 S参数
    发表于 03-23 17:42 0次下载
    HMC<b class='flag-5'>650</b> S<b class='flag-5'>参数</b>

    iPhone都能微调模型了嘛

    原驼 650亿参数版只需要48GB显存单卡微调24小时,330亿参数版只需要24GB显存单卡微调12小时 。 24GB显存,也就
    的头像 发表于 06-02 15:26 462次阅读
    iPhone都能<b class='flag-5'>微调</b>大<b class='flag-5'>模型</b>了嘛

    单张消费级显卡微调多模态大模型

    把大模型的训练门槛打下来!我们在单张消费级显卡上实现了多模态大模型(LaVIN-7B, LaVIN-13B)的适配和训练
    的头像 发表于 06-30 10:43 1375次阅读
    单张消费级显卡<b class='flag-5'>微调</b>多模态大<b class='flag-5'>模型</b>

    四种微调模型的方法介绍

    微调(Full Fine-tuning):全微调是指对整个预训练模型进行微调,包括所有的模型参数
    发表于 01-03 10:57 5984次阅读
    四种<b class='flag-5'>微调</b>大<b class='flag-5'>模型</b>的方法介绍