背景

在使用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

posted on 2024-12-15 14:22  蔚蓝色の天空  阅读(24)  评论(0编辑  收藏  举报