1 Matching Annotations
  1. Nov 2023
    1. it doesn’t implement gradient accumulation

      梯度累加(Gradient Accumulation)是一种常用的深度学习技术,它主要用于解决显存不足的问题,特别是在训练大模型或使用大批量数据时。这种技术的基本思想是,将一个大的批量数据分成多个小批量,然后在每个小批量上分别计算梯度,累加这些梯度,然后使用累加后的梯度来更新模型参数[1]。

      举个例子来说,假设你有一个批量大小为10的数据集,但是由于显存限制,你不能一次性将所有10个样本加载到内存中进行训练。这时,你可以设置gradient_accumulation_steps=2,这样新的批量大小就变为10/2=5,也就是说,你需要运行两次,才能在内存中放入10条数据。尽管你需要运行两次,但是梯度更新的次数仍然是100次,这意味着你的训练步数变为200[2]。

      再举一个更具体的例子。假设你的batch_size原本是16,也就是一次梯度更新用的是16条数据。但如果设置gradient_accumulation_steps=4,那么参数只有在步数是4的倍数时才会更新,梯度才会重置。这实际上就是利用了64条数据,取64条数据的平均梯度来更新参数[3]。

      需要注意的是,梯度累加并不是累加损失,而是根据损失得到的梯度[3]。