liucongg / ChatGLM-Finetuning

基于ChatGLM-6B、ChatGLM2-6B、ChatGLM3-6B模型,进行下游具体任务微调,涉及Freeze、Lora、P-tuning、全参微调等
2.63k stars 292 forks source link

有关混合精度训练的问题 #133

Open zzhdbw opened 7 months ago

zzhdbw commented 7 months ago

作者您好,阅读了您train文件,发现其中的模型加载后权重都以float16的形式存在,但是在训练过程中并没有发现您使用混合精度训练。而是使用了torch.nn.utils.clip_gradnorm(model.parameters(), 1.0)代码解决问题。 在我自己的实验代码中,发现如果模型加载成float16格式,不使用梯度裁剪就训练的情况下,一定会出现loss为nan的情况,而要使用torch的amp混合精度训练的情况下,则必须先将模型转换成float32形式,此时就涉及到了模型保存时权重过大的问题(相比于原始权重空间翻倍)。 对此我想咨询如下几个问题: 1.仅使用梯度裁剪的方式可行吗,这种方式会不会使得模型学习的不好。 2.为什么您没有使用混合精度训练,是因为没必要还是todo的原因。 3.有没有什么方法能够解决上述权重保存空间翻倍的问题。 期待您的回复。