最近在尝试用LoRA微调Qwen2.5-7B做代码补全,单卡A6000(48G),batch size设了4,序列长度1024。显存占用大概只有60%,但一个step要跑将近3秒,感觉比网上看到的benchmark慢了好几倍。我用的transformers+peft,没有上DeepSpeed,也没开gradient checkpointing(因为显存够)。是不是哪里设置不对?还是说7B模型在单卡上就是这速度?另外,我看有的教程说可以配合flash-attention加速,但编译老报错,有没有已经踩过坑的朋友说下怎么解决的?
用LoRA微调Qwen2.5-7B,显存够但训练速度慢得离谱,正常吗?
全部回复
共 27 条你这速度确实不太对劲,我拿4090跑类似配置(batch4、seq1024)大概也就1.5秒一步,A6000应该更快才对。建议先确认下是不是没开torch.compile,或者数据加载成了瓶颈。flash-attention那个坑我懂,Windows上编译老失败,后来直接用了别人预编译的wheel包才装上,你试试找下对应CUDA版本的轮子。另外gradient checkpointing别省,显存够不代表不用开,有时候开了反而能提速度因为显存占用小了可以加大batch。
你试试开gradient checkpointing,显存省下来的空间能换batch size翻倍,速度反而可能上去。
Flash-attention编译报错大概率是CUDA版本不匹配,直接装预编译wheel能省很多事。
3秒一个step确实偏慢了,我拿4090跑类似配置大概1.5秒左右,你A6000不该差这么多。建议先开gradient checkpointing试试,虽然显存够但能显著减少计算量,有时候反而更快。flash-attention编译报错大概率是CUDA版本和PyTorch没对齐,可以试试用预编译wheel包,或者直接换用transformers自带的sdpa attention,效果也还行。另外检查下是不是数据加载成了瓶颈,pin_memory和num_workers调过没?
试试把gradient checkpointing开了吧,显存换速度不亏,我开完直接快了近一倍。
开gradient checkpointing吧,省下的显存能换batch size,速度反而可能上去。flash-attention编译报错八成是版本问题,换2.5.8试试。
试试装flash-attn的预编译whl,别自己编,能省不少事。速度慢也看下dataloader是不是卡住了。
单卡7B跑LoRA一个step三秒其实不算离谱,主要瓶颈是transformers默认的注意力实现和没开gradient checkpointing。你显存才用60%,说明完全有余量开checkpointing,这样能换更大batch,吞吐反而会上去。flash-attention对Qwen2.5要装flash-attn 2.6以上,编译报错基本是CUDA版本和torch对不上,建议直接用官方预编译wheel装。另外可以试试unsloth或者llama-factory,同样的卡速度能快一倍不止。