我正试图加载一个GPT2微调模型的瓶最初。在init函数期间,使用以下方法加载模型:
app.modelgpt2 = torch.load('models/model_gpt2.pt', map_location=torch.device('cpu'))
app.modelgpt2tokenizer = GPT2Tokenizer.from_pretrained('gpt2')但是,在执行预测任务时,如下所示:
from flask import current_app
input_ids = current_app.modelgpt2tokenizer.encode("sample sentence here", return_tensors='pt')
sample_outputs = current_app.modelgpt2.generate(input_ids,
do_sample=True,
top_k=50,
min_length=30,
max_length=300,
top_p=0.95,
temperature=0.7,
num_return_sequences=1)它引发问题中提到的以下错误:AttributeError:'GPT2Model‘对象没有属性'gradient_checkpointing'
错误跟踪从"/venv/lib/python3.8/site-packages/torch/autograd/grad_mode.py",函数开始列出:文件"/venv/lib/python3.8/site-packages/transformers/generation_utils.py",第28行,decorate_context返回函数(*args,**kwargs)文件"/venv/lib/python3.8/site-packages/transformers/generation_utils.py",第1017行,生成返回self.sample(文件“/venv/lib/python3.8/site-packages/transformers/generation_utils.py”,第1531行,在示例输出=self中(文件"/venv/lib/python3.8/site-packages/torch/nn/modules/module.py",行1102,在_call_impl返回forward_call(*input,**kwargs)文件"/venv/lib/python3.8/site-packages/transformers/models/gpt2/modeling_gpt2.py",行1044,正向transformer_outputs = self.transformer(文件"/venv/lib/python3.8/site-packages/torch/nn/modules/module.py",行1102,在"/venv/lib/python3.8/site-packages/transformers/models/gpt2/modeling_gpt2.py",返回forward_call(*input,**kwargs)文件的第861行中,在向前打印(self.gradient_checkpointing)文件的第1177行中,在getattr AttributeError中(“{}”对象没有属性‘{}’).format( AttributeError:'GPT2Model‘object没有属性'gradient_checkpointing’)
使用modeling_gpt2.py检查,默认情况下,在类的构造函数中设置self.gradient_checkpointing。
发布于 2021-11-20 11:21:43
只有在使用venv或部署框架(如uWSGI或gunicorn )运行该框架时,才会发现此问题。当使用4.10.0版本的转换器而不是最新的包时,就会解决这个问题。
发布于 2022-03-14 23:55:59
来自高频:
形成了错误消息,看起来您使用torch.save来保存整个模型(而不是权重),这根本不建议使用,因为当模型更改时(就像在4.10到4.11之间那样),您就不能直接用torch.load重新加载它。
我们的建议是始终使用保存预训练/从预训练来保存/加载模型,或者如果不可能,使用model.state_dict保存权重( torch.save ),然后用model.load_state_dict重新加载它们,因为这将适用于不同版本的模型。
https://stackoverflow.com/questions/69773687
复制相似问题