Baichuan-7B [问题] 两个小问题:没有pad_token && 把不必要的buffer保存下来了

aydmsdu9  于 2个月前  发布在  其他
关注(0)|答案(3)|浏览(26)

所需先决条件

问题

  1. 在训练时,需要padding,但是pad_token_id并没有跟着tokenizer一起保存下来
>>> tokenizer = AutoTokenizer.from_pretrained("baichuan-inc/baichuan-7B")
>>> print(tokenizer.pad_token_id, tokenizer.pad_token)
Output: None, None

如果不指定pad_token_id会触发Cuda Error越界问题或者pad_token not found

  1. https://github.com/baichuan-inc/baichuan-7B/blob/main/models/modeling_baichuan.py 的96行可以看到,注册到buffer的inv_freq跟着state_dict()一起保存下来了,但是这个在推理时完全没用!如果用model.named_parameters()保存模型参数,会报错没有找到model.model.layers.31.self_attn.rotary_emb.inv_freq

检查清单

  • 我已在上方提供了所有相关且必要的信息。
  • 我已为这个问题选择了一个合适的标题。
bq3bfh9z

bq3bfh9z1#

  1. 第一个问题:将pad_token_id设为0
>>> tokenizer = AutoTokenizer.from_pretrained("baichuan-inc/baichuan-7B")
>>> tokenizer.pad_token_id = 0
  1. 第二个问题:将该行代码加一个persistent=False参数
>>> self.register_buffer("inv_freq", inv_freq, persistent=False)
kuarbcqp

kuarbcqp2#

  1. 第一个问题:将pad_token_id设为0
>>> tokenizer = AutoTokenizer.from_pretrained("baichuan-inc/baichuan-7B")
>>> tokenizer.pad_token_id = 0
  1. 第二个问题:将该行代码加一个persistent=False参数
>>> self.register_buffer("inv_freq", inv_freq, persistent=False)

也可以在 special_tokens_map.json 中添加一个 pad_token ,内容直接复制 unk_token ,即:

"pad_token": {
    "content": "<unk>",
    "lstrip": false,
    "normalized": true,
    "rstrip": false,
    "single_word": false
  }
06odsfpq

06odsfpq3#

  1. 第一个问题:将pad_token_id设为0
>>> tokenizer = AutoTokenizer.from_pretrained("baichuan-inc/baichuan-7B")
>>> tokenizer.pad_token_id = 0
  1. 第二个问题:将该行代码加一个persistent=False参数
>>> self.register_buffer("inv_freq", inv_freq, persistent=False)

改成tokenizer.pad_token_id = 0微调实验,跑着跑着还会出现Cuda Error越界问题

相关问题