ChatGLM-6B icon indicating copy to clipboard operation
ChatGLM-6B copied to clipboard

[BUG/Help] <title>

Open dragononly opened this issue 2 years ago • 14 comments

Is there an existing issue for this?

  • [X] I have searched the existing issues

Current Behavior

训练完跑起来以后,一直没有返回 1

Expected Behavior

有回复值

Steps To Reproduce

A6000显卡,PT训练完自己数据后,拿到webdemo.py里面跑

Environment

- OS:ubuntu
- Python:
- Transformers:
- PyTorch:
- CUDA Support (`python -c "import torch; print(torch.cuda.is_available())"`) :
true

Anything else?

No response

dragononly avatar Apr 13 '23 05:04 dragononly

请参考 https://github.com/THUDM/ChatGLM-6B/tree/main/ptuning#%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2 的方式部署 当前提供的信息太少,无法提供进一步帮助

duzx16 avatar Apr 13 '23 05:04 duzx16

import os
import platform
import signal
from transformers import AutoTokenizer, AutoModel
import torch
tokenizer = AutoTokenizer.from_pretrained("ptuning/output/adgen-chatglm-6b-pt-128-2e-2/checkpoint-1000", trust_remote_code=True)
model = AutoModel.from_pretrained("ptuning/output/adgen-chatglm-6b-pt-128-2e-2/checkpoint-1000", trust_remote_code=True)
prefix_state_dict = torch.load(os.path.join("ptuning/output/adgen-chatglm-6b-pt-128-2e-2/checkpoint-1000", "pytorch_model.bin"))
new_prefix_state_dict = {}
for k, v in prefix_state_dict.items():
    new_prefix_state_dict[k[len("transformer.prefix_encoder."):]] = v
model.transformer.prefix_encoder.load_state_dict(new_prefix_state_dict)
model = model.half().cuda()
model.transformer.prefix_encoder.float()
model = model.eval()


依旧没有返回ptuning训练和finetune训练的模型都试过了,都没有生成任何信息。

natureLanguageQing avatar Apr 13 '23 05:04 natureLanguageQing


import os
import platform
import signal
from transformers import AutoTokenizer, AutoModel, AutoConfig
import torch
tokenizer = AutoTokenizer.from_pretrained("ptuning/output/adgen-chatglm-6b-pt-128-2e-2/checkpoint-1000", trust_remote_code=True)
config = AutoConfig.from_pretrained("ptuning/output/adgen-chatglm-6b-pt-128-2e-2/checkpoint-1000", trust_remote_code=True, pre_seq_len=128)
model = AutoModel.from_pretrained("ptuning/output/adgen-chatglm-6b-pt-128-2e-2/checkpoint-1000",config=config, trust_remote_code=True)
prefix_state_dict = torch.load(os.path.join("ptuning/output/adgen-chatglm-6b-pt-128-2e-2/checkpoint-1000", "pytorch_model.bin"))
new_prefix_state_dict = {}
for k, v in prefix_state_dict.items():
    new_prefix_state_dict[k[len("transformer.prefix_encoder."):]] = v
model.transformer.prefix_encoder.load_state_dict(new_prefix_state_dict)
model = model.half().cuda()
model.transformer.prefix_encoder.float()
model = model.eval()

这样也不行

natureLanguageQing avatar Apr 13 '23 05:04 natureLanguageQing

1681364047444

natureLanguageQing avatar Apr 13 '23 05:04 natureLanguageQing


import os
import platform
import signal
from transformers import AutoTokenizer, AutoModel, AutoConfig
import torch
tokenizer = AutoTokenizer.from_pretrained("ptuning/output/adgen-chatglm-6b-pt-128-2e-2/checkpoint-1000", trust_remote_code=True)
config = AutoConfig.from_pretrained("ptuning/output/adgen-chatglm-6b-pt-128-2e-2/checkpoint-1000", trust_remote_code=True, pre_seq_len=128)
model = AutoModel.from_pretrained("ptuning/output/adgen-chatglm-6b-pt-128-2e-2/checkpoint-1000",config=config, trust_remote_code=True)
prefix_state_dict = torch.load(os.path.join("ptuning/output/adgen-chatglm-6b-pt-128-2e-2/checkpoint-1000", "pytorch_model.bin"))
new_prefix_state_dict = {}
for k, v in prefix_state_dict.items():
    new_prefix_state_dict[k[len("transformer.prefix_encoder."):]] = v
model.transformer.prefix_encoder.load_state_dict(new_prefix_state_dict)
model = model.half().cuda()
model.transformer.prefix_encoder.float()
model = model.eval()

这样也不行

config = AutoConfig.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True, pre_seq_len=128)
model = AutoModel.from_pretrained("THUDM/chatglm-6b", config=config, trust_remote_code=True)

或者把 THUDM/chatglm-6b 换成你本地的模型路径,但是不能是checkpoint路径,checkpoint路径下只存了prefix encoder

duzx16 avatar Apr 13 '23 05:04 duzx16

import os
import platform
import signal
from transformers import AutoTokenizer, AutoModel, AutoConfig
import torch
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True)
config = AutoConfig.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True, pre_seq_len=128)
model = AutoModel.from_pretrained("THUDM/chatglm-6b",config=config, trust_remote_code=True)
prefix_state_dict = torch.load(os.path.join("ptuning/output/adgen-chatglm-6b-pt-128-2e-2/checkpoint-1000", "pytorch_model.bin"))
new_prefix_state_dict = {}
for k, v in prefix_state_dict.items():
    new_prefix_state_dict[k[len("transformer.prefix_encoder."):]] = v
model.transformer.prefix_encoder.load_state_dict(new_prefix_state_dict)
model = model.quantize(4)
model = model.half().cuda()
model.transformer.prefix_encoder.float()
model = model.eval()

natureLanguageQing avatar Apr 13 '23 06:04 natureLanguageQing

import os import torch from transformers import AutoConfig, AutoModel, AutoTokenizer

CHECKPOINT_PATH = "./output/adgen-chatglm-6b-pt-8-1e-2-dev/checkpoint-3000" tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True) config = AutoConfig.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True, pre_seq_len=128) model = AutoModel.from_pretrained("THUDM/chatglm-6b", config=config, trust_remote_code=True) prefix_state_dict = torch.load(os.path.join(CHECKPOINT_PATH, "pytorch_model.bin")) new_prefix_state_dict = {} for k, v in prefix_state_dict.items(): new_prefix_state_dict[k[len("transformer.prefix_encoder."):]] = v model.transformer.prefix_encoder.load_state_dict(new_prefix_state_dict)

最后一步报错 raise RuntimeError('Error(s) in loading state_dict for {}:\n\t{}'.format( RuntimeError: Error(s) in loading state_dict for PrefixEncoder: Unexpected key(s) in state_dict: ".weight", "layernorm.weight", "layernorm.bias", "ion.rotary_emb.inv_freq", "ion.query_key_value.bias", "ion.query_key_value.weight", "ion.query_key_value.weight_scale", "ion.dense.bias", "ion.dense.weight", "ion.dense.weight_scale", "ttention_layernorm.weight", "ttention_layernorm.bias", "nse_h_to_4h.bias", "nse_h_to_4h.weight", "nse_h_to_4h.weight_scale", "nse_4h_to_h.bias", "nse_4h_to_h.weight", "nse_4h_to_h.weight_scale", "_layernorm.weight", "_layernorm.bias", "tion.rotary_emb.inv_freq", "tion.query_key_value.bias", "tion.query_key_value.weight", "tion.query_key_value.weight_scale", "tion.dense.bias", "tion.dense.weight", "tion.dense.weight_scale", "attention_layernorm.weight", "attention_layernorm.bias", "ense_h_to_4h.bias", "ense_h_to_4h.weight", "ense_h_to_4h.weight_scale", "ense_4h_to_h.bias", "ense_4h_to_h.weight", "ense_4h_to_h.weight_scale", ".bias", "".

fengzi00 avatar Apr 13 '23 08:04 fengzi00

import os import torch from transformers import AutoConfig, AutoModel, AutoTokenizer

CHECKPOINT_PATH = "./output/adgen-chatglm-6b-pt-8-1e-2-dev/checkpoint-3000" tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True) config = AutoConfig.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True, pre_seq_len=128) model = AutoModel.from_pretrained("THUDM/chatglm-6b", config=config, trust_remote_code=True) prefix_state_dict = torch.load(os.path.join(CHECKPOINT_PATH, "pytorch_model.bin")) new_prefix_state_dict = {} for k, v in prefix_state_dict.items(): new_prefix_state_dict[k[len("transformer.prefix_encoder."):]] = v model.transformer.prefix_encoder.load_state_dict(new_prefix_state_dict)

最后一步报错 raise RuntimeError('Error(s) in loading state_dict for {}:\n\t{}'.format( RuntimeError: Error(s) in loading state_dict for PrefixEncoder: Unexpected key(s) in state_dict: ".weight", "layernorm.weight", "layernorm.bias", "ion.rotary_emb.inv_freq", "ion.query_key_value.bias", "ion.query_key_value.weight", "ion.query_key_value.weight_scale", "ion.dense.bias", "ion.dense.weight", "ion.dense.weight_scale", "ttention_layernorm.weight", "ttention_layernorm.bias", "nse_h_to_4h.bias", "nse_h_to_4h.weight", "nse_h_to_4h.weight_scale", "nse_4h_to_h.bias", "nse_4h_to_h.weight", "nse_4h_to_h.weight_scale", "_layernorm.weight", "_layernorm.bias", "tion.rotary_emb.inv_freq", "tion.query_key_value.bias", "tion.query_key_value.weight", "tion.query_key_value.weight_scale", "tion.dense.bias", "tion.dense.weight", "tion.dense.weight_scale", "attention_layernorm.weight", "attention_layernorm.bias", "ense_h_to_4h.bias", "ense_h_to_4h.weight", "ense_h_to_4h.weight_scale", "ense_4h_to_h.bias", "ense_4h_to_h.weight", "ense_4h_to_h.weight_scale", ".bias", "".

旧版的checkpoint应该按照 https://github.com/THUDM/ChatGLM-6B/tree/main/ptuning#%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2 中的(2)来做

duzx16 avatar Apr 13 '23 08:04 duzx16


import os
import platform
import signal
from transformers import AutoTokenizer, AutoModel, AutoConfig
import torch
tokenizer = AutoTokenizer.from_pretrained("ptuning/output/adgen-chatglm-6b-pt-128-2e-2/checkpoint-1000", trust_remote_code=True)
config = AutoConfig.from_pretrained("ptuning/output/adgen-chatglm-6b-pt-128-2e-2/checkpoint-1000", trust_remote_code=True, pre_seq_len=128)
model = AutoModel.from_pretrained("ptuning/output/adgen-chatglm-6b-pt-128-2e-2/checkpoint-1000",config=config, trust_remote_code=True)
prefix_state_dict = torch.load(os.path.join("ptuning/output/adgen-chatglm-6b-pt-128-2e-2/checkpoint-1000", "pytorch_model.bin"))
new_prefix_state_dict = {}
for k, v in prefix_state_dict.items():
    new_prefix_state_dict[k[len("transformer.prefix_encoder."):]] = v
model.transformer.prefix_encoder.load_state_dict(new_prefix_state_dict)
model = model.half().cuda()
model.transformer.prefix_encoder.float()
model = model.eval()

这样也不行

config = AutoConfig.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True, pre_seq_len=128)
model = AutoModel.from_pretrained("THUDM/chatglm-6b", config=config, trust_remote_code=True)

或者把 THUDM/chatglm-6b 换成你本地的模型路径,但是不能是checkpoint路径,checkpoint路径下只存了prefix encoder

改了还是报错

natureLanguageQing avatar Apr 13 '23 08:04 natureLanguageQing

checkpoint是通过train.sh生成的,怎么区分旧版和新版

fengzi00 avatar Apr 13 '23 08:04 fengzi00

checkpoint是通过train.sh生成的,怎么区分旧版和新版

文件大小,在3GB以上的是旧版的

duzx16 avatar Apr 13 '23 08:04 duzx16

model.transformer.prefix_encoder.load_state_dict(new_prefix_state_dict) 出现新的错误: AttributeError: 'ChatGLMModel' object has no attribute 'prefix_encoder'

qxde01 avatar Apr 14 '23 06:04 qxde01

model.transformer.prefix_encoder.load_state_dict(new_prefix_state_dict) 出现新的错误: AttributeError: 'ChatGLMModel' object has no attribute 'prefix_encoder'

这个问题可以尝试一下换个显卡试试, 我之前在1080上报这个错,在v100上就不报错了

goingHan avatar Apr 20 '23 10:04 goingHan


import os
import platform
import signal
from transformers import AutoTokenizer, AutoModel, AutoConfig
import torch
tokenizer = AutoTokenizer.from_pretrained("ptuning/output/adgen-chatglm-6b-pt-128-2e-2/checkpoint-1000", trust_remote_code=True)
config = AutoConfig.from_pretrained("ptuning/output/adgen-chatglm-6b-pt-128-2e-2/checkpoint-1000", trust_remote_code=True, pre_seq_len=128)
model = AutoModel.from_pretrained("ptuning/output/adgen-chatglm-6b-pt-128-2e-2/checkpoint-1000",config=config, trust_remote_code=True)
prefix_state_dict = torch.load(os.path.join("ptuning/output/adgen-chatglm-6b-pt-128-2e-2/checkpoint-1000", "pytorch_model.bin"))
new_prefix_state_dict = {}
for k, v in prefix_state_dict.items():
    new_prefix_state_dict[k[len("transformer.prefix_encoder."):]] = v
model.transformer.prefix_encoder.load_state_dict(new_prefix_state_dict)
model = model.half().cuda()
model.transformer.prefix_encoder.float()
model = model.eval()

这样也不行

config = AutoConfig.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True, pre_seq_len=128)
model = AutoModel.from_pretrained("THUDM/chatglm-6b", config=config, trust_remote_code=True)

或者把 THUDM/chatglm-6b 换成你本地的模型路径,但是不能是checkpoint路径,checkpoint路径下只存了prefix encoder

改了还是报错

我也是,试了和你一样的几种方式推理,结果都是空。 你的解决了吗?

sun1092469590 avatar May 05 '23 08:05 sun1092469590