[THUDM/ChatGLM-6B]用ptv2微调,多卡跑,为啥第一张卡显存占满了,报oom

2024-06-12 373 views
8

由于用量化的模型效果不佳,尝试用的fp16训,在8*v100出现,第一张卡报oom,但其他卡显存占用不高,有什么好的解决方式

v100 是否上可以训 fp16

run train.sh

Environment
8*v100
cuda 11.2
batch size 1

回答

0

第一张卡应该有很多进程,看网上说是torch.load的锅,但是改了之后,依然这样,是框架哪里问题?

2

同问,我有8张V100的卡,用nvlink互联的,目前训练只能用一张卡,大于两张卡就报错,什么原因?是否需要开启nvlink功能?若是,如何开启? 补充:前面基于两张pcie的v100卡训练,两张可以运行,但是训练性能因为有两卡之间的通讯开销反而不如一张卡。 谢谢!

4

如果第一张卡有太多进程占用显存,检查下你是不是从git安装的transformers,不能装最新的4.29.0.dev,这个版本就会出现核0多出来3个进程

5

同问,我有8张V100的卡,用nvlink互联的,目前训练只能用一张卡,大于两张卡就报错,什么原因?是否需要开启nvlink功能?若是,如何开启? 补充:前面基于两张pcie的v100卡训练,两张可以运行,但是训练性能因为有两卡之间的通讯开销反而不如一张卡。 谢谢!

代码的问题,可以看看lora版本的,那个项目有多卡的,也同样有p-tuning多卡版本的

6

@YSLLYW 谢谢大拿!

4

https://github.com/hiyouga/ChatGLM-Efficient-Tuning 使用上述仓库的命令即可,实测每个v100卡的显存分配大体一致 accelerate config # configure the environment accelerate launch src/finetune.py \ --do_train \ --dataset alpaca_gpt4_zh \ --finetuning_type lora \ --output_dir path_to_checkpoint \ --per_device_train_batch_size 4 \ --gradient_accumulation_steps 4 \ --lr_scheduler_type cosine \ --logging_steps 10 \ --save_steps 1000 \ --learning_rate 5e-5 \ --num_train_epochs 1.0 \ --fp16 \ --ddp_find_unused_parameters False