beyondguo/LLM-Tuning

运行报错

shenmadouyaowen opened this issue · 22 comments

你好,以下运行报错,两张3090,

print(model.hf_device_map)打印{'transformer': 0}

{'transformer': 0}
╭───────────────────── Traceback (most recent call last) ──────────────────────╮
│ /root/LLM-Tuning-master/chatglm2_lora_tuning.py:152 in <module>              │
│                                                                              │
│   149                                                                        │
│   150                                                                        │
│   151 if __name__ == "__main__":                                             │
│ ❱ 152 │   main()                                                             │
│   153                                                                        │
│                                                                              │
│ /root/LLM-Tuning-master/chatglm2_lora_tuning.py:108 in main                  │
│                                                                              │
│   105 │   另一个解决办法是下面这个:                                         │
│   106 │   手动把 output_layer 设置为跟 input 一样的 device                   │
│   107 │   """                                                                │
│ ❱ 108 │   model.hf_device_map['transformer.output_layer'] = model.hf_device_ │
│   109 │   model = AutoModel.from_pretrained("THUDM/chatglm2-6b", trust_remot │
│   110 │   print(model.hf_device_map)                                         │
│   111 │   """                                                                │
╰──────────────────────────────────────────────────────────────────────────────╯
KeyError: 'transformer.embedding'

注释掉model.hf_device_map['transformer.output_layer'] = model.hf_device

这个报错有点怪,你是微调的ChatGLM2吗?这个文件是针对ChatGLM2的,如果是ChatGLM,要把 train.sh 中的那个py文件换成 chatglm_lora_tuning.py

这个报错有点怪,你是微调的ChatGLM2吗?这个文件是针对ChatGLM2的,如果是ChatGLM,要把 train.sh 中的那个py文件换成 chatglm_lora_tuning.py

是调2m,目录结构没有啥变动
image

注释掉model.hf_device_map['transformer.output_layer'] = model.hf_device

注释掉就199行报错

我也两块3090,去掉后却是显示爆内存了
OutOfMemoryError: CUDA out of memory. Tried to allocate 508.00 MiB (GPU 0; 23.70 GiB total capacity; 22.82 GiB already allocated; 202.81 MiB free; 22.82 GiB reserved in total by
PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF

model.hf_device_map['transformer.output_layer'] = model.hf_device_map['transformer.embedding']
model = AutoModel.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True, device_map=model.hf_device_map)

两行不能去掉,不然多卡可能报错。

不去掉你们是报啥错呢?

大佬您好~不去掉的话,就是最上面的错如下图,当然,这个错我是单卡跑的,因为1卡其他人在用现在
image

model.hf_device_map['transformer.output_layer'] = model.hf_device_map['transformer.embedding']
model = AutoModel.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True, device_map=model.hf_device_map)

两行不能去掉,不然多卡可能报错。

不去掉你们是报啥错呢?

CUDA_VISIBLE_DEVICES=1,2,3 设置0开始,不报错,但是内存满

model.hf_device_map['transformer.output_layer'] = model.hf_device_map['transformer.embedding']
model = AutoModel.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True, device_map=model.hf_device_map)

两行不能去掉,不然多卡可能报错。
不去掉你们是报啥错呢?

CUDA_VISIBLE_DEVICES=1,2,3 设置0开始,不报错,但是内存满

是的是的太对了我也是

model.hf_device_map['transformer.output_layer'] = model.hf_device_map['transformer.embedding']
model = AutoModel.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True, device_map=model.hf_device_map)

两行不能去掉,不然多卡可能报错。
不去掉你们是报啥错呢?

CUDA_VISIBLE_DEVICES=1,2,3 设置0开始,不报错,但是内存满

是的是的太对了我也是

batch_size 设置1,就不暴漫了

shenmadouyaowen

单独1么,占多少显存

shenmadouyaowen

单独1么,占多少显存

17 G以上,基本没有什么问题,都是我们没有看代码直接使用造成的原因

太对了我也是

wc太牛了我q2547800285求老哥帮助

h_size 设置1,就不暴漫了

我单独一还报错擦

h_size 设置1,就不暴漫了

我单独一还报错擦

我也是小菜鸡,我建议你修改一下tokenize.sh --max_seq_length 2000 后面数字修改小点,然后修改train.shper_device_train_batch_size 10 后面数字小点再试试

h_size 设置1,就不暴漫了

我单独一还报错擦

我也是小菜鸡,我建议你修改一下tokenize.sh --max_seq_length 2000 后面数字修改小点,然后修改train.shper_device_train_batch_size 10 后面数字小点再试试
老哥最后的显卡这里是这样么CUDA_VISIBLE_DEVICES=0,1 (我发现1号他用的显存多,现在1号卡其他人在用(只有7gb显存),我怀疑是这个问题)

h_size 设置1,就不暴漫了

我单独一还报错擦

我也是小菜鸡,我建议你修改一下tokenize.sh --max_seq_length 2000 后面数字修改小点,然后修改train.shper_device_train_batch_size 10 后面数字小点再试试
老哥最后的显卡这里是这样么CUDA_VISIBLE_DEVICES=0,1 (我发现1号他用的显存多,现在1号卡其他人在用(只有7gb显存),我怀疑是这个问题)

如果你只用0显卡就设置CUDA_VISIBLE_DEVICES=0就行,1就不要用了

能跑了,单卡的话可以注释这两行
# model.hf_device_map['transformer.output_layer'] = model.hf_device_map['transformer.embedding']
# model = AutoModel.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True, device_map=model.hf_device_map)
如果多卡,应该就不要(我还没试)

目前我是把--max_seq_length 2000改为200,然后0卡单跑,per_device_train_batch_size更是可怜的1,15g作用显存占用
image

能跑了,单卡的话可以注释这两行 # model.hf_device_map['transformer.output_layer'] = model.hf_device_map['transformer.embedding'] # model = AutoModel.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True, device_map=model.hf_device_map) 如果多卡,应该就不要(我还没试)

目前我是把--max_seq_length 2000改为200,然后0卡单跑,per_device_train_batch_size更是可怜的1,15g作用显存占用 image

为啥我单卡把这两行注释了还是报错119行,大佬

行注释了还是报错119行,大佬
我的改动就刚才说的这么多,你看看你和我有其他改动区别不

各位大佬,我按照你们改的最后又出现了这个错误
image

RuntimeError: "addmm_impl_cpu_" not implemented for 'Half'
有什么可以解决的办法吗

ror: "addmm_impl_cpu_" not implemented for 'H

没见过这个错