hiyouga / LLaMA-Factory

Unified Efficient Fine-Tuning of 100+ LLMs (ACL 2024)
https://arxiv.org/abs/2403.13372
Apache License 2.0
35.32k stars 4.36k forks source link

求助:模型qwen2.5-7b-instruct全量sft的时候,训练过程中loss突然变为0。 #6109

Open Chtholly1 opened 1 week ago

Chtholly1 commented 1 week ago

Reminder

System Info

Reproduction

''' NPROC_PER_NODE=4 NNODES=1 RANK=0 MASTER_ADDR=127.0.0.1 MASTER_PORT=29500

CUDA_VISIBLE_DEVICES=4,5,6,7 torchrun \ --nproc_per_node $NPROC_PER_NODE \ --nnodes $NNODES \ --node_rank $RANK \ --master_addr $MASTER_ADDR \ --master_port $MASTER_PORT \ src/train.py examples/train_full/qwen2_sft.yaml '''

1732238904746

Expected behavior

如图所示,一开始loss下降正常,但是会突然归零,我尝试了不同大小的学习率,目前已经改成1e-7了,模型还是会训崩。

奇怪的是我尝试了用lora方法进行sft,模型可以稳定训练,但是全量sft就会训崩。

Others

No response

JeremySun1224 commented 1 week ago

你这个应该是数值精度问题. 全量sft所有参数都被更新, 梯度范围会更大, 如果部分参数的梯度值过大, 容易导致训练不稳定, 可能表现为grad_norm为nan. LoRA仅更新低秩插入的权重参数, 梯度空间受限, 训练稳定. 可以先尝试单精度sft, 没问题再半精度并把梯度裁剪到更小的值, 比如1.0试试.

Chtholly1 commented 2 days ago

你这个应该是数值精度问题. 全量sft所有参数都被更新, 梯度范围会更大, 如果部分参数的梯度值过大, 容易导致训练不稳定, 可能表现为grad_norm为nan. LoRA仅更新低秩插入的权重参数, 梯度空间受限, 训练稳定. 可以先尝试单精度sft, 没问题再半精度并把梯度裁剪到更小的值, 比如1.0试试.

请问配置文件如何设置grad_norm值呢,说明文档里没找到