前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大模型高效训练基础知识:梯度累积(Gradient Accumulationn)

大模型高效训练基础知识:梯度累积(Gradient Accumulationn)

作者头像
Steve Wang
发布2023-10-12 09:38:03
1.2K0
发布2023-10-12 09:38:03
举报
文章被收录于专栏:从流域到海域从流域到海域
梯度累积

梯度累积(Gradient Accumulation)的基本思想是将一次性的整批参数更新的梯度计算变为以一小步一小步的方式进行(如下图),具体而言该方法以小批次的方式进行模型前向传播和反向传播,过程中迭代计算多个小批次梯度并累加,当累积到足够多的梯度时,执行模型的优化步骤更新参数。这也是一种典型的时间换空间的做法,即我们可以实现在有限的GPU内存上更新大量参数,不过额外添加的小批次前向传播和后向传播会使得训练速度变慢一些。

在这里插入图片描述
在这里插入图片描述

参数更新方式可以使用随机梯度下降(Stochastic Gradient Descent)为例进行说明:

使用global batch(即全批次)训练时,参数更新公式为:

V_t=V_{t-1}-l_{r}*grad

简化公式,

V

表示参数集,

l_r

表示学习率,

grad

表示全批次梯度。

使用梯度累积的mini-batch(即小批次)训练时,参数更新公式为:

V_t=V_{t-1}-l_{r}*\sum_{i=0}^{N}grad_i
grad_i

表示第

i

个批次反向传播时计算的梯度。

Transformers框架中开启梯度累积非常简单,仅需在TrainingArguments内指定累积步长即可:

代码语言:javascript
复制
training_args = TrainingArguments(
    per_device_train_batch_size=1, gradient_accumulation_steps=4, gradient_checkpointing=True, **default_args
)

trainer = Trainer(model=model, args=training_args, train_dataset=ds)
result = trainer.train()
参考文献
  1. Gradient Accumulation
  2. 聊聊梯度累加(Gradient Accumulation)
  3. 梯度累积算法
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-07-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 梯度累积
  • 参考文献
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档