现象 | 如果在微调 chatglm3-6b 模型时,执行 trainer.train() 后瞬间出现 “OutOfMemoryError: CUDA out of memory.”(显存不足)错误,请考虑指定一个旧版本进行微调。 |
原因 | 从2024年2月6日后发布的 chatglm3-6b 模型开始,调用 torch.utils.checkpoint.checkpoint() 方法时,use_reentrant 参数的默认值由原来的 True 改为 False。这导致在训练时保存更多的梯度参数以加快反向传播计算速度,同时占用更多显存。此外,新代码覆盖了基类 PreTrainedModel 中的 gradient_checkpointing_enable() 方法,导致无法通过梯度检查点来减少显存占用。有关详细的代码更改,请查看 Commit 37fe000。 |
方案 | 在加载 Tokenizer 和 Model 时,通过添加 revision 参数指定一个旧版本。示例代码如下: \n", + "tokenizer = AutoTokenizer.from_pretrained(......, revision='b098244') \n", + "model = AutoModel.from_pretrained(......, revision='b098244') |
现象 | 如果在微调 chatglm3-6b 模型时,执行 trainer.train() 后瞬间出现 “OutOfMemoryError: CUDA out of memory.”(显存不足)错误,请考虑指定一个旧版本进行微调。 |
原因 | 从2024年2月6日后发布的 chatglm3-6b 模型开始,调用 torch.utils.checkpoint.checkpoint() 方法时,use_reentrant 参数的默认值由原来的 True 改为 False。这导致在训练时保存更多的梯度参数以加快反向传播计算速度,同时占用更多显存。此外,新代码覆盖了基类 PreTrainedModel 中的 gradient_checkpointing_enable() 方法,导致无法通过梯度检查点来减少显存占用。有关详细的代码更改,请查看 Commit 37fe000。 |
方案 | 在加载 Tokenizer 和 Model 时,通过添加 revision 参数指定一个旧版本。示例代码如下: \n", + "tokenizer = AutoTokenizer.from_pretrained(......, revision='b098244') \n", + "model = AutoModel.from_pretrained(......, revision='b098244') |