ssbuild / chatglm_finetuning

chatglm 6b finetuning and alpaca finetuning
1.54k stars 176 forks source link

deepspeed 和普通训练(lora ptuning) batch_size 只能设置4以下 不然会OOM #233

Closed markWJJ closed 1 year ago

markWJJ commented 1 year ago

A100 单卡下 不管什么方式 batch_sized大于4就会OOM,并且模型显存占用和batch_size成线性,请问是什么原因

markWJJ commented 1 year ago

seq_len 是640

ssbuild commented 1 year ago

batch越大计算量越大,这个不难理解吧!

markWJJ commented 1 year ago

同样的参数,huggingface的Trainer 可以达到batch_size 16 我这边只能达到4左右就会OOM

ssbuild commented 1 year ago

同样的参数,huggingface的Trainer 可以达到batch_size 16 我这边只能达到4左右就会OOM

例如lora 你改了那些参数呢?上传一下train-info-args看看。

markWJJ commented 1 year ago

{ "zero_allow_untested_optimizer": true, "fp16": { "enabled": true, "auto_cast": false, "loss_scale": 0, "initial_scale_power": 16, "loss_scale_window": 1000, "hysteresis": 2, "min_loss_scale": 1 }, "zero_optimization": { "stage": 2, "allgather_partitions": true, "allgather_bucket_size": 5e8, "overlap_comm": false, "reduce_scatter": true, "reduce_bucket_size": 5e8, "contiguous_gradients" : true, "offload_optimizer": { "device": "cpu", "pin_memory": true },

"stage3_max_live_parameters" : 1e9,
"stage3_max_reuse_distance" : 1e9,
"stage3_prefetch_bucket_size" : 5e8,
"stage3_param_persistence_threshold" : 1e6,
"sub_group_size" : 1e12,
"elastic_checkpoint" : true,
"stage3_gather_16bit_weights_on_model_save": true,
"ignore_unused_parameters": true,
"round_robin_gradients": true
},

"optimizer": { "type": "AdamW", "params": { "lr": 1e-5, "betas": [0.9,0.99], "eps":1e-8, "weight_decay":3e-7 } }, "train_micro_batch_size_per_gpu":2 }

markWJJ commented 1 year ago

现在是做deepspeed 这是config

markWJJ commented 1 year ago

就改了 batch_size 和max_seq_len:1024

ssbuild commented 1 year ago

就改了 batch_size 和max_seq_len:1024

你这个标题属实没看懂,建议重新提问

markWJJ commented 1 year ago

就改了 batch_size 和max_seq_len:1024

你这个标题属实没看懂,建议重新提问

或者说您那边实验的时候 A100上1024的长文本 最高能用多少的batch-size ChatGLM的非量化版 lora/ptuning/finetune 的实验都可以

ssbuild commented 1 year ago

就改了 batch_size 和max_seq_len:1024

你这个标题属实没看懂,建议重新提问

或者说您那边实验的时候 A100上1024的长文本 最高能用多少的batch-size ChatGLM的非量化版 lora/ptuning/finetune 的实验都可以

按照readme 半精度 训练试一下。

markWJJ commented 1 year ago

就改了 batch_size 和max_seq_len:1024

你这个标题属实没看懂,建议重新提问

或者说您那边实验的时候 A100上1024的长文本 最高能用多少的batch-size ChatGLM的非量化版 lora/ptuning/finetune 的实验都可以

按照readme 半精度 训练试一下。

image 1684408809704 目前是半精度 请问这样的设置是OK的吧

sanwei111 commented 1 year ago

兄弟你ptuning跑通了吗?我无论怎么调整都是提示爆显存@ @markWJJ

ssbuild commented 1 year ago

如果半精度训练应该可以将batch加大不少。

markWJJ commented 1 year ago

兄弟你ptuning跑通了吗?我无论怎么调整都是提示爆显存@ @markWJJ

可以跑通 batch size=4

markWJJ commented 1 year ago

如果半精度训练应该可以将batch加大不少。

已经使用了半精度的

ssbuild commented 1 year ago

你能提供一下batch 开到 16 训练脚本和 deepspeed 参数 以及 对应的仓库吗? 学习学习。

markWJJ commented 1 year ago

你能提供一下batch 开到 16 训练脚本和 deepspeed 参数 以及 对应的仓库吗? 学习学习。

https://github.com/THUDM/ChatGLM-6B deepspeed --num_gpus=4 --master_port $MASTER_PORT main.py \ --deepspeed deepspeed1.json \ --do_train \ --train_file XXXX \ --preprocessing_num_workers 32 \ --prompt_column ask \ --response_column answer \ --cache_dir cache/batch16 \ --model_name_or_path /data/llm/ChatGLM/model \ --output_dir ./output/ask-chatglm-6b-ft \ --max_source_length 512 \ --max_target_length 512 \ --num_train_epochs 3 \ --per_device_train_batch_size 24 \ --per_device_eval_batch_size 1 \ --gradient_accumulation_steps 1 \ --predict_with_generate \ --logging_steps 10 \ --save_steps 1000 \ --learning_rate $LR \ --fp16

markWJJ commented 1 year ago

你能提供一下batch 开到 16 训练脚本和 deepspeed 参数 以及 对应的仓库吗? 学习学习。

你能提供一下batch 开到 16 训练脚本和 deepspeed 参数 以及 对应的仓库吗? 学习学习。

https://github.com/THUDM/ChatGLM-6B

ssbuild commented 1 year ago

半精度应该可以开到16 , 之前32精度差不多batch 就是4.

markWJJ commented 1 year ago

半精度应该可以开到16 , 之前32精度差不多batch 就是4.

文本长度大概多少 我这边文本比较长 max是1024 ,还有个问题 这个deeptraining的loss输出的时候 有没有那种累加的trainloss 而不是每次都是 单个step的loss

ssbuild commented 1 year ago

有的,见train_info_args.