当前位置: 首页 > article >正文

GaLore:基于梯度低秩投影的大语言模型高效训练方法详解一

📘 GaLore:基于梯度低秩投影的大语言模型高效训练方法详解

一、论文背景与动机

随着大语言模型(LLM)参数规模的不断增长,例如 GPT-3(175B)、LLaMA(65B)、Qwen(100B+),在训练过程中所需的显存和计算资源成为了一个重大瓶颈。

传统的训练方式如 AdamW 需要存储每个参数的梯度、动量、以及二阶矩估计值,导致:

  • 显存占用巨大
  • 训练成本高昂
  • 只能在高配 GPU 上运行

为了解决这个问题,来自 UC Berkeley 的团队提出了 GaLore(Gradient Low-Rank Projection),一种基于梯度低秩近似 的新方法,能够在显著降低训练显存消耗的同时,保持模型性能不变甚至提升。


二、GaLore 的核心思想

1. 梯度矩阵的低秩特性观察

作者通过大量实验发现:Transformer 中大多数层的梯度矩阵具有显著的低秩结构,即梯度信息集中在少数几个主成分上。

💡 举例:

  • 在 ViT、BERT、LLM 等模型中,梯度矩阵的奇异值快速衰减。
  • 这意味着我们不需要完整地保留所有梯度维度,只需要保留前 r 个主成分即可近似整个梯度方向。

2. 核心操作流程

GaLore 的训练流程分为以下几个关键步骤:

(1)梯度投影到低秩空间

对于每一层权重 $ W \in \mathbb{R}^{m \times n} $,其梯度 $ \nabla_W L $ 是一个 $ m \times n $ 的矩阵。GaLore 将其进行 SVD 分解,并只保留前 r 个奇异向量:

∇ W L ≈ U r Σ r V r T \nabla_W L \approx U_r \Sigma_r V_r^T WLUrΣrVrT

其中 $ U_r, V_r $ 是左右奇异向量矩阵,$ \Sigma_r $ 是对角矩阵。

(2)在低秩空间中更新参数

仅对低秩空间中的参数进行更新:

W ~ = W + η ⋅ U r ⋅ Adam ( U r T ∇ W L V r ) ⋅ V r T \tilde{W} = W + \eta \cdot U_r \cdot \text{Adam}(U_r^T \nabla_W L V_r) \cdot V_r^T W~=W+ηUrAdam(UrTWLVr)VrT

其中 $ \eta $ 是学习率。

(3)反投影回原始空间

更新后的参数 $ \tilde{W} $ 已经是低秩修正后的结果,可以直接应用于下一轮训练。


三、GaLore 的优势与特点

特性描述
显存节省相比 AdamW,节省高达 3~5 倍显存
不影响精度实验显示 GaLore 在多种任务上性能接近甚至超过标准 AdamW
兼容性强支持所有主流优化器(AdamW、SGD with Momentum、LAMB 等)
多模态支持可用于视觉、语言、多模态任务(ViT、CLIP、VQA 等)
易于集成可直接替换现有优化器,无需修改模型结构

四、技术实现细节

1. 梯度压缩过程

GaLore 并不是对参数本身做低秩约束,而是对梯度进行低秩投影,从而减少每次更新所需的信息量。

# 伪代码示意
def galore_update(W, grad, optimizer):U, S, V = torch.svd_lowrank(grad, rank=r)low_rank_grad = U @ torch.diag(S) @ V.T# 使用低秩梯度更新参数updated = optimizer.step(low_rank_grad)return updated

2. 动量与 Adam 的适配

GaLore 支持动量机制和 AdamW 的变体,只需将动量和方差也投影到低秩空间中:

  • 动量项:$ m_t = \beta_1 m_{t-1} + (1-\beta_1)\nabla $
  • 方差项:$ v_t = \beta_2 v_{t-1} + (1-\beta_2)\nabla^2 $

这些项也被投影到低秩空间,大大减少了内存开销。

3. 层级控制策略

不同层的梯度低秩程度不同,因此 GaLore 提出了层级自适应投影策略(Layer-wise Adaptive Rank Selection),根据每层梯度的奇异值分布自动选择合适的秩 r。


五、实验验证与性能表现

作者在多个任务上进行了广泛的实验验证,包括:

任务类型数据集模型
图像分类ImageNetViT-B/16
自然语言处理GLUEBERT-base
大语言模型WikiText-2、OpenWebTextGPT-2 small
多模态理解VQA、ImageNetCLIP-ViT-B/16

实验结果亮点:

  • 在 ImageNet 上使用 ViT-B/16,GaLore 节省了 4.8x 显存,准确率仅下降 0.3%
  • 在 GLUE 任务上,BERT 使用 GaLore 后显存减少 4.2x,平均指标损失小于 1.5%
  • 在 GPT-2 small 上,GaLore 达到了与 AdamW 相当的语言建模性能,但显存需求更低
  • 在多模态任务中,GaLore 在 CLIP 上表现出色,尤其在图像检索任务中几乎无损性能

六、与其他参数效率训练方法的对比

方法显存节省是否改变模型结构是否依赖预训练是否适用于多模态
LoRA
AdaLoRA
BitFit / DiffPruning
GaLore✅✅✅✅✅

✅ 表示支持,❌ 表示不支持或受限。

GaLore 的最大优势在于:它不改变模型结构,也不需要额外预训练,就可以实现显存节约和训练加速。


七、GaLore 的适用场景

场景说明
本地训练 LLaMA 系列模型如 LLaMA-7B、CodeLlama、TinyLlama 等
教学科研平台在消费级 GPU(如 RTX 3090、4090)上训练大模型
显存敏感型部署当显存成为训练瓶颈时,GaLore 可作为首选优化器
多模态模型训练如 CLIP、Flamingo、BLIP 等,可大幅降低训练成本

八、论文贡献总结

  1. 提出了一种全新的梯度压缩训练方法 GaLore,基于梯度矩阵的低秩特性,实现了更高效的优化。
  2. 理论分析表明,低秩投影不仅不会损害收敛性,反而有助于稳定训练过程。
  3. 实验证明 GaLore 在多个任务上都取得了优异的表现,尤其在显存节省方面远超当前主流方法。
  4. 开源实现已发布,并与 PyTorch 生态兼容,便于社区使用和扩展。


九、结语

GaLore 是近年来大语言模型训练优化领域的一项重要进展。它通过巧妙利用梯度矩阵的低秩性质,在不牺牲性能的前提下,显著降低了训练所需的显存和计算资源。

📌 欢迎点赞、收藏,并关注我,我会持续更新更多关于 AI、LLM、视觉-语言模型等内容!

相关文章:

GaLore:基于梯度低秩投影的大语言模型高效训练方法详解一

📘 GaLore:基于梯度低秩投影的大语言模型高效训练方法详解 一、论文背景与动机 随着大语言模型(LLM)参数规模的不断增长,例如 GPT-3(175B)、LLaMA(65B)、Qwen&#xff…...

OpenCV CUDA模块图像处理------图像融合函数blendLinear()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 该函数执行 线性融合(加权平均) 两个图像 img1 和 img2,使用对应的权重图 weights1 和 weights2。 融合公式…...

Linux服务器如何安装wps?

1.到wps官网 https://www.wps.cn/product/wpslinux 2.到安装目录上执行命令 sudo dpkg -i wps-office*.deb 3.启动wps 在终端中输入 wps 命令即可启动 WPS...

图片压缩工具 | 图片生成PDF文档

OPEN-IMAGE-TINY,一个基于 Electron VUE3 的图片压缩工具,项目开源地址:https://github.com/0604hx/open-image-tiny ℹ️ 需求描述 上一版本发布后,有用户提出想要将图片转换(或者说生成更为贴切)PDF文档…...

Python的浅拷贝与深拷贝

一、浅拷贝 浅拷贝,指的是重新分配一块内存,创建一个新的对象,但里面的元素是原对象中各个子对象的引用。 浅拷贝有几种方法: 1、 使用数据类型本身的构造器 list1[1,2,3]list2 list(list1) # 使用了数据类型本身的构造器 list…...

VSCode - VSCode 放大与缩小代码

VSCode 放大与缩小代码 1、放大 点击顶部菜单栏【查看】 -> 点击外观 -> 点击【放大】 或者,使用快捷键:Ctrl # 操作方式先按住 Ctrl 键,再按 键2、缩小 点击顶部菜单栏【查看】 -> 点击外观 -> 点击【缩小】 或者&#x…...

消息队列处理模式:流式与批处理的艺术

🌊 消息队列处理模式:流式与批处理的艺术 📌 深入解析现代分布式系统中的数据处理范式 一、流式处理:实时数据的"活水" 在大数据时代,流式处理已成为实时分析的核心技术。它将数据视为无限的流,…...

11-Oracle 23ai Vector Embbeding和ONNX

Embedding (模型嵌入)是 AI 领域的一个核心概念 一、Embedding(嵌入)的含义 Embedding 是一种将 非结构化数据​(如文本、图像、音频、视频)转换为 数值向量的技术。 其核心是通过 嵌入模型​(…...

Build a Large Language Model (From Scratch) 序章

关于本书 《从零构建大型语言模型》旨在帮助读者全面理解并从头创建类似GPT的大型语言模型(LLMs)。 全书首先聚焦于文本数据处理的基础知识和注意力机制的编码,随后指导读者逐步实现一个完整的GPT模型。书中还涵盖了预训练机制以及针对文本…...

【HarmonyOS 5】教育开发实践详解以及详细代码案例

以下是基于 ‌HarmonyOS 5‌ 的教育应用开发实践详解及核心代码案例,结合分布式能力与教育场景需求设计: 一、教育应用核心开发技术 ‌ArkTS声明式UI‌ 使用 State 管理学习进度状态,LocalStorageProp 实现跨页面数据同步(如课程…...

NoSQL 之Redis哨兵

目录 一、Redis 哨兵模式概述 (一)背景与核心目标 (二)基本架构组成 (三)核心功能 二、哨兵模式实现原理 (一)配置关键参数 (二)哨兵节点的定时任务 …...

【nano与Vim】常用命令

使用nano编辑器 保存文件 : 按下CtrlO组合键,然后按Enter键确认文件名。 退出编辑器 : 按下CtrlX组合键。 使用vi或vim编辑器 保存文件 : 按Esc键退出插入模式,然后输入:w并按Enter键保存文件。 退出编辑器 &#xf…...

OpenCV 图像色彩空间转换与抠图

一、知识点: 1、色彩空间转换函数 (1)、void cvtColor( InputArray src, OutputArray dst, int code, int dstCn 0, AlgorithmHint hint cv::ALGO_HINT_DEFAULT ); (2)、将图像从一种颜色空间转换为另一种。 (3)、参数说明: src: 输入图像,即要进行颜…...

Amazing晶焱科技:电子系统产品在多次静电放电测试后的退化案例

在我们的电子设计世界里,ESD(静电放电)问题总是让人头疼。尤其是当客户面临系统失效的困境时,寻找一个能够彻底解决问题的方案就变得格外重要。这一次,我们要谈的是一个经典案例:电子系统产品在多次静电放电…...

Go 中的 Map 与字符处理指南

Go 中的 Map 与字符处理指南 在 Go 中,map 可以存储字符,但需要理解字符在 Go 中的表示方式。在 Go 语言中,"字符" 实际上有两种表示方法:byte(ASCII 字符)和 rune(Unicode 字符&…...

互联网大厂Java求职面试:云原生架构下的微服务网关与可观测性设计

互联网大厂Java求职面试:云原生架构下的微服务网关与可观测性设计 郑薪苦怀着忐忑的心情走进了会议室,对面坐着的是某大厂的技术总监张总,一位在云原生领域有着深厚积累的专家。 第一轮面试:微服务网关的设计挑战 张总&#xf…...

C++中const关键字详解:不同情况下的使用方式

在 C 中,const 关键字用于指定一个对象或变量是常量,意味着它的值在初始化之后不能被修改。下面详细介绍 const 修饰变量、指针、类对象和类中成员函数的区别以及注意事项。 修饰变量 详细介绍 当 const 修饰变量时,该变量成为常量&#x…...

Java 2D 图形类总结与分类

一、基本形状类 这些类用于绘制简单的标准几何形状。 1. 圆形 / 椭圆类 Ellipse2D:椭圆基类,支持浮点精度。 子类: Ellipse2D.Double:双精度浮点坐标。Ellipse2D.Float:单精度浮点坐标。 参数:x, y, wid…...

C# 快速检测 PDF 是否加密,并验证正确密码

引言:为什么需要检测PDF加密状态? 在批量文档处理系统(如 OCR 文字识别、内容提取、格式转换)中,加密 PDF 无法直接操作。检测加密状态可提前筛选文件,避免流程因密码验证失败而中断。 本文使用 Free Spire…...

服务器信任质询

NSURLSession 与 NSURLAuthenticationMethodServerTrust —— 从零开始的“服务器信任质询”全流程 目标读者:刚接触 iOS 网络开发、准备理解 HTTPS 与证书校验细节的同学 出发点:搞清楚为什么会有“质询”、质询的触发时机、以及在 delegate 里怎么正确…...

华为云Flexus+DeepSeek征文| 华为云Flexus X实例单机部署Dify-LLM应用开发平台全流程指南

华为云FlexusDeepSeek征文| 华为云Flexus X实例单机部署Dify-LLM应用开发平台全流程指南 前言一、相关名词介绍1.1 华为云Flexus X实例介绍1.2 Dify介绍1.3 DeepSeek介绍1.4 华为云ModelArts Studio介绍 二、部署方案介绍2.1 方案介绍2.2 方案架构2.3 需要资源2.4 本…...

Python: 操作 Excel折叠

💡Python 操作 Excel 折叠(分组)功能详解(openpyxl & xlsxwriter 双方案) 在处理 Excel 报表或数据分析时,我们常常希望通过 折叠(分组)功能 来提升表格的可读性和组织性。本文将详细介绍如何使用 Python 中的两个主流 Excel 操作库 —— openpyxl 和 xlsxwriter …...

IBM官网新闻爬虫代码示例

通常我们使用Python编写爬虫,常用的库有requests(发送HTTP请求)和BeautifulSoup(解析HTML)。但这里需要注意的是,在爬取任何网站之前,务必遵守该网站的robots.txt文件和相关法律法规&#xff0c…...

Java持久层技术对比:Hibernate、MyBatis与JPA的选择与应用

目录 简介持久层技术概述Hibernate详解MyBatis详解JPA详解技术选型对比最佳实践与应用场景性能优化策略未来发展趋势总结与建议 简介 在Java企业级应用开发中,持久层(Persistence Layer)作为连接业务逻辑与数据存储的桥梁,其技…...

Spring Boot实现接口时间戳鉴权

Spring Boot实现接口时间戳鉴权,签名(sign)和时间戳(ts)放入请求头(Header)。 一、请求头参数设计 参数名类型说明tsLong13位时间戳(Unix毫秒值),必填&…...

视觉SLAM基础补盲

3D Gaussian Splatting for Real-Time Radiance Field Rendering SOTA方法3DGS contribution传统重建基于点的渲染NeRF 基础知识补盲光栅化SFM三角化极线几何标准的双目立体视觉立体匹配理论与方法立体匹配的基本流程李群和李代数 李群和李代数的映射李代数的求导李代数解决求导…...

STM32外设问题总结

SPI: ①.软件SPI和硬件SPI有什么不一样? 答:软件SPI需要在代码中进行配置相关代码,如配置引脚等,而硬件SPI的话是它已经在硬件上已经配置好SPI了,已经可以直接实现,所以可以直接使…...

Vue-3-前端框架Vue基础入门之VSCode开发环境配置和Tomcat部署Vue项目

文章目录 1 安装配置VSCode1.1 安装中文语言插件1.2 主题颜色1.3 禁用自动更新1.4 开启代码提示设置1.5 安装open in browser插件2 安装配置nodejs2.1 配置环境变量2.2 npm与maven的区别2.3 使用npm避坑3 创建Vue项目3.1 两种创建方式3.2 package.json3.3 安装新的依赖3.4 运行…...

动态IP与静态IP:数字世界的“变脸术”与“身份证”

目录 动态IP:互联网的“游牧民族” 静态IP:数字世界的“常驻公民” 动态VS静态:场景驱动的选择逻辑 未来演进:IP地址的“液态化”趋势 选型指南:没有最好,只有最合适 在互联网的海洋里,每个…...

“一代更比一代强”:现代 RAG 架构的演进之路

编者按: 我们今天为大家带来的文章,作者的观点是:RAG 技术的演进是一个从简单到复杂、从 Naive 到 Agentic 的系统性优化过程,每一次优化都是在试图解决无数企业落地大语言模型应用时出现的痛点问题。 文章首先剖析 Naive RAG 的基…...