使用Bloom模型推理时遇AttributeError:'BloomForCausalLM'无encode属性
问题原因及修正方案
核心问题原因
- 你错误地将模型类(
AutoModelForCausalLM)实例赋值给了tokenizer变量,AutoModelForCausalLM是用于加载大语言模型的类,本身没有encode方法——encode是分词器(Tokenizer)类专属的方法,这是报错的直接原因。 - 代码还存在另外两处错误:
- 加载生成模型时误用了
AutoModel,这是基础模型类,不具备文本生成所需的generate方法,应该使用AutoModelForCausalLM - 最终解码结果时调用
tokenizer.result是错误的,Tokenizer类没有该方法,正确的解码方法是tokenizer.decode
- 加载生成模型时误用了
修正后的完整代码
from transformers import AutoModelForCausalLM, AutoTokenizer # checkpoint = "bigscience/bloomz-7b1-mt" checkpoint = "bigscience/bloom-1b7" # 用AutoTokenizer加载对应模型的分词器 tokenizer = AutoTokenizer.from_pretrained(checkpoint) # 用AutoModelForCausalLM加载具备生成能力的模型 model = AutoModelForCausalLM.from_pretrained(checkpoint, torch_dtype="auto", device_map="auto") # 待处理的提示文本 prompt = "Translate to English: Je t’aime." # 注意:bloom-1b7的最大上下文长度为2048,设置过大的max_length会报错,此处设为合理值 max_length = 50 # 分词并将张量转移到CUDA设备 inputs = tokenizer.encode(prompt, return_tensors="pt").to("cuda") # 执行文本生成 outputs = model.generate(inputs, max_length=max_length) # 解码生成结果,跳过特殊标记让输出更整洁 result = tokenizer.decode(outputs[0], skip_special_tokens=True) # 打印最终结果 print(result)
内容的提问来源于stack exchange,提问作者Tobi Akinyemi
相关产品推荐
相关产品推荐

