Closed zzisbeauty closed 10 months ago
老师,上面的问题我更改了 .sh 文件的配置文件如下:
也就是我把第一行的 nproc_per_node 从最初的1 改成 了 4 (因为我单机 4 卡)
#继续sft训练Chinese-Alpaca模型的LoRA权重,和训练全新的LoRa参数不一样,因为这种方案一些参数是取消掉了的 - 有验证数据
torchrun --nnodes 1 --nproc_per_node 4 run_clm_sft_with_peft.py \
--deepspeed ${deepspeed_config_file} \
--model_name_or_path ${pretrained_model} \
--tokenizer_name_or_path ${chinese_tokenizer_path} \
--dataset_dir ${dataset_dir} \
--validation_split_percentage 0.001 \
--per_device_train_batch_size ${per_device_train_batch_size} \
--per_device_eval_batch_size ${per_device_eval_batch_size} \
--do_train \
--do_eval \
--seed $RANDOM \
--fp16 \
--num_train_epochs 1 \
--lr_scheduler_type cosine \
--learning_rate ${lr} \
--warmup_ratio 0.03 \
--weight_decay 0 \
--logging_strategy steps \
--logging_steps 10 \
--save_strategy steps \
--save_total_limit 3 \
--evaluation_strategy steps \
--eval_steps 100 \
--save_steps 200 \
--gradient_accumulation_steps ${gradient_accumulation_steps} \
--preprocessing_num_workers 8 \
--max_seq_length 512 \
--output_dir ${output_dir} \
--overwrite_output_dir \
--ddp_timeout 30000 \
--logging_first_step True \
--torch_dtype float16 \
--validation_file ${validation_file} \
--peft_path ${peft_model} \
--gradient_checkpointing \
--ddp_find_unused_parameters False
改为如上配置后,程序不报错,但是爆出来了 OOM的问题如下:
这个问题让我非常奇怪,这个SFT明明是一个LoRa指令微调。为什么我单机4张4090都跑不起来,都爆出显存溢出的问题呢?
老师,上面的问题我更改了 .sh 文件的配置文件如下:
也就是我把第一行的 nproc_per_node 从最初的1 改成 了 4 (因为我单机 4 卡)
#继续sft训练Chinese-Alpaca模型的LoRA权重,和训练全新的LoRa参数不一样,因为这种方案一些参数是取消掉了的 - 有验证数据 torchrun --nnodes 1 --nproc_per_node 4 run_clm_sft_with_peft.py \ --deepspeed ${deepspeed_config_file} \ --model_name_or_path ${pretrained_model} \ --tokenizer_name_or_path ${chinese_tokenizer_path} \ --dataset_dir ${dataset_dir} \ --validation_split_percentage 0.001 \ --per_device_train_batch_size ${per_device_train_batch_size} \ --per_device_eval_batch_size ${per_device_eval_batch_size} \ --do_train \ --do_eval \ --seed $RANDOM \ --fp16 \ --num_train_epochs 1 \ --lr_scheduler_type cosine \ --learning_rate ${lr} \ --warmup_ratio 0.03 \ --weight_decay 0 \ --logging_strategy steps \ --logging_steps 10 \ --save_strategy steps \ --save_total_limit 3 \ --evaluation_strategy steps \ --eval_steps 100 \ --save_steps 200 \ --gradient_accumulation_steps ${gradient_accumulation_steps} \ --preprocessing_num_workers 8 \ --max_seq_length 512 \ --output_dir ${output_dir} \ --overwrite_output_dir \ --ddp_timeout 30000 \ --logging_first_step True \ --torch_dtype float16 \ --validation_file ${validation_file} \ --peft_path ${peft_model} \ --gradient_checkpointing \ --ddp_find_unused_parameters False
改为如上配置后,程序不报错,但是爆出来了 OOM的问题如下:
这个问题让我非常奇怪,这个SFT明明是一个LoRa指令微调。为什么我单机4张4090都跑不起来,都爆出显存溢出的问题呢?
把之前的程序进程都清掉看看是否是这个原因
老师,上面的问题我更改了 .sh 文件的配置文件如下: 也就是我把第一行的 nproc_per_node 从最初的1 改成 了 4 (因为我单机 4 卡)
#继续sft训练Chinese-Alpaca模型的LoRA权重,和训练全新的LoRa参数不一样,因为这种方案一些参数是取消掉了的 - 有验证数据 torchrun --nnodes 1 --nproc_per_node 4 run_clm_sft_with_peft.py \ --deepspeed ${deepspeed_config_file} \ --model_name_or_path ${pretrained_model} \ --tokenizer_name_or_path ${chinese_tokenizer_path} \ --dataset_dir ${dataset_dir} \ --validation_split_percentage 0.001 \ --per_device_train_batch_size ${per_device_train_batch_size} \ --per_device_eval_batch_size ${per_device_eval_batch_size} \ --do_train \ --do_eval \ --seed $RANDOM \ --fp16 \ --num_train_epochs 1 \ --lr_scheduler_type cosine \ --learning_rate ${lr} \ --warmup_ratio 0.03 \ --weight_decay 0 \ --logging_strategy steps \ --logging_steps 10 \ --save_strategy steps \ --save_total_limit 3 \ --evaluation_strategy steps \ --eval_steps 100 \ --save_steps 200 \ --gradient_accumulation_steps ${gradient_accumulation_steps} \ --preprocessing_num_workers 8 \ --max_seq_length 512 \ --output_dir ${output_dir} \ --overwrite_output_dir \ --ddp_timeout 30000 \ --logging_first_step True \ --torch_dtype float16 \ --validation_file ${validation_file} \ --peft_path ${peft_model} \ --gradient_checkpointing \ --ddp_find_unused_parameters False
改为如上配置后,程序不报错,但是爆出来了 OOM的问题如下:
这个问题让我非常奇怪,这个SFT明明是一个LoRa指令微调。为什么我单机4张4090都跑不起来,都爆出显存溢出的问题呢?
把之前的程序进程都清掉看看是否是这个原因
清理了,依然起不来。
老师,上面的问题我更改了 .sh 文件的配置文件如下: 也就是我把第一行的 nproc_per_node 从最初的1 改成 了 4 (因为我单机 4 卡)
#继续sft训练Chinese-Alpaca模型的LoRA权重,和训练全新的LoRa参数不一样,因为这种方案一些参数是取消掉了的 - 有验证数据 torchrun --nnodes 1 --nproc_per_node 4 run_clm_sft_with_peft.py \ --deepspeed ${deepspeed_config_file} \ --model_name_or_path ${pretrained_model} \ --tokenizer_name_or_path ${chinese_tokenizer_path} \ --dataset_dir ${dataset_dir} \ --validation_split_percentage 0.001 \ --per_device_train_batch_size ${per_device_train_batch_size} \ --per_device_eval_batch_size ${per_device_eval_batch_size} \ --do_train \ --do_eval \ --seed $RANDOM \ --fp16 \ --num_train_epochs 1 \ --lr_scheduler_type cosine \ --learning_rate ${lr} \ --warmup_ratio 0.03 \ --weight_decay 0 \ --logging_strategy steps \ --logging_steps 10 \ --save_strategy steps \ --save_total_limit 3 \ --evaluation_strategy steps \ --eval_steps 100 \ --save_steps 200 \ --gradient_accumulation_steps ${gradient_accumulation_steps} \ --preprocessing_num_workers 8 \ --max_seq_length 512 \ --output_dir ${output_dir} \ --overwrite_output_dir \ --ddp_timeout 30000 \ --logging_first_step True \ --torch_dtype float16 \ --validation_file ${validation_file} \ --peft_path ${peft_model} \ --gradient_checkpointing \ --ddp_find_unused_parameters False
改为如上配置后,程序不报错,但是爆出来了 OOM的问题如下:
这个问题让我非常奇怪,这个SFT明明是一个LoRa指令微调。为什么我单机4张4090都跑不起来,都爆出显存溢出的问题呢?
把之前的程序进程都清掉看看是否是这个原因
清理了,依然起不来。
1.方式1:看报错信息 if reserver_mem > allocated_mem ... 你的reserver_mem确实远远大于 allocated_mem
可以试试按照报错建议的那样去做
2.开offload_optimizer
3.开zero3
3.开zero3
老师我有以下几个问题,请老师再指点一下我:
我确实用不太好这些配置与代码。因此期待得到您的指点。感恩。 @xiaoqi25478
3.开zero3
老师我有以下几个问题,请老师再指点一下我:
- 关于老师说的第一点方案,我找到了这样的一个参考给出了一些设置方法:连接 。但是我没看懂什么是保留内存远远大于已分配内存。也就是说报错日志里,哪个数字是个保留内存,哪个数字是个已分配内存,您才确认了我的保留内存确实远远大于已分配内存。
- 关于您说的 2 方案:开offload_optimizer,我不清楚这个参数是什么意思,但是我看到 deepspeed.config 好像是关于这个参数的设置的,这个配置文件的文件包含 *no_offload.json。但是我打开了这个文件,不清楚该如何设置您说的这个 offload_optimizer 参数。
- 关于您说的第三点方案:开zero3,又是在哪里配置呢?
我确实用不太好这些配置与代码。因此期待得到您的指点。感恩。 @xiaoqi25478
zero2配置:https://gitee.com/xiaoqi25478/Chinese-LLaMA-Alpaca-1_mlu/blob/main/scripts/training/ds_zero2_no_offload.json zero3配置:https://gitee.com/xiaoqi25478/Chinese-LLaMA-Alpaca-1_mlu/blob/main/scripts/training/ds_zero3_no_offload.json
3.开zero3
老师我有以下几个问题,请老师再指点一下我:
- 关于老师说的第一点方案,我找到了这样的一个参考给出了一些设置方法:连接 。但是我没看懂什么是保留内存远远大于已分配内存。也就是说报错日志里,哪个数字是个保留内存,哪个数字是个已分配内存,您才确认了我的保留内存确实远远大于已分配内存。
- 关于您说的 2 方案:开offload_optimizer,我不清楚这个参数是什么意思,但是我看到 deepspeed.config 好像是关于这个参数的设置的,这个配置文件的文件包含 *no_offload.json。但是我打开了这个文件,不清楚该如何设置您说的这个 offload_optimizer 参数。
- 关于您说的第三点方案:开zero3,又是在哪里配置呢?
我确实用不太好这些配置与代码。因此期待得到您的指点。感恩。 @xiaoqi25478
zero2配置:https://gitee.com/xiaoqi25478/Chinese-LLaMA-Alpaca-1_mlu/blob/main/scripts/training/ds_zero2_no_offload.json zero3配置:https://gitee.com/xiaoqi25478/Chinese-LLaMA-Alpaca-1_mlu/blob/main/scripts/training/ds_zero3_no_offload.json
我copy了老师发给我的 zero3 的配置文件,然后让deepspeed的配置指向这个文件,就出来这个错误了:
我找到了如下的参考:连接 但是我依然不清楚我该如何配置。:cry
或者说,我是单机四卡,我有没有办法我不使用 deepspeed框架呢? 这个框架它应该是对于多机训练更为有效。可我是单机。我不喜欢这个框架,觉得它好难使用很麻烦。
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your consideration.
Closing the issue, since no updates observed. Feel free to re-open if you need any further assistance.
这个错误需要设置low_cpu_mem_usage=False并且注释掉device_map=xxx
提交前必须检查以下项目
问题类型
模型训练与精调
基础模型
LLaMA-7B
操作系统
Linux
详细描述问题
No response
依赖情况(代码类问题务必提供)我执行SFT的 .sh 文件的配置
运行日志或截图
老师,我在基于Chinese-LLaMa做基础模型,对Alpaca-plus模型进行追加微调的时候,程序爆出如下错误:![微信截图_20230828174427](https://github.com/ymcui/Chinese-LLaMA-Alpaca/assets/137602905/dd3d0b42-533d-4f6a-862c-c96038a5f515)
我看堆栈信息好像是因为 deepspeed 框架的错误。但是我没不会解决。 我的机器环境是单机4张4090。 请老师帮帮我,我该如何处理这个问题,项目中 deepspeed 的配置文件我并没有做任何改变。