You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地运行srimanth-d/GOT_CPU模型遇attention_mask等报错求解决

解决srimanth-d/GOT_CPU模型运行时的注意力掩码与pad token错误

错误信息

The attention mask and the pad token id were not set. As a consequence, you may observe unexpected behavior. Please pass your input's attention_mask to obtain reliable results. Setting pad_token_id to eos_token_id:None for open-end generation. The attention mask is not set and cannot be inferred from input because pad token is same as eos token. As a consequence, you may observe unexpected behavior. Please pass your input's attention_mask to obtain reliable results. The seen_tokens attribute is deprecated and will be removed in v4.41. Use the cache_position model input instead.

原运行代码

from transformers import AutoModel, AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained('srimanth-d/GOT_CPU', trust_remote_code=True)
model = AutoModel.from_pretrained('srimanth-d/GOT_CPU', trust_remote_code=True, low_cpu_mem_usage=True, use_safetensors=True, pad_token_id=tokenizer.eos_token_id)
model = model.eval()

image_file = 'images.png'

res = model.chat(tokenizer, image_file, ocr_type='ocr')

print(res)

解决方案

1. 为Tokenizer明确设置Pad Token

原tokenizer未初始化pad_token,导致模型无法正确识别填充标记,需手动指定:

tokenizer = AutoTokenizer.from_pretrained('srimanth-d/GOT_CPU', trust_remote_code=True)
# 将eos_token设为pad_token
tokenizer.pad_token = tokenizer.eos_token

2. 同步模型配置的Pad Token ID

加载模型时,除了传入pad_token_id,还需显式更新模型配置中的对应参数:

model = AutoModel.from_pretrained(
    'srimanth-d/GOT_CPU', 
    trust_remote_code=True, 
    low_cpu_mem_usage=True, 
    use_safetensors=True,
    pad_token_id=tokenizer.pad_token_id
)
model.config.pad_token_id = tokenizer.pad_token_id

3. 手动生成并传递Attention Mask

由于pad token与eos token相同,模型无法自动推断attention mask。若chat方法支持传入该参数,可在调用时手动生成并传递;若不支持,可改用generate方法直接处理输入:

# 示例:改用generate方法(需根据模型输入格式调整)
# 1. 处理图像输入(参考模型chat方法的内部逻辑)
# 2. 构建文本输入并生成attention_mask
text_input = ""  # 根据模型需求设置文本提示
inputs = tokenizer(text_input, return_tensors="pt", padding=True)
inputs['attention_mask'] = tokenizer.get_attention_mask(inputs['input_ids'])
# 3. 加入图像输入(需符合模型要求的格式)
inputs['image'] = ...  # 加载并预处理图像
# 4. 调用generate
outputs = model.generate(**inputs)
res = tokenizer.decode(outputs[0], skip_special_tokens=True)

4. 处理seen_tokens废弃警告

该警告源于transformers版本迭代,可升级transformers至最新版本;若无法修改模型远程代码,可暂时忽略该警告(不影响核心功能运行)。

完整修改后代码

from transformers import AutoModel, AutoTokenizer

# 初始化Tokenizer并设置pad_token
tokenizer = AutoTokenizer.from_pretrained('srimanth-d/GOT_CPU', trust_remote_code=True)
tokenizer.pad_token = tokenizer.eos_token

# 加载模型并同步pad_token_id配置
model = AutoModel.from_pretrained(
    'srimanth-d/GOT_CPU', 
    trust_remote_code=True, 
    low_cpu_mem_usage=True, 
    use_safetensors=True,
    pad_token_id=tokenizer.pad_token_id
)
model.config.pad_token_id = tokenizer.pad_token_id
model = model.eval()

image_file = 'images.png'

# 优先尝试chat方法,若仍有问题则改用上述generate逻辑
res = model.chat(tokenizer, image_file, ocr_type='ocr')

print(res)

内容的提问来源于stack exchange,提问作者Yadnyesh-Dashpute

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 16:12:38