智能AI
morning
GitHub 热门项目:GaLore
2026-05-09
1 阅读
GitHub Trending
? GitHub 项目:GaLore
?仓库地址:https://github.com/jiaweizzhao/GaLore
⭐ 星级:1691 | ? 作者:jiaweizzhao
? 项目描述:GaLore:通过梯度低秩投影进行内存高效的 LLM 训练
===================================================
? 自述文件内容:
===================================================
# 嘉洛尔
此存储库包含 GaLore 算法的预发布版本,该算法由 [GaLore: Memory-Efficient LLM Training by Gradient Low-Rank Projection](https://arxiv.org/abs/2403.03507) 提出。
梯度低秩投影 (GaLore) 是一种内存高效的低秩训练策略,它允许“全参数”学习,但比常见的低秩适应方法(例如 LoRA)更“内存高效”。
作为一种梯度投影方法,GaLore 与优化器的选择无关,只需两行代码即可轻松插入现有优化器,如下面的算法 1 所示。
## 新闻
- **2024-09-01**:我们正在开发 GaLore 2,这是 GaLore 的更高效且更易于访问的版本。请继续关注!
- **2024-07-11**:我们发布了 Q-GaLore:使用 INT4 投影的量化 GaLore。 [[论文](https://arxiv.org/abs/2407.08296)] [[代码](https://github.com/VITA-Group/Q-GaLore)]
- **2024-07-01**:GaLore 以口头形式被 ICML 2024 接受!
- **2024-04-20**:请加入我们的 Slack 工作区 [GaLore-Social](https://join.slack.com/t/galore-social/shared_invite/zt-2ev152px0-DguuQ5WRTLQjtq2C88HBvQ) 与我们和社区讨论。
## 安装
### 安装 GaLore 优化器
从 pip 安装:
````bash
pip 安装 galore-torch
````
或者如果您想从源安装:
````bash
git 克隆 git@github.com:jiaweizzhao/GaLore.git
cd嘉洛尔
pip install -e 。
````
### 安装实验依赖项
````bash
pip install -r exp_requirements.txt
````
我们的实验脚本在 Python 3.8 和 PyTorch 2.1 上进行了测试。
## 用法
### 使用 GaLore 优化器节省优化器内存
````蟒蛇
从 galore_torch 导入 GaLoreAdamW、GaLoreAdamW8bit、GaLoreAdafactor
# 将参数组定义为 galore_params 和 non_galore_params
param_groups = [{'params': non_galore_params},
{'params':galore_params,'rank':128,'update_proj_gap':200,'scale':0.25,'proj_type':'std'}]
优化器 = GaLoreAdamW(param_groups, lr=0.01)
````
### 使用每层权重更新节省权重梯度内存
我们使用 [PyTorch](https://pytorch.org/tutorials/intermediate/optimizer_step_in_backward_tutorial.html) (`torch>=2.1.0`) 提供的 `register_post_accumulate_grad_hook` 来启用每层权重更新。示例如下所示:
````蟒蛇
# 为每个参数p定义一个优化器,并将它们存储在optimizer_dict中
对于 model.parameters() 中的 p:
如果 p.requires_grad:
Optimizer_dict[p] = GaLoreAdamW([{'params': p, 'rank': 128, 'update_proj_gap': 200, 'scale': 0.25, 'proj_type': 'std'}], lr=0.01)
# 定义一个钩子函数,用于在向后传递过程中更新参数 p
def optimizer_hook(p):
如果 p.grad 为 None:
返回
Optimizer_dict[p].step()
Optimizer_dict[p].zero_grad()
# 将钩子注册到每个参数上
对于 model.parameters() 中的 p:
如果 p.requires_grad:
p.register_post_accumulate_grad_hook(优化