-
Notifications
You must be signed in to change notification settings - Fork 419
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
generate和interaction都无法停止,直到达到max_tokens限制才会停止 #59
Comments
你现在仓库的版本是最新版的吗,我看这个UI界面好像没有min_new_tokens |
昨天上午拉取的,我需要重新pull generate的代码吗? |
我这个截取的是interaction的页面,不是generate的,generate是有min_new_tokens选项的;但无论是哪种方式的,预测结果都无法有效停止。 |
如果使用我们的模型能成功停止吗 |
还没调起来,一会儿试一下。另外我想问下,之前我通过download脚本下载llama,发现tokenizer有问题,无法正常decode,换成huggingface拉取model,可以decode,但是fine-tune完成后,貌似bos/eos/pad几个符号的处理不一致,导致无法有效停止。但是您反馈你们自己finetune的model是可以正常停止的,请问download和huggingface上的basemodel有什么不同吗? |
download和huggingface一个是用的https://agi.gpt4.org/llama/LLaMA/,一个是他们传在huggingface上的,我们之前使用两种方式都是正常的。不清楚第一个链接中后台是否有修改,不过huggingface上的修改是能看到修改记录的 可以加载我们在huggingface上的lora模型看能否正常停止,llama他们的tokenizer后面好像有变过,因为我们finetune中用的是默认的eos,你可以尝试输出一下模型的eos是什么,或者看一下相关配置中eos应该对应哪个 |
之前我在issuse #54 的时候也提过这个问题,刚才又看了下tokenzier_config, 我觉得确实可能是tokenizer_config的问题, 我是下载的 decapoda-research/llama-7b-hf 这个llama 模型,他的tokenizer_config 默认eos_token 和 bos_token 都是空字符,这会导致eos_token_id 和 bos_token_id 都为零。我下huggingface 上默认的tokenizer_config 是这样的
下面是我tokenizer的测试 |
@rookiebird
|
@Facico 先感谢大佬每次都很及时细心的回复。感觉你的输出也有点奇怪啊,你的tokenizer.bos_token是空字符吧, 所以输出的id 是0, 我怀疑你的tokenizer.eos_token 也是空字符, 但是为啥你的 tokenizer.eos_token_id和tokenizer.bos_token_id却是正确的对上了。。。我理解的顺序是, tokenizer_config.json用到的特殊字符会用来初始化LlamaTokenizer中的特殊字符,然后对应的eos_token_id, bos_token_id 应该是调用 self.convert_tokens_to_ids(special_token) 得到的。 但我也不是非常清楚这个流程。 |
@xqmmy , config 和 generate_config 也要改下,我设置的token_id , bos_token_id 为1, eos_token_id为2 ,pad_token_id 为0 |
@rookiebird 好的,谢谢,我试下 |
我发现finetune的时候作者在加载llamaTokenizer, 已经设置为add_eos为true了, 这个部分好像不用设置了 @xqmmy |
@rookiebird 今天的事情比较多,抱歉回复这么晚。可能因为huggingface的tokenizer相关的问题,transformers最新的代码中的llama将他们的tokenzier的路径给修改了,见这里。 关于上面的问题,我们的tokenzier_config和你是一样的,bos和eos那里都是空的,如下
所以我们的tokenizer.bos_token和tokenizer.eos_token都是空的,对应的是0 transformers他们最新的代码好像将tokenizer.model这个换到了新的链接,我还没试过最新的版本,不过可能有所改善。 add_eos设置的是true,add_bos llama代码中默认的是true |
我也是看楼主给的链接才知道这里有修改的,以要旧的代码可以看上面这个链接,但是我觉得直接改配置文件也可以的 @OpenSource-fan |
是的,peft和transformers这两个库用的不是release版本,版本迭代的时候太容易有对不齐的问题了。。。 |
config.json
generation_config.json
tokenizer_config.json
tokenizer = LlamaTokenizer.from_pretrained(
args.model_path, add_eos_token=True
)
print(tokenizer.eos_token_id)
print(tokenizer.bos_token_id)
print(tokenizer.eos_token)
print(tokenizer.bos_token)
print(tokenizer._convert_token_to_id(tokenizer.bos_token))
print(tokenizer._convert_token_to_id("<s>"))
print(tokenizer._convert_token_to_id("</s>"))
2
1
</s>
<s>
1
1
2 我执行finetune后,测试结果
官方提供的权重
代码没有变化只能更改了权重,请两位大佬帮我看看问题出在哪? @rookiebird @Facico |
pip uninstall transformers 可是还是停不下来 直到达到max_tokens限制才会停止。。@Facico 想问问 你有遇到类似情况么? 另外如果用提供的web端,也类似情况。而且还输出
|
@sevenold 你的问题解决了么?我发现我的和你遇到问题一模一样 |
#59 (comment) |
@wilson9x1 @Facico 两位大佬,print(tokenizer._convert_token_to_id(tokenizer.bos_token)) 这个我总是1,不是0,怎么解决呢 |
@summer-silence 这里参考一下看看 |
1、执行generate.sh,设置Max new tokens=256,所有问题的结果都会生成至256才停止,即使代码里取消eos的设置,仍然如此
2、执行interaction.sh,设置max_new_tokens=128,回答也是如此,代码中并未设置eos信息,
The text was updated successfully, but these errors were encountered: