Open jdm4pku opened 2 weeks ago
你好,感谢提问。经过检查,这里的stop_token_ids确实没有对应。但是对于测试结果而言没有影响,因为除了stop_token_ids这个参数,还有很多别的因素会让其停止生成,可以简单理解成所有条件之间是“或”的关系。具体影响条件参考vllm的官方文档:https://docs.vllm.ai/en/stable/dev/sampling_params.html stop_token_ids这个参数更多的作用是让模型的输出在一些设定的token处停下,所以可以根据自己的需要选择,是比较自由的,没有固定的获取方式。 比如,如果想要获取关于vocab中的special_token作为stop_token_ids,可以直接打印出tokenizer。
tokenizer = AutoTokenizer.from_pretrained(model, use_fast=False)
print(tokenizer)
Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.
Qwen2Tokenizer(name_or_path='/root/autodl-tmp/qwen/Qwen2-7B-Instruct', vocab_size=151643, model_max_length=131072, is_fast=False, padding_side='right', truncation_side='right', special_tokens={'eos_token': '<|im_end|>', 'pad_token': '<|endoftext|>', 'additional_special_tokens': ['<|im_start|>', '<|im_end|>']}, clean_up_tokenization_spaces=False), added_tokens_decoder={
151643: AddedToken("<|endoftext|>", rstrip=False, lstrip=False, single_word=False, normalized=False, special=True),
151644: AddedToken("<|im_start|>", rstrip=False, lstrip=False, single_word=False, normalized=False, special=True),
151645: AddedToken("<|im_end|>", rstrip=False, lstrip=False, single_word=False, normalized=False, special=True),
}
然后设置
stop_token_ids = [151643, 151644, 151645] # <|endoftext|>, <|im_start|>, <|im_end|>
如果想要设定其他字符作为stop_token_id,可以直接在对应的vocab.json
文件中获取,那么模型在推理时下一个token如果是对应的token就会结束生成。
希望这个回答对你有帮助🥰
十分感谢您详细的回复,对我很有帮助!谢谢
看到您写的04-Qwen2-7B-Instruct vLLM 部署调用的代码:
想请教一下,这个stop_token_ids是怎么获取的?
我尝试加载了Qwen/Qwen2-7B-Instruct这个预训练模型:
看了一下all_special_tokens_id,但是不是上面代码中的,所以我很疑惑如何获取的stop_token_ids。我想学习一下获取方式,以用于后面用VLLM推理其他的大模型。谢谢。