Baichuan-7B [Question] Lora微调训练的时候报错

qlfbtfca  于 2个月前  发布在  其他
关注(0)|答案(3)|浏览(31)

所需先决条件

问题

回溯(最近一次调用):
文件 "/mnt/workspace/LLaMA-Efficient-Tuning/src/train_sft.py",第97行,main()函数
文件 "/mnt/workspace/LLaMA-Efficient-Tuning/src/train_sft.py",第69行,main函数中的 main()
train_result = trainer.train()
文件 "/home/pai/envs/llama_etuning/lib/python3.10/site-packages/transformers/trainer.py",第1645行,train函数
返回 inner_training_loop(
文件 "/home/pai/envs/llama_etuning/lib/python3.10/site-packages/transformers/trainer.py",第1987行,inner_training_loop函数中的 inner_training_loop
self.accelerator.clip_grad_norm
(
文件 "/home/pai/envs/llama_etuning/lib/python3.10/site-packages/accelerate/accelerator.py",第1893行,clip_grad_norm_函数
self.unscale_gradients()
文件 "/home/pai/envs/llama_etuning/lib/python3.10/site-packages/accelerate/accelerator.py",第1856行,unscale_gradients函数中的 self.scaler.unscale_(opt)
文件 "/home/pai/envs/llama_etuning/lib/python3.10/site-packages/torch/cuda/amp/grad_scaler.py",第275行,unscale_ 函数
引发 RuntimeError("unscale_() 在自上次更新以来已经在此优化器上调用过。")
RuntimeError: unscale_() 在自上次更新以来已经在此优化器上调用过。

gzjq41n4

gzjq41n41#

这个错误是由于在优化器上调用了unscale_()方法,但该方法已经在上次更新之后被调用过了。为了解决这个问题,你可以尝试以下方法:

  1. 确保在每次更新梯度之前都调用scaler.scale(loss),并在更新梯度之后调用scaler.step(opt)scaler.update()
  2. 如果你使用的是混合精度训练(mixed precision training),请确保在每次更新梯度之前都调用scaler.scale(loss),并在更新梯度之后调用scaler.step(opt)scaler.update()
  3. 如果问题仍然存在,可以尝试使用不同的优化器或者调整学习率等超参数。
enyaitl3

enyaitl32#

请参考这篇:huggingface/transformers#24245,看起来像是transformers某个版本的bug,将其替换为评论中提到的内容。
!pip install git+https://github.com/huggingface/transformers@de9255de27abfcae4a1f816b904915f0b1e23cd9
就可以了。

pkln4tw6

pkln4tw63#

换成指定的transformers==4.29.1就好了

相关问题