PyTorch调用trainer.fit()报CUDA out of memory错误解决方案求助
解决方案
首先你遇到的AttributeError: module 'torch.cuda' has no attribute 'clear_memory_allocated'属于正常情况:这个接口是PyTorch早期版本的废弃接口,早已被移除,不需要再尝试调用。
针对batch_size已经设为1仍然爆显存的问题,按优先级尝试以下方案即可:
- 缩短输入序列最大长度:BERT默认支持的最大序列长度为512,你可以根据任务场景调整tokenizer的
max_length参数,截断过长的输入,比如设置为128或256,这是降低显存占用最有效的手段之一。 - 开启梯度检查点:在初始化
pl.Trainer时增加参数gradient_checkpointing=True,该功能会通过牺牲部分训练速度的代价,大幅降低模型训练过程中的显存占用。 - 开启混合精度训练:在初始化
pl.Trainer时增加参数precision=16,Colab提供的T4/P100显卡均支持半精度训练,开启后显存占用可降低约50%,训练速度也会有所提升。 - 调整显存清空的调用位置:你当前注释的
torch.cuda.empty_cache()放在了Trainer初始化之后,建议将其移到模型实例化、Trainer初始化之前执行,提前释放无用显存。 - 检查数据集加载逻辑:确认你的DataModule没有将全量训练/验证数据提前加载到GPU显存中,正确的逻辑是仅在batch迭代时,将单批数据传到GPU计算。
- 替换为轻量BERT变体:如果上述方案仍不满足需求,可以将
bert-base-cased替换为参数量更小的预训练模型,比如distilbert、bert-small,参数规模仅为base版本的50%-70%,显存占用会大幅降低,精度下降幅度很小。 - 更换更高配置的GPU:如果是免费版Colab,分配的显存仅12G左右,你可以尝试重启运行时重新分配GPU,或者升级到Colab Pro获取显存更大的T4/P100/V100显卡。
内容的提问来源于stack exchange,提问作者user16341274
相关产品推荐
相关产品推荐

