liuqidong07 / MOELoRA-peft

[SIGIR'24] The official implementation code of MOELoRA.
https://arxiv.org/abs/2310.18339
MIT License
115 stars 15 forks source link

关于代码model.enable_input_require_grads() #16

Open lhyscau opened 3 months ago

lhyscau commented 3 months ago
   `    if training_args.do_train:
    model.gradient_checkpointing_enable()
    model.enable_input_require_grads()`

    作者你好,请问这里令输入也计算梯度的目的是什么呢?是否冗余了这条代码,还是说这个一个涨分的方式?
liuqidong07 commented 3 months ago

你好,我这里是直接参考promptcblue的代码,并没有尝试过去掉会对结果有什么影响。另外,我记得model.enable_input_require_grads()去掉好像会报错?

lhyscau commented 3 months ago

我尝试在单卡跑,去掉貌似不会报错。还有另外一个问题是在启动的moelora.bash中 deepspeed --num_gpus=4 --master_port $MASTER_PORT run_mlora.py \ --deepspeed src/ds.config \ --do_train \ --train_file $your_data_path/train.json \ --cache_dir $your_data_path \ --prompt_column input \ --response_column target \ --overwrite_cache \ --model_name_or_path $model_name_or_path \ --output_dir $your_checkpopint_path \ --overwrite_output_dir \ --max_source_length $MAX_SOURCE_LENGTH \ --max_target_length 196 \ --per_device_train_batch_size 4 \ --per_device_eval_batch_size 4 \ --gradient_accumulation_steps 8 \ 使用4张显卡时,这里per_device_train_batch_size 是4,梯度累计是8,那么对分布式训练中,minibatch在一张卡上应该是32个sample,四张卡的话一次梯度更新应该使用的batch_size应该是4*32=128? 不知道我理解的是否有问题呢?如果这样计算跟论文中的64没有对上

lhyscau commented 3 months ago

你好,我这里是直接参考promptcblue的代码,并没有尝试过去掉会对结果有什么影响。另外,我记得model.enable_input_require_grads()去掉好像会报错?

确实,如果需要使用model.gradient_checkpointing_enable()来节省显存, model.enable_input_require_grads()注释掉会报错

liuqidong07 commented 3 months ago

我尝试在单卡跑,去掉貌似不会报错。还有另外一个问题是在启动的moelora.bash中 deepspeed --num_gpus=4 --master_port $MASTER_PORT run_mlora.py \ --deepspeed src/ds.config \ --do_train \ --train_file $your_data_path/train.json \ --cache_dir $your_data_path \ --prompt_column input \ --response_column target \ --overwrite_cache \ --model_name_or_path $model_name_or_path \ --output_dir $your_checkpopint_path \ --overwrite_output_dir \ --max_source_length $MAX_SOURCE_LENGTH \ --max_target_length 196 \ --per_device_train_batch_size 4 \ --per_device_eval_batch_size 4 \ --gradient_accumulation_steps 8 \ 使用4张显卡时,这里per_device_train_batch_size 是4,梯度累计是8,那么对分布式训练中,minibatch在一张卡上应该是32个sample,四张卡的话一次梯度更新应该使用的batch_size应该是4*32=128? 不知道我理解的是否有问题呢?如果这样计算跟论文中的64没有对上

这个bash应该是我中间用两卡时候跑的参数,后来整理代码时忘记改梯度累计的步数了。最终使用的超参数是与论文一致的,即batch size为64。感谢提醒!