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

news2025/6/8 4:18:41

📘 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、视觉-语言模型等内容!

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

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

相关文章

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

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

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

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

VSCode - VSCode 放大与缩小代码

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

11-Oracle 23ai Vector Embbeding和ONNX

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

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

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

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

华为云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…

视觉SLAM基础补盲

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

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 运行…

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

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

My图床项目

引言: 在海量文件存储中尤其是小文件我们通常会用上fastdfs对数据进行高效存储,在现实生产中fastdfs通常用于图片,文档,音频等中小文件。 一.项目中用到的基础组件(Base) 1.网络库(muduo) 我们就以muduo网络库为例子讲解IO多路复用和reactor网络模型 1.1 IO多路复用 我们可以…

1、Go语言基础中的基础

摘要:马士兵教育的Go语言基础的视频笔记。 第一章:走进Golang 1.1、Go的SDK介绍 1.2、Go的项目基本目录结构 1.3、HelloWorld 1.4、编译 1.5、执行 1.6、一步到位 1.7、执行流程分析 1.8、语法注意事项 (1)源文件以"go&qu…

buuctf——web刷题第二页

[网鼎杯 2018]Fakebook和[SWPU2019]Web1没有,共30题 目录 [BSidesCF 2020]Had a bad day [网鼎杯 2020 朱雀组]phpweb [BJDCTF2020]The mystery of ip [BUUCTF 2018]Online Tool [GXYCTF2019]禁止套娃 [GWCTF 2019]我有一个数据库 [CISCN2019 华北赛区 Day2…

MVC与MVP设计模式对比详解

MVC(Model-View-Controller)和MVP(Model-View-Presenter)是两种广泛使用的分层架构模式,核心目标是解耦业务逻辑、数据和界面,提升代码可维护性和可测试性。以下是它们的对比详解: MVC 模式&…

二叉树的遍历总结

144.二叉树的前序遍历(opens new window)145.二叉树的后序遍历(opens new window)94.二叉树的中序遍历 二叉数的先中后序统一遍历法 public static void preOrder(BiTree root){BiTree p root;LinkedList<BiTree> stack new LinkedList<>();while(p ! null ||…

win32相关(远程线程和远程线程注入)

远程线程和远程线程注入 CreateRemoteThread函数 作用&#xff1a;创建在另一个进程的虚拟地址空间中运行的线程 HANDLE CreateRemoteThread([in] HANDLE hProcess, // 需要在哪个进程中创建线程[in] LPSECURITY_ATTRIBUTES lpThreadAttributes, // 安全…

[Spring]-AOP

AOP场景 AOP: Aspect Oriented Programming (面向切面编程) OOP: Object Oriented Programming (面向对象编程) 场景设计 设计: 编写一个计算器接口和实现类&#xff0c;提供加减乘除四则运算 需求: 在加减乘除运算的时候需要记录操作日志(运算前参数、运算后结果)实现方案:…