智能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 所示。 图片 2
## 新闻 - **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(优化