ssbuild / chatglm_finetuning

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

使用ptv2的方式进行finetune,总是OOM(正常微调、lora方式都没问题) #218

Closed lxw0109 closed 1 year ago

lxw0109 commented 1 year ago
`{
  "architectures": [
    "ChatGLMModel"
  ],
  "auto_map": {
    "AutoConfig": "configuration_chatglm.ChatGLMConfig",
    "AutoModel": "modeling_chatglm.ChatGLMForConditionalGeneration",
    "AutoModelForSeq2SeqLM": "modeling_chatglm.ChatGLMForConditionalGeneration"
  },
  "bos_token_id": 130004,
  "eos_token_id": 130005,
  "mask_token_id": 130000,
  "gmask_token_id": 130001,
  "pad_token_id": 3,
  "hidden_size": 4096,
  "inner_hidden_size": 16384,
  "layernorm_epsilon": 1e-05,
  **"max_sequence_length": 64,**
  "model_type": "chatglm",
  "num_attention_heads": 32,
  "num_layers": 28,
  "position_encoding_2d": true,
  "torch_dtype": "float16",
  "transformers_version": "4.23.1",
  "use_cache": true,
  "vocab_size": 130528,`
  "precision": 16,
  "quantization_bit": 0,
  "pre_seq_len": 32,
  "prefix_projection": false
}

max_sequence_length从2048降到64了还是没用,请问是哪里有问题?

ssbuild commented 1 year ago

修改了max_seq_length 需要删除缓存output 重新制作数据

lxw0109 commented 1 year ago

修改了max_seq_length 需要删除缓存output 重新制作数据

每次训练前都会删除output中的record文件,并且重新生成数据,但还是OOM

还有个问题,我用正常微调的方式,为什么我这边batch_size只能写1,大于1就会OOM,这个不符合预期吧? 是因为我单条数据比较长吗? 那如何处理这种长度比较大的样本?【ptv2方式总是OOM跟这个也有关?】

ssbuild commented 1 year ago

修改了max_seq_length 需要删除缓存output 重新制作数据

每次训练前都会删除output中的record文件,并且重新生成数据,但还是OOM

还有个问题,我用正常微调的方式,为什么我这边batch_size只能写1,大于1就会OOM,这个不符合预期吧? 是因为我单条数据比较长吗? 那如何处理这种长度比较大的样本?【ptv2方式总是OOM跟这个也有关?】

你的显存多大呢?

lxw0109 commented 1 year ago

修改了max_seq_length 需要删除缓存output 重新制作数据

每次训练前都会删除output中的record文件,并且重新生成数据,但还是OOM 还有个问题,我用正常微调的方式,为什么我这边batch_size只能写1,大于1就会OOM,这个不符合预期吧? 是因为我单条数据比较长吗? 那如何处理这种长度比较大的样本?【ptv2方式总是OOM跟这个也有关?】

你的显存多大呢?

A800,单卡80G, 8GPU

ssbuild commented 1 year ago

sorry 看错了, 一直以为你改的是 train_info_args max_seq_length , config 这里面的 max_sequence_length 不需要改 , 用的相对位置编码 , 所以它能影响的参数量有限 , 修改 data_utils.py train_info_args max_seq_length。

lxw0109 commented 1 year ago

sorry 看错了, 一直以为你改的是 train_info_args max_seq_length , config 这里面的 max_sequence_length 不需要改 , 用的相对位置编码 , 所以它能影响的参数量有限 , 修改 data_utils.py train_info_args max_seq_length。

感谢回复, data_utils.py里的max_seq_length我是保持和config里的一致的(都改成了64),但还是OOM,是不能这样修改吗?config里的不动?

lxw0109 commented 1 year ago

sorry 看错了, 一直以为你改的是 train_info_args max_seq_length , config 这里面的 max_sequence_length 不需要改 , 用的相对位置编码 , 所以它能影响的参数量有限 , 修改 data_utils.py train_info_args max_seq_length。

感谢回复, data_utils.py里的max_seq_length我是保持和config里的一致的(都改成了64),但还是OOM,是不能这样修改吗?config里的不动?

ptv2的微调方式,我看README中的说明是只支持stage0,这个应该修改哪里的配置啊?是修改deepspeed.json吗?应该如何修改?

对于 deepspeed模式 , ptuning v2 只支持 stage 0 修改对应配置文件 "pre_seq_len": 32, "prefix_projection": false