我最初尝试在 Flask 中加载一个经过微调的 GPT2 模型。模型是在初始化函数中加载的,使用以下代码:
app.modelgpt2 = torch.load('models/model_gpt2.pt', map_location=torch.device('cpu'))app.modelgpt2tokenizer = GPT2Tokenizer.from_pretrained('gpt2')
但是在执行下面的代码片段进行预测任务时:
from flask import current_appinput_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’
错误跟踪从
model.generate
函数开始:File “/venv/lib/python3.8/site-packages/torch/autograd/grad_mode.py”, line 28, in decorate_contextreturn func(*args, **kwargs)
File “/venv/lib/python3.8/site-packages/transformers/generation_utils.py”, line 1017, in generatereturn self.sample(
File “/venv/lib/python3.8/site-packages/transformers/generation_utils.py”, line 1531, in sampleoutputs = self(
File “/venv/lib/python3.8/site-packages/torch/nn/modules/module.py”, line 1102, in _call_implreturn forward_call(*input, **kwargs)
File “/venv/lib/python3.8/site-packages/transformers/models/gpt2/modeling_gpt2.py”, line 1044, in forwardtransformer_outputs = self.transformer(
File “/venv/lib/python3.8/site-packages/torch/nn/modules/module.py”, line 1102, in _call_implreturn forward_call(*input, **kwargs)
File “/venv/lib/python3.8/site-packages/transformers/models/gpt2/modeling_gpt2.py”, line 861, in forwardprint(self.gradient_checkpointing)
File “/venv/lib/python3.8/site-packages/torch/nn/modules/module.py”, line 1177, in getattrraise AttributeError(“‘{}’ object has no attribute ‘{}'”.format(
AttributeError: ‘GPT2Model’ 对象没有属性 ‘gradient_checkpointing’
检查了 modeling_gpt2.py
,在类的构造函数中,默认情况下 self.gradient_checkpointing
被设置为 False
。
回答:
发现此问题仅在使用 venv 或部署框架如 uWSGI 或 gunicorn 运行框架时发生。使用 transformers 版本 4.10.0 而不是最新版本时,此问题得到了解决。