为何Falcon模型QLoRA微调时需设置use_cache=False?
为什么Falcon模型QLoRA微调时要关闭
use_cache? 我在学习Falcon模型的QLoRA微调教程时,发现代码里设置了model.config.use_cache = False。正常情况下use_cache是用来复用解码器历史计算结果,加速因果语言模型运算的,那为啥微调时要关掉这个功能?
核心原因如下:
- 训练场景不需要缓存推理逻辑:
use_cache的核心作用是在**文本生成(推理阶段)**时,逐token生成过程中缓存之前层的key/value张量,避免重复计算。但微调是训练过程,输入的是完整的样本序列,模型需要处理序列的每个位置,完全用不到历史缓存,开着纯属多余。 - 大幅节省显存开销:开启
use_cache会额外存储每一层的key/value数据,对于Falcon这类大模型来说,这部分显存占用相当可观。QLoRA本身就是为了低显存微调设计的,关掉缓存能释放更多显存,要么能调大batch size提升训练效率,要么能避免显存不足(OOM)的问题。 - 规避训练中的潜在问题:部分PEFT微调方法(比如QLoRA)会冻结模型主参数只训练适配器,开启缓存可能引发张量维度不匹配、梯度计算异常等隐性bug,关掉能减少这类不必要的麻烦。
- 适配训练框架逻辑:Falcon模型在Hugging Face Trainer的训练流程中,开启
use_cache可能和训练时的前向传播逻辑冲突,官方示例统一关闭是为了保证训练过程的稳定性。
内容的提问来源于stack exchange,提问作者Charlie Parker
相关产品推荐
相关产品推荐

