🗒️Lora 微调时的显存占用
2024-9-23
| 2024-9-23
0  |  Read Time 0 min
type
status
date
slug
summary
tags
category
icon
password
comment
😀
和全量训练相比,LoRA在显存占用和计算量上到底省在哪?
 

全量训练

设模型参数为1B,fp32精度下对应4G显存,而梯度、Adam的一阶、二阶动量显存占用量都和参数本身相等,因此不计数据和hidden states的话,显存占用为4x4=16G。

Lora 微调

注意,尽管LoRA这种参数高效微调(PEFT)方法冻结了主干参数,但这些不更新的主干参数还是要参与前向计算,而且被冻结住的主干参数也要计算相应的梯度(不然处在同一个计算图中的LoRA也没法计算准确梯度)。
  • 参数部分:(1+m%)x
  • 梯度部分:m%x
  • 优化器状态部分:2m%x.
加起来就是(1+4m%)x。m=1%时,最终的显存占用就从4x降低到了1.04x
所以,“LoRA为什么能对训练加速”这个问题的最终答案是:
  • 因为被冻结住的主干模型参数不用存储相应的梯度和优化器状态,显存占用降低,可以用更多显存装输入数据和hidden states,相同硬件下batch size可以开大;
  • 从计算量来看,反向传播时只需要求LoRA权重对应的梯度,优化器只需要计算LoRA权重对应的一小部分权重的更新量并加到原参数上,运算次数降低。

链接:

https://www.zhihu.com/question/649223503/answer/3439038568
  • 深度学习
  • LLM
  • Lora
  • Yolov8 数据增强方式Python常用知识总结
    Loading...
    Catalog