Meta提出全新参数高效微调方案,仅需一个RNN,Transformer模型GPU使用量减少84%!

news2025/1/11 17:47:35

近来,随着ChatGPT和GPT-4模型的不断发展,国内外互联网大厂纷纷推出了自家的大语言模型,例如谷歌的PaLM系列,MetaAI的LLaMA系列,还有国内公司和高校推出的一些大模型,例如百度的文心一言,清华的ChatGLM等模型。几乎隔几天就会有一个全新的大模型发布,但是对于研究者和开发者来讲,可能大家更关心的是在基础大模型训练、微调、推理和部署等实际落地方面上的创新。这就不得不谈到大模型底层的语言建模架构了,现如今,绝大多数大模型的基础架构,仍然使用6年前发表在NeurIPS上的Transformer。

随着模型规模和任务数量的增加,对整个Transformer模型进行微调也变得越来越昂贵。因此很多参数高效的迁移学习方法(Parameter Efficient Transfer Learning,PETL)被提出。本文来自Meta AI,提出了一种基于传统RNN架构的参数高效适应方法REcurrent ADaption(READ),具体来说,READ只需要在基础Transformer旁插入一个小型RNN网络,就可以实现高效的参数微调,模型无需再通过主干Transformer进行反向传播。作者通过一系列实验表明,READ在保持较高质量模型微调效果的同时,可以节省56%的训练显存消耗和84%的GPU使用量。

论文链接:

https://arxiv.org/abs/2305.15348

一、引言 

自2018年以来,大语言模型参数规模的增长速度相比GPU显存增长的速度快了近两个数量级,这使得入局大模型的门槛越来越高,配置一个足以放下大模型的“炼丹炉”的成本非常昂贵。只有少数资金的公司和机构才有能力对大模型进行训练和微调。为了降低这一门槛,PETL方法已经成为目前首选的方案,例如Adapter方法[1]通过在Transformer中插入小模块来减少模型需要更新的参数量。Soft Prompts方法[2]在模型输入embeddings后拼接小规模参数来达到类似的效果。还有受到广泛关注的Lora方法[3],通过低秩近似来最小化模型参数量,以及仅微调网络前几层中的偏执项的BitFit方法[4],下表展示了本文提出的READ方法与上述几种方法的微调代价对比结果。

从上表中看出,通过PETL方法的优化,模型的微调的成本相比完全微调已经大大降低。同时本文READ相比其他方法有着明显的优势,这得益于READ内部增加的小型RNN结构,在Transformer架构横行的今天,相对老旧的RNN展现出了强大的生命力。最近一个由华人主导的开源团队也发布了一个基于RNN架构的大语言模型RWKV[5],并且打出了与Transformer“鱼和熊掌兼得”的口号。

二、本文方法

2.1 什么是READ? 

本文提出的READ主要由一个标准的RNN和一个Joiner网络组成,READ网络的整体架构如下图所示。

2. 网络在优化过程中只涉及到RNN和前馈网络(FFN),且无需更新Self-Attention层。这提高了模型整体的可用性和训练效率,READ可以在任意的Transformer结构中即插即用。

3. 由于READ的循环网络特性,模型微调的可训练参数规模不随主干网络层数的增加而增加。两者的关系呈次线性增长。

4. READ可以在不修改主干Transformer网络中间结果的情况下进行计算。

2.2 READ如何起作用? 

 

 

三、实验效果 

本文的实验在GLUE基准的多个自然语言任务中进行,采用的基础Transformer架构为T5模型,RNN模型也使用了包含原始RNN,LSTM和GRU等多种循环神经网络结构。

3.1 READ方法在能耗显著较低的情况下表现优于其他方法 

下图展示了READ方法与其他PETL方法在GPU能耗降低情况下的性能对比,从下图左半部分我们可以看出,相比全微调(Full-tuning),READ可以将GPU使用量降低90%左右,GPU显存占用降低56%,同时模型的预测精度与原来保持一致。

虽然LoRA、BitFit或Adapter等PETL方法也可以明显减少可训练参数的数量,但它们并不能降低微调的计算成本,而这是PETL的主要优化目标。从上图右半部分我们可以看出,READ在训练过程中使用的显存占用非常小,图中主要展示了模型性能和显存占用之间的性能和空间权衡。与所有其他的baseline方法相比,READ实现了至少25%的训练显存优化,同时实现了更好的下游任务预测性能。

 

3.2 READ具有很强的可扩展性

如下图所示,与其他PETL方法相比,READ的可训练参数数量增长速度非常缓慢。随着T5骨干模型尺寸的增加,READ的参数数量呈现对数线性增长的趋势。这得益于READ的循环网络性质,使其微调参数规模与骨干网络层数无关,这使得READ在具体的工程实现中更适合于微调超大规模的Transformer模型。

3.3 READ在模型推理速度和显存占用方面也有很大的改进

如下图左半部分所示,READ相比其他PETL方法在模型推理阶段的显存占用更低,且推理速度也保持在一个较高的水平。此外,为了更全面地评估READ的推理显存占用,作者在下图右半部分展示了随着模型骨干网络尺寸的增加,推理显存占用的变化情况,相对于全微调方式,READ的推理显存增长几乎可以忽略不计。

四、总结 

本文针对大规模Transformer模型提出了一种全新的高效参数微调方法,称为REcurrent ADaption(READ)。READ方法不仅具有轻量化的特点,还能够在准确性方面与传统微调方法相媲美。READ通过引入RNN+Joiner模块的形式,使网络在微调时无需经过主干Transformer模型,显著降低了模型微调的GPU使用量,最高可以达到84%的节省效果。此外,READ还表现出了极强的扩展性,可以在几乎所有的Transformer结构上即插即用,而无需考虑修改原有模型中复杂的自注意力层。同时相对于全微调方法,READ可以降低56%的训练显存占用,这也进一步降低了深度学习工程师微调大模型的门槛。

参考 

[1] Neil Houlsby, Andrei Giurgiu, Stanislaw Jastrzebski, Bruna Morrone, Quentin De Laroussilhe, Andrea Gesmundo, Mona Attariyan, and Sylvain Gelly. Parameter-efficient transfer learning for nlp. In International Conference on Machine Learning, pages 2790–2799. PMLR, 2019

[2] Brian Lester, Rami Al-Rfou, and Noah Constant. The power of scale for parameter-efficient prompt tuning. arXiv preprint arXiv:2104.08691, 2021.

[3] Edward J Hu, Yelong Shen, Phillip Wallis, Zeyuan Allen-Zhu, Yuanzhi Li, Shean Wang, Lu Wang, and Weizhu Chen. Lora: Low-rank adaptation of large language models. arXiv preprint arXiv:2106.09685, 2021

[4] Elad Ben Zaken, Shauli Ravfogel, and Yoav Goldberg. Bitfit: Simple parameter-efficient fine-tuning for transformer-based masked language-models, 2022.

[5] Peng B, Alcaide E, Anthony Q, et al. RWKV: Reinventing RNNs for the Transformer Era[J]. arXiv preprint arXiv:2305.13048, 2023.

作者:seven_

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/751751.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue3中通过vue-i18n实现国际化

效果图 前言 突然想在vue3项目中使用国际化功能,查阅相关资料后发现和vue2的用法有些出入,记录一下 使用 下载vue-i18n npm i vue-i18n2、准备语言文件 目前我的项目只支持中英文切换,故准备一份中文文件和一份对应的英译文件 创建langur…

七大排序算法——直接插入排序,通俗易懂的思路讲解与图解(完整Java代码)

文章目录 一、排序的概念排序的概念排序的稳定性七大排序算法 二、直接插入排序核心思想代码实现 三、性能分析四、七大排序算法性能对比 一、排序的概念 排序的概念 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小&#…

【Java进阶之路】NIO基础

一、NIO基础 Java New IO是从Java1.4版本开始引入的一个新的IO api,可以替代以往的标准IO,NIO相比原来的IO有同样的作用和目的,但是使用的方式完全不一样,NIO是面向缓冲区的,基于通道的IO操作,这也让它比传…

美团外卖智能陪伴型导购的探索与实践

相比于其他电商场景,外卖场景对于实时发现和反馈用户兴趣的能力有着更高的要求。近年来,美团外卖算法团队摸索出了一套适用于外卖场景的智能陪伴型导购架构和策略。这一举措已经取得了显著成效,本文将详细介绍外卖搜索技术团队搭建智能陪伴型…

Redis数据结构 — IntSet

目录 整数集合IntSet结构设计 IntSet的升级操作 升级具体过程 升级具体源码 小结 IntSet是Redis中set集合的一种实现方式,基于整数数组来实现,并且具备长度可变、有序等特征。 整数集合IntSet结构设计 整数集合本质上是一块连续内存空间&#xff…

Ubuntu22.04安装飞书

通过以下教程可以快速的安装飞书。 安装包下载 进入飞书下载官网下载飞书Linux客户端 选择deb格式安装包下载 安装方式 方式一:运行安装包安装 双击deb文件,点击install进行安装 方式二:终端命令安装 到安装目录,然后dpkg你的安…

光速吟唱,Clibor ,批量多次复制依次粘贴工具 快捷输入软件教程

批量多次复制依次粘贴工具 批量复制粘贴工具0.81.exe https://www.aliyundrive.com/s/3sbBaGmHkb8 点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。 青县solidworks钣金设计培训 …

Web3.0:重新定义数字资产的所有权和交易方式

随着区块链技术的发展和应用,数字资产的概念已经逐渐深入人心。数字资产不仅包括加密货币,还包括数字艺术品、虚拟土地、游戏道具等各种形式的数字物品。然而,在传统的互联网环境下,数字资产的所有权和交易方式往往受到限制和约束…

二极管总结

目录 1.2.2二极管的伏安特性 1.2.3二极管的主要参数 1.2.4二极管的等效电路 1.2.5稳压二极管 1.2.6其它类型二极管 1.2.2二极管的伏安特性 二极管和PN结伏安特性区别: 相同点:同样具有单向导电性 不同点:二极管存在半导体体电阻和引线电阻…

Android JNI线程的创建 (十二)

🔥 Android Studio 版本 🔥 🔥 创建JNI 🔥 package com.cmake.ndk1.jni;public class JNIThread {static {System.loadLibrary("thread-lib");}public native void createNativeThread();public native void createNativeThreadWithArgs();public native v…

金科威GoldWayUT4000监护仪协议对接

通过网口,成功对接到参数: Sys、Dia、Map、Temp、HR、SPO2、Resp、RR、EtCO2、InCO2等数值。

玩玩两个简单的python的web框架 flask、fastapi

IDEA连接远程解释器,本地代码编辑无法代码提示 一、Flask入门使用 官网 其它参考 注意 1.这里使用linux 192.168.72.126上远程解释器,需要/usr/bin/pip3 install flask,host参数不要使用localhost/127.0.0.1,即只监听本地的访问,会导致wind…

electron-updater 自动更新升级应用

electron 内置了 autoUpdater 自动更新功能,但是服务配置有些复杂,最后选择了 electron-updater 工具插件,这里就讲讲如何配置 electron-updater 来自动更新升级应用。 一、项目依赖和 scripts 安装 electron-updater 和 electron-log pnpm…

5分钟构建电商API接口服务 | python小知识

1. 什么是API 我们经常会使用一些API接口来完成特定的功能,比如查询天气的数据,下载股票的数据,亦或是调用ChatGPT模型的结构等等。 API全称是Application Programming Interface,即应用程序接口,它通常提供了一个功…

数据结构与算法——顺序表(顺序存储结构)及初始化详解

顺序表,全名顺序存储结构,是线性表的一种。通过《什么是线性表》一节的学习我们知道,线性表用于存储逻辑关系为“一对一”的数据,顺序表自然也不例外。 不仅如此,顺序表对数据的物理存储结构也有要求。顺序表存储数据…

Android之Glide图片框架分析

为什么使用Glide? 使用简单,链式调用,API简洁。with、load、into三步走就可以加载图片生命周期自动绑定,根据绑定的Activity或者Fragment生命周期管理图片请求高效处理Bitmap。支持bitmap的复用和主动回收,减少系统回…

查看隐藏文件怎么做?4个简单方法分享

“朋友们!想问问大家如果设置了隐藏文件,想查看的时候应该怎么进行查看呀?有没有朋友可以教教我!” 为了保护电脑的隐私,我们有时候可能会给电脑设置某些隐藏的文件,这些隐藏的文件我们是无法看到的。如果我…

【GitOps系列】从零上手GitOps

文章目录 GitOps 介绍如何将业务代码构建为容器镜像?如何将容器镜像部署到K8s?K8s如何实现自动扩容和自愈?1.传统的扩容和自愈2.k8s自愈机制3.k8s弹性扩容 如何借助GitOps实现应用秒级自动发布和回滚?1.传统 K8s 应用发布流程2.从…

SpringCloudAlibaba:消息驱动之RocketMQ学习

目录 一、MQ简介 (一)什么是MQ (二)MQ的应用场景 1、异步解耦 2、流量削峰 (三)常见的MQ产品 二、RocketMQ入门 (一)RocketMQ安装部署 1、环境要求 2、下载RocketMQ 3、安…

Linux网络综合基础实验 (二十三)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、实验目的 二、实验要求 三、实验拓扑 四、实验步骤 1. DHCP 安装 2、DNS 服务器搭建 3、web服务器配置 3.1基础配置 3.2查看IP获得情况 3.3 配置本地yum源 4、…