RuntimeError: value cannot be converted to type at::BFloat16 without overflow
我用的是transformers==4.42.3,出错文件是model_qwen2.py 1127行,当Qwen2 bfloat16时不出错,量化后出错,训练和推理都是。然而服务器和本地对比出错部分的代码,发现俩版本都是4.42.3,结果文件不一样。太啥比了,不知道怎么回事,输出半天也没发现哪里有问题。由于这个py文件我已经全读过了,出错代码我却从来没见过,遂卸载transformers重装。
第一次重装后,运行通过,第二次运行又出现该错误,观察model_qwen2.py发现又是错误代码。遂二度重装,这次长了个心眼,盯紧了这个文件,结果跟薛定谔的猫一样,一直看着就没问题,文件也和本地的一样了,不是错误的那个版本了。
吃屎一样。
总之,重装transformers,怀疑是老版本Qwen2代码的bug。
Pytorch RuntimeError: Expected tensor for argument #1 ‘indices’ to have one of the following scalar types: Long, Int; but got torch.FloatTenso instead
这句错在loss计算中从检查点重新计算embedding的过程。
敬告,所有数值错误,管他输出多少,先把输出打印出来看看错误值,硬扣脑袋改永远不知道问题在哪。
我出错的代码在某个embedding函数,传参好几个。报错说第1个有问题,那就是第2个传参,我这里叫input。一打印,输出个空list。
问题找到了,是我读数据时会删除过长的数据,但是写错代码了,出错就会硬返回一个初始化的空list。
突然出现一个CUDA out of memory 大到300多G
错误代码在casual_attention处,意识到是数据处理出错了,肯定有一个巨tm长的句子。经检查果然。
所以说防御性编程很重要,按MAX_LENGTH分割完文本了,最后再写代码检查一遍是很重要的。