背景
在使用Llama-3.2-1B
时遇到一个关于pad_tokens
经验不足的bug。没有指定pad_token
的时候分词器会报错,这个使用有以下两种解决策略:
- 配一个新的token。
tokenizer.add_special_tokens({'pad_token': '[PAD]'})
model.resize_token_embeddings(len(tokenizer)) # 如果添加了新的特殊标记,需要调整模型的嵌入层
- 将一个存在的token标记为
pad_token
:
tokenizer.pad_token = tokenizer.eos_token
一般来说这个问题就解决了,但是我仍然遇到了下面的问题:
ValueError: Cannot handle batch sizes > 1 if no padding token is defined.
明明我已经分配了这个pad_token
,为什么仍然有问题?这主要时因为模型没有配置,所以解决策略就清楚了。
- 强制配置pad_token:
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased', pad_token=tokenizer.eos_token)
- 给模型配置:
model.config.pad_token_id = tokenizer.pad_token_id
这样问题就解决了。查询了以下通义千问和GPT4还是不错的。所以说模型合理的加载顺序就是:tokenizer
然后是model
。