Closed listwebit closed 4 months ago
--nproc_per_node 8 改为 --nproc_per_node 1, 不要数据并行,否则会显存不够。
你是A800机器,可以qlora训练,单机8卡就能跑。看下wiki:https://github.com/shibing624/MedicalGPT/wiki/%E8%AE%AD%E7%BB%83%E5%8F%82%E6%95%B0%E8%AF%B4%E6%98%8E
你直接用8卡跑就可以成功。
export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
python pretraining.py \
--model_type auto \
--model_name_or_path ../Yi-34B-Chat \
--train_file_dir ./data/pretrain \
--validation_file_dir ./data/pretrain \
--per_device_train_batch_size 2 \
--per_device_eval_batch_size 2 \
--do_train \
--do_eval \
--use_peft False \
--seed 42 \
--max_train_samples 10000 \
--max_eval_samples 10 \
--num_train_epochs 0.5 \
--learning_rate 2e-4 \
--warmup_ratio 0.05 \
--weight_decay 0.01 \
--logging_strategy steps \
--logging_steps 10 \
--eval_steps 100 \
--evaluation_strategy steps \
--save_steps 500 \
--save_strategy steps \
--save_total_limit 13 \
--gradient_accumulation_steps 1 \
--preprocessing_num_workers 10 \
--block_size 512 \
--group_by_length True \
--output_dir outputs-pt-Yi-v4 \
--overwrite_output_dir \
--ddp_timeout 30000 \
--logging_first_step True \
--target_modules all \
--torch_dtype bfloat16 \
--bf16 \
--device_map auto \
--report_to tensorboard \
--ddp_find_unused_parameters False \
--gradient_checkpointing True \
--cache_dir ./cache
1.以上命令模型自动执行流水线并行。 2.还可以加上qlora节约显存。
徐老师,这种方式是可以在单台机器上跑起来,但是在这种方式 GPU使用效率太低了,同一时刻只有一块卡在工作,实际训练中不可接收的,而且我有多个机器,想同时利用起来,想用deepspeed方式,老师能帮忙解决一下下面的问题吗?是不是目前代码不支持呀。
1.按照您文档说明:30B模型全量参数更新,需要600GB的显存,我现在两个机器1280G内存,理论上应该可以跑起来的,是什么原因跑不起了呢 2.按照您的说明我已经使用了模型并行:--deepspeed deepspeed_zero_stage3_config.json ,但是两个机器还是报GPU不足 3.老师我想用全量参数更新,不想用qlora训练,或者lora等其他方式,2台机器能不能跑起来呢,是代码问题还是,机器资源不足呢,如果是机器资源不足,需要多少天机器呢,会不会增加机器最后还是报GPU资源不足呢 4.您回复:“-nproc_per_node 8 改为 --nproc_per_node 1, 不要数据并行,否则会显存不够“ ,nproc_per_node 从8改为1,不就是只占用了1个GPU卡,我试了试,更跑不起来,用模型并行指的就是:--deepspeed deepspeed_zero_stage3_config.json 把,我试试还是报GPU不足。
流水线并行没有gpu利用率低的情况,也不是只有一块卡在工作,它是最大化gpu利用率,多个gpu协同工作的方式。transformers官方支持的就是流水线并行。
你有2个机器,就把数据分成2份跑就可以。
如果想多机多卡,去看看deepspeed,不要问环境问题了,不是这个项目的内容。
徐老师,这种方式是可以在单台机器上跑起来,但是在这种方式 GPU使用效率太低了,同一时刻只有一块卡在工作,实际训练中不可接收的,而且我有多个机器,想同时利用起来,想用deepspeed方式,老师能帮忙解决一下下面的问题吗?是不是目前代码不支持呀。
1.按照您文档说明:30B模型全量参数更新,需要600GB的显存,我现在两个机器1280G内存,理论上应该可以跑起来的,是什么原因跑不起了呢 2.按照您的说明我已经使用了模型并行:--deepspeed deepspeed_zero_stage3_config.json ,但是两个机器还是报GPU不足 3.老师我想用全量参数更新,不想用qlora训练,或者lora等其他方式,2台机器能不能跑起来呢,是代码问题还是,机器资源不足呢,如果是机器资源不足,需要多少天机器呢,会不会增加机器最后还是报GPU资源不足呢 4.您回复:“-nproc_per_node 8 改为 --nproc_per_node 1, 不要数据并行,否则会显存不够“ ,nproc_per_node 从8改为1,不就是只占用了1个GPU卡,我试了试,更跑不起来,用模型并行指的就是:--deepspeed deepspeed_zero_stage3_config.json 把,我试试还是报GPU不足。
请问您这个问题解决了吗?我现在也发现显存明显够用的情况下出现了oom的错误。同样,如果不用deepspeed直接跑的话训练会很慢,同一时刻只有一张卡占用达到100%,其他都是0。
可以自己试试magetrol , deepspeed等并行工具加速,我对这块不熟悉,我这边用A100跑挺快的。
你好,这个V100 16G单卡加载不了qwen7b进行DPO,怎样增加代码可是使用deepspeed zreo3?
加zero3的config配置运行就可以。
Describe the bug
机器: 2个机器,每个 8卡 8*80G 的 A800 共有:1280G的显存 使用deepspeed方式,stage2和stage3都报出GPU不足。 预训练方式:全量更新模型 使用模型:Yi-34B-Chat \ 下面有run_pt.sh脚本信息、ds_report信息,错误信息、并且deepspeed_zero_stage2_config.json 内容已经修改了(不知道改的对不对):
run_pt.sh脚本: 主机器:
run_pt.sh脚本 副机器:
两个机器的ds_report相同如下:
最后两个机器都报错GPU内存不足:
请大佬指明方向,谢谢