Firefly
Firefly copied to clipboard
微调Baichuan-7b过程中出现loss震荡严重而且为0的情况
操作系统:Centos7.9
GPU:A100 40GB
CUDA: 11.2
Python 3.10.12
命令如下:
torchrun --nproc_per_node=1 train_qlora.py --train_args_file train_args/qlora/baichuan-7b-sft-qlora.json
基础模型:https://huggingface.co/baichuan-inc/Baichuan-7B
数据集: https://huggingface.co/datasets/YeungNLP/moss-003-sft-data
训练参数如下:
{
"output_dir": "output/pdmi-baichuan-7b",
"model_name_or_path": "../Baichuan-7B",
"train_file": "./data/moss-003-sft-data.jsonl",
"num_train_epochs": 1,
"per_device_train_batch_size": 8,
"gradient_accumulation_steps": 2,
"learning_rate": 2e-4,
"max_seq_length": 900,
"logging_steps": 100,
"save_steps": 500,
"save_total_limit": 1,
"lr_scheduler_type": "constant_with_warmup",
"warmup_steps": 3000,
"lora_rank": 64,
"lora_alpha": 16,
"lora_dropout": 0.05,
"gradient_checkpointing": true,
"disable_tqdm": false,
"optim": "paged_adamw_32bit",
"seed": 42,
"fp16": false,
"bf16": true,
"report_to": "tensorboard",
"dataloader_num_workers": 5,
"save_strategy": "steps",
"weight_decay": 0,
"max_grad_norm": 0.3,
"remove_unused_columns": false
}
log如下:
verify trainable params the model
torch.float32 143130624 1.0
torch.float32 143130624
2023-07-20 09:41:17.643 | INFO | component.dataset:__init__:14 - Loading data: ./data/moss-003-sft-data.jsonl
2023-07-20 09:41:38.850 | INFO | component.dataset:__init__:17 - there are 1074551 data in dataset
2023-07-20 09:41:38.853 | INFO | __main__:main:186 - *** starting training ***
0%| | 0/67159 [00:00<?, ?it/s]`use_cache=True` is incompatible with gradient checkpointing. Setting `use_cache=False`...
{'loss': 1.7472, 'learning_rate': 6.666666666666667e-06, 'epoch': 0.0}
{'loss': 1.1572, 'learning_rate': 1.3333333333333333e-05, 'epoch': 0.0}
{'loss': 0.948, 'learning_rate': 2e-05, 'epoch': 0.0}
{'loss': 0.8917, 'learning_rate': 2.6666666666666667e-05, 'epoch': 0.01}
{'loss': 0.8655, 'learning_rate': 3.3333333333333335e-05, 'epoch': 0.01}
{'loss': 0.8581, 'learning_rate': 4e-05, 'epoch': 0.01}
{'loss': 0.8436, 'learning_rate': 4.666666666666667e-05, 'epoch': 0.01}
{'loss': 0.8387, 'learning_rate': 5.333333333333333e-05, 'epoch': 0.01}
{'loss': 0.8255, 'learning_rate': 6e-05, 'epoch': 0.01}
{'loss': 0.8403, 'learning_rate': 6.666666666666667e-05, 'epoch': 0.01}
{'loss': 0.8287, 'learning_rate': 7.333333333333333e-05, 'epoch': 0.02}
{'loss': 0.8719, 'learning_rate': 8e-05, 'epoch': 0.02}
{'loss': 0.9735, 'learning_rate': 8.666666666666667e-05, 'epoch': 0.02}
{'loss': 1.1046, 'learning_rate': 9.333333333333334e-05, 'epoch': 0.02}
{'loss': 1.583, 'learning_rate': 0.0001, 'epoch': 0.02}
{'loss': 3.0589, 'learning_rate': 0.00010666666666666667, 'epoch': 0.02}
{'loss': 2.5311, 'learning_rate': 0.00011333333333333334, 'epoch': 0.03}
{'loss': 0.0, 'learning_rate': 0.00012, 'epoch': 0.03}
{'loss': 0.0, 'learning_rate': 0.00012666666666666666, 'epoch': 0.03}
{'loss': 0.0, 'learning_rate': 0.00013333333333333334, 'epoch': 0.03}
{'loss': 0.0, 'learning_rate': 0.00014, 'epoch': 0.03}
{'loss': 0.0, 'learning_rate': 0.00014666666666666666, 'epoch': 0.03}
以上是什么原因呢,应该如何调整相关训练参数?
我微调llama也出现同样的问题
学习率大了2e-4 试试看1e-5开始