shibing624 / MedicalGPT

MedicalGPT: Training Your Own Medical GPT Model with ChatGPT Training Pipeline. 训练医疗大模型,实现了包括增量预训练(PT)、有监督微调(SFT)、RLHF、DPO、ORPO。
Apache License 2.0
3.24k stars 492 forks source link

用baichuan2-7B训练reward模型loss很快到0 #263

Closed a101269 closed 10 months ago

a101269 commented 10 months ago

用baichuan2-7B,bf16训练reward模型loss很快到0,但在测试集上看几个样本预测结果根本不对,这是什么原因呢 {'loss': 1.157, 'learning_rate': 4.158004158004159e-08, 'epoch': 0.0} {'loss': 0.8755, 'learning_rate': 4.158004158004159e-07, 'epoch': 0.0} {'loss': 0.9469, 'learning_rate': 8.316008316008318e-07, 'epoch': 0.0} {'loss': 0.9216, 'learning_rate': 1.2474012474012476e-06, 'epoch': 0.0} {'loss': 0.733, 'learning_rate': 1.6632016632016635e-06, 'epoch': 0.0} {'loss': 0.8583, 'learning_rate': 2.0790020790020794e-06, 'epoch': 0.01} {'loss': 0.7413, 'learning_rate': 2.4948024948024953e-06, 'epoch': 0.01} {'loss': 0.7259, 'learning_rate': 2.910602910602911e-06, 'epoch': 0.01} {'loss': 0.7363, 'learning_rate': 3.326403326403327e-06, 'epoch': 0.01} {'loss': 0.661, 'learning_rate': 3.7422037422037425e-06, 'epoch': 0.01} {'loss': 0.6297, 'learning_rate': 4.158004158004159e-06, 'epoch': 0.01} {'loss': 0.4672, 'learning_rate': 4.573804573804574e-06, 'epoch': 0.01} {'loss': 0.4273, 'learning_rate': 4.9896049896049906e-06, 'epoch': 0.01} {'loss': 0.2525, 'learning_rate': 5.405405405405406e-06, 'epoch': 0.01} {'loss': 0.1988, 'learning_rate': 5.821205821205822e-06, 'epoch': 0.01} {'loss': 0.1509, 'learning_rate': 6.237006237006238e-06, 'epoch': 0.02} {'loss': 0.102, 'learning_rate': 6.652806652806654e-06, 'epoch': 0.02} {'loss': 0.1384, 'learning_rate': 7.0686070686070696e-06, 'epoch': 0.02} {'loss': 0.0927, 'learning_rate': 7.484407484407485e-06, 'epoch': 0.02} {'loss': 0.1034, 'learning_rate': 7.9002079002079e-06, 'epoch': 0.02} {'loss': 0.0504, 'learning_rate': 8.316008316008318e-06, 'epoch': 0.02} {'loss': 0.0306, 'learning_rate': 8.731808731808733e-06, 'epoch': 0.02} {'loss': 0.0838, 'learning_rate': 9.147609147609149e-06, 'epoch': 0.02} {'loss': 0.0348, 'learning_rate': 9.563409563409564e-06, 'epoch': 0.02} {'loss': 0.0196, 'learning_rate': 9.979209979209981e-06, 'epoch': 0.02} {'loss': 0.0075, 'learning_rate': 1.0395010395010397e-05, 'epoch': 0.03} {'loss': 0.0034, 'learning_rate': 1.0810810810810812e-05, 'epoch': 0.03} {'loss': 0.0, 'learning_rate': 1.1226611226611228e-05, 'epoch': 0.03} {'loss': 0.0011, 'learning_rate': 1.1642411642411645e-05, 'epoch': 0.03} {'loss': 0.0, 'learning_rate': 1.205821205821206e-05, 'epoch': 0.03} {'loss': 0.0, 'learning_rate': 1.2474012474012476e-05, 'epoch': 0.03}

shibing624 commented 10 months ago

reward模型是回归模型,用float32

a101269 commented 10 months ago

reward模型是回归模型,用float32

为什么不能用bf16呢,求讲解

shibing624 commented 10 months ago

在预训练(Pretrain)和微调(Fine-tuning)阶段使用 bfloat16 可能不会对模型性能产生太大影响,因为在这些阶段,损失函数和梯度的计算通常涉及大量样本和较大的批次,这可以在一定程度上抵消由于使用较低精度数值表示带来的精度损失。

然而,在强化学习和模型训练中,reward 模型的计算通常涉及较少的样本和较小的批次。在这种情况下,使用 bfloat16 可能导致数值不稳定和精度损失,从而影响模型性能。这可能是您在使用 bfloat16 时遇到损失变为 0 的原因。

在实际应用中,是否可以使用 bfloat16 取决于具体任务和模型。有些任务和模型对数值精度的要求较高,因此在这些情况下,使用 bfloat16 可能会导致性能下降。而对于其他任务和模型,使用 bfloat16 可能不会对性能产生太大影响。因此,在实际应用中,建议根据任务和模型的需求来选择合适的数值精度。

总之,虽然 bfloat16 可以在预训练和微调阶段使用,但在某些情况下,如强化学习中的 reward 模型计算,使用 bfloat16 可能会导致数值不稳定和精度损失。为了确保模型性能,建议根据任务和模型需求选择合适的数值精度。

a101269 commented 10 months ago

在预训练(Pretrain)和微调(Fine-tuning)阶段使用 bfloat16 可能不会对模型性能产生太大影响,因为在这些阶段,损失函数和梯度的计算通常涉及大量样本和较大的批次,这可以在一定程度上抵消由于使用较低精度数值表示带来的精度损失。

然而,在强化学习和模型训练中,reward 模型的计算通常涉及较少的样本和较小的批次。在这种情况下,使用 bfloat16 可能导致数值不稳定和精度损失,从而影响模型性能。这可能是您在使用 bfloat16 时遇到损失变为 0 的原因。

在实际应用中,是否可以使用 bfloat16 取决于具体任务和模型。有些任务和模型对数值精度的要求较高,因此在这些情况下,使用 bfloat16 可能会导致性能下降。而对于其他任务和模型,使用 bfloat16 可能不会对性能产生太大影响。因此,在实际应用中,建议根据任务和模型的需求来选择合适的数值精度。

总之,虽然 bfloat16 可以在预训练和微调阶段使用,但在某些情况下,如强化学习中的 reward 模型计算,使用 bfloat16 可能会导致数值不稳定和精度损失。为了确保模型性能,建议根据任务和模型需求选择合适的数值精度。

感谢,用FP32可以了