陈丹琦团队新作:单卡A100可训300亿参数模型啦!

news2024/11/30 12:28:09
夕小瑶科技说 原创
作者 | 智商掉了一地、ZenMoore

近年来,随着大模型的涌现,微调语言模型已经在各种下游任务上展现出了卓越的性能。然而,这些庞大模型的参数量常常达到数十亿甚至上百亿的级别,训练这样规模的模型需要消耗大量的内存,并且传统的反向传播方法在优化过程中表现缓慢。

本文的作者们的提出了 MeZO 这种内存高效的零阶优化器。通过将经典的 ZO-SGD 方法改进为原地操作,该方法实现了与推理阶段相同的内存占用,使得微调语言模型变得更加高效。以单个 A100 80GB GPU 为例,使用 MeZO 可以训练具有 300 亿参数的模型,而传统的反向传播方法在相同的预算下只能训练 27 亿参数的大模型。

如图 1 所示,作者在 OPT-13B 模型上进行了实验,并对比了它们的结果。尽管仅使用了 1/12 的内存,MeZO 在 7 个任务中展现出优于 zero-shot 和 ICL 的结果。

图1 使用 zero-shot、上下文学习(ICL)、MeZO 以及 Adam 进行微调

那这也就意味着,研究人员和开发者们使用 MeZO 这种内存高效的零阶优化器,也许能克服传统方法中遇到的内存限制和计算瓶颈。可以实现更自由地探索、训练和优化具有巨大参数规模的语言模型,为自然语言处理领域带来更加精确和高效的解决方案~

论文题目:
Fine-Tuning Language Models with Just Forward Passes

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

代码地址:
https://github.com/princeton-nlp/MeZO

大模型研究测试传送门

GPT-4能力研究传送门(遇浏览器警告点高级/继续访问即可):
https://gpt4test.com

论文速览

背景设置:考虑一个标记数据集 D \mathcal{D} D 和一个 mini-batch B \mathcal{B} B,用 L ( θ ; B ) L(\theta;\mathcal{B}) L(θ;B) 表示 mini-batch 上的损失。在这个设置下,引入经典的零阶(ZO)梯度估计。

内存高效的 ZO-SGD(MeZO)

由于经典的 ZO-SGD 算法需要存储分布 z ∈ R d \mathcal{z} ∈ \mathbb{R}^d zRd,因此其内存开销是推理的两倍。内存高效的 ZO-SGD(MeZO)的提出是为解决这个问题,如算法 1 所示。

算法1 MeZO

在每个步骤中,首先随机选择一个种子 s,对于算法 1 中 z 的四种用法中的每一种,通过 s 重新设置随机数生成器,并重新采样 z 的相关条目。通过这种原地实现,MeZO 的内存占用与推理阶段的内存成本相当

需要注意的是,算法 1 描述了对每个参数进行分别扰动的操作,对于大型模型来说,这可能会耗费大量时间。在实践中,可以通过同时扰动整个权重矩阵而不是独立扰动每个标量来节省时间。这会带来额外的内存开销,开销的大小与最大的权重矩阵相当;通常情况下,最大的权重矩阵是词嵌入矩阵。

MeZO 扩展

MeZO 可以与其他基于梯度的优化器结合使用,例如带动量的随机梯度下降(SGD)或 Adam 优化器。

尽管原始的实现方式需要额外的内存来存储梯度动量的估计值,但 MeZO-momentum 和 MeZO-Adam 通过使用保存的前向传播损失和 z 来重新计算梯度的移动平均值,从而减少了这种内存开销。

此外,SPSA 梯度估计中的所有坐标具有相同的尺度,但深层 Transformer 的不同层可能具有不同尺度的梯度。因此,作者借鉴了分层自适应优化器的思想,设计了几种 MeZO 的变体。

实验

  • ICL:在上下文学习中使用
  • LP:线性探测
  • FT:使用 Adam 进行完全微调

内存使用情况

MeZO 在许多任务上的表现与 FT 相当,优于等价内存方法,同时大大降低了内存成本。图 2 和图 3 中比较了 ICL、FT、LP 和 MeZO 的内存消耗。

图2 不同 OPT 模型的 GPU 内存消耗和 MultiRC 上的调优方法

图3 可用特定硬件和算法进行调优的最大 OPT 模型

中等规模的掩码语言模型

图4 对 RoBERTa-large 进行实验

实验结果显示:

  • MeZO 在与 zero-shot、LP 和其他等价内存方法相比表现明显更好。
  • 在有足够数据的情况下,MeZO 实现了与 FT 相当的性能(最多相差5%)。
  • MeZO 在全参数调优和 PEFT 方面都表现良好。

大型自回归语言模型

MeZO 在分类、多项选择和生成任务中展现出强大的性能。

表1 在 OPT-13B 上的实验

MeZO 可扩展至拥有 660 亿参数的模型。

表2 对OPT-30B和OPT-66B进行的实验

使用非可微目标进行训练

MeZO 可以优化准确率和 F1 分数等不可微目标。

表3 在非可微目标下使用 MeZO

小结

这种方法的重要性不言而喻,它为研究人员和开发者们提供了一种有效路径,使得他们能够在有限的资源下训练更大规模的语言模型。

  • 首先,MeZO 的内存效率使得在训练阶段可以使用与推理阶段相似的硬件配置,这对于实际应用和部署非常重要。传统的反向传播方法需要更多的内存和计算资源,限制了大规模模型的使用范围。而使用 MeZO,研究人员和开发者们可以在相对较低的成本下进行训练,同时获得更高的模型容量和表达能力。
  • 其次,MeZO 的原地操作特性避免了不必要的内存开销和数据传输,进一步提升了训练效率。传统的反向传播方法需要存储和传输大量的中间计算结果,而 MeZO 则在不增加额外内存开销的情况下进行模型参数的更新,减少了内存占用和数据传输的需求。这对于训练大规模语言模型而言尤为重要,使得训练过程更快速和高效
  • 因此,MeZO 的提出对于推动大规模语言模型的发展具有重要意义。它为研究人员和开发者们提供了一种创新的优化方法,使得他们能够更加灵活地设计和训练具有庞大参数量的模型。通过提高训练效率和降低资源成本,MeZO 为语言模型的进一步研究和应用打开了新的可能性,有望在自然语言处理领域带来更大的突破和创新。此外,这种内存高效的优化器还有助于降低训练大规模模型的门槛,使更多的人能够参与到语言模型的研究和应用中,从而促进创新和技术的普及

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

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

相关文章

chatgpt赋能python:Python视图(View)在SEO中的重要性

Python视图(View)在SEO中的重要性 什么是Python视图? Python视图是指,在Web应用程序中,将业务逻辑与显示逻辑分开处理,并以代码的形式定义的可重用组件。它们是与URL相对应的函数或方法。Python视图可以生…

uniapp:uni-app-base 项目基础配置,开箱可用

目前(20230605)uni-app最新版本(3.8.4.20230531) 一、官网文档 uni-app官网 二、创建项目 项目目标:vue3tsvitevscode 创建以 typescript 开发的工程(如命令行创建失败,请直接访问 gitee 下…

《面试1v1》JVM调优

我是 javapub,一名 Markdown 程序员从👨‍💻,八股文种子选手。 《面试1v1》 连载中… 面试官: 小伙子,说听说你JVM调优挺在行? 候选人: 谢谢夸奖,我对JVM调优还在学习中,远未达到在行的程度。不过日常工作…

springboot项目外卖管理 day04-文件的上传下载与菜品的新增与修改

文章目录 1、文件上传下载1.1、文件上传介绍与实现1.2、文件下载介绍与实现 2、新增菜品2.1、需求分析2.2、代码开发-梳理交互过程2.2.1、菜品分类下拉框:在CategoryController添加 2.2.2、新增保存 3、菜品信息分页查询3.1、代码开发-梳理交互过程对象拷贝BeanUtil…

chatgpt赋能python:Python输出方法详解:从基础print()到高级logging模块

Python输出方法详解:从基础print()到高级logging模块 在Python编程中,输出是一个必不可少的步骤。然而,Python提供了多种输出方法,如何选择最适合的方法呢?本文将详细介绍Python输出的不同方法,并给出实际…

只给大模型LeetCode编号,也能解题!大模型表现好是源于对训练数据的记忆吗?请不要迷信大模型

夕小瑶科技说 原创 作者 | Python 自从推出以来,ChatGPT这款智能高效的人机对话平台迅速风靡全球。人们开始广泛尝试使用ChatGPT来解决各种问题,无论是医学检测报告的解释,还是公众号文章的取名,甚至是论文修改润色和rebuttal撰…

微服务治理框架- - -Spring Cloud

前言:最近微服务很是火热,那么什么是微服务?相信小伙伴们对此也是一知半解,那么今天叶秋学长带领大家一起学习微服务治理框架Spring Cloud,快来跟着学长一起学习吧~~ 目录 对SpringCloud了解多少? 什么是…

【动态规划】NK刷题之DP7 连续子数组的最大乘积

【动态规划】NK刷题之DP7 连续子数组的最大乘积 1.题目2.题解3.代码部分法一:动态规划3.1.1 创建变量n,并读入数据3.1.2 创建动态数组,并初始化3.1.3 对动态数组断言3.1.4 读入原整形数组的数据3.1.5 创建变量ret,并赋初值3.1.6 循…

chatgpt赋能python:Python怎么下jieba库

Python怎么下jieba库 Python是目前最流行的动态编程语言之一,广泛应用于Web开发、数据分析、人工智能等领域。对于中文文本处理来说,jieba库是一款非常实用的工具。本文将介绍如何下载jieba库,并探讨其在中文分词、情感分析等方面的应用。 …

week7 表示学习(Representation Learning) Part1--Pretext Text

文章目录 Representation LearningInferring structure(推断结构) Transformation predictionRotation predictionRelative transformation prediction ReconstructionDenoising AutoencodersContext encodersColorizationSplit-brain encoders Instance…

Keras-3-实例3-回归问题

1. 回归问题 1.1 波士顿房价数据集加载: 预测20世界70年代中期波士顿郊区房屋价格的中位数。 已知当时郊区有一些数据点,如犯罪率、房产税率等。 与IMDB和路透社数据集相比,波士顿房价数据集样本量比较少,只有506个样本;同时&a…

数据结构——绪论/线性表

文章目录 **一 基本概念****二 算法和算法评价****三 线性表的定义和基本操作****四 线性表的顺序表示****1 定义****2 基本操作** **五 线性表的链式表示****1 单链表的定义****2 单链表的基本操作实现****3 双链表****4 循环链表****5 静态链表** 一 基本概念 数据类型&…

使用pycharm入门python的一些注意点

今儿在帮别人跑一段python代码,实际上我对python并不熟悉,只能边摸索边尝试。选择了pycharm这个工具。 一.怎么安装python使用的库文件 能用来安装python的库文件的,有很多种办法,这里只介绍pip和pip3。因为pip和pip3的优势是能…

SpringCloud第一篇:服务的注册与发现Eureka

一、spring cloud简介 spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。它运行环境简单,可以在开发人员的电脑上跑。 二、创建服务注册中心 …

oracle细节、经验锦集

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/131054454 出自【进步*于辰的博客】> 由于是随兴记录,因此阐述的比较多而乱&…

详解Eureka服务注册和调用

目录 1.概述 2.环境 2.1.项目结构 2.2.项目架构 2.3.依赖 3.注册中心 3.1.配置使用 3.2.管理页 3.3.集群 4.服务注册 5.服务调用 5.2.Ribbon 5.3.Feign 5.4.OpenFeign 1.概述 我们把从外部进入到微服务集群里的流量称为“南北流量”、微服务集群节点间流转的流量…

HTML type=“radio“ 不显示按钮

问题 HTML中type&#xff1d;"radio" 但是在界面中不显示按钮。 详细问题 HTML中type&#xff1d;"radio" 但是在界面中不显示按钮。 笔者html核心代码 <div>性别<input type"radio" id"male" name"gender" va…

chatgpt赋能python:Python中的中文分词神器——jieba

Python中的中文分词神器——jieba 介绍 如果你曾经在处理中文文本时&#xff0c;也许会遇到中文分词的需求&#xff0c;jieba就是一款不可错过的工具。 jieba 是目前最好的 Python 中文分词库&#xff0c;它具有高效、简单和可定制等优点&#xff0c;适合各种规模的文本分词…

Linux学习之vim四种模式初探

vim是一个多模式&#xff0c;有vim /所在目录/文件名&#xff0c;若是已经有了文件&#xff0c;可以打开文件进行编辑&#xff0c;若是没有文件&#xff0c;在vim中保存之后就会有一个文件&#xff0c;相当于记事本里边新建一个文件。我现在就使用vim新建一个文件&#xff0c;然…

C# .NET EF框架 webapi 安装使用sqlite

文章目录 Sqlite安装使用Sqlite特点环境安装EF 是什么&#xff1f;EF使用举例 Nuget控制台 Sqlite安装使用 Sqlite特点 Sqlite是轻量级数据库&#xff0c;不需要安装&#xff0c;跨平台使用。是用来做小软件&#xff0c;小项目&#xff0c;快速移植的最优解。不需要像mysql和…