Closed MrInouye closed 4 months ago
需要设置sampling params,sampling_params = SamplingParams(temperature=0.3, top_k=5, top_p=0.85, max_tokens=1024, stop=["."]
)
需要设置sampling params,sampling_params = SamplingParams(temperature=0.3, top_k=5, top_p=0.85, max_tokens=1024, stop=["."] # repetition_penalty=1.05 )
设置了也还是一样,只生成句号
我之前遇到的同样的问题,是因为max_tokens默认最大值是16,所以有的数据生成一点就被截断了,后来我设置了这个参数就好了。还有一种解决方案,先将prompt过一遍tokenizer,以prompt_ids的形式输入,我之前在batch推理时,遇到了只生成一个句号的情况,通过这种方式解决了
仵允港 @.***
------------------ 原始邮件 ------------------ 发件人: @.>; 发送时间: 2023年11月14日(星期二) 下午5:03 收件人: @.>; 抄送: @.>; @.>; 主题: Re: [vllm-project/vllm] baichuan-13b-chat用vllm来生成,很多测试数据(有长有短,没有超出长度限制)只能生成一个句号,而且有些示例在删掉一些字词或句子之后,就可以正常生成了,请问有可能是什么原因? (Issue #1643)
需要设置sampling params,sampling_params = SamplingParams(temperature=0.3, top_k=5, top_p=0.85, max_tokens=1024, stop=["."] # repetition_penalty=1.05 )
设置了也还是一样,只生成句号
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>
我之前遇到的同样的问题,是因为max_tokens默认最大值是16,所以有的数据生成一点就被截断了,后来我设置了这个参数就好了。还有一种解决方案,先将prompt过一遍tokenizer,以prompt_ids的形式输入,我之前在batch推理时,遇到了只生成一个句号的情况,通过这种方式解决了 仵允港 @. … ------------------ 原始邮件 ------------------ 发件人: @.>; 发送时间: 2023年11月14日(星期二) 下午5:03 收件人: @.>; 抄送: @.>; @.>; 主题: Re: [vllm-project/vllm] baichuan-13b-chat用vllm来生成,很多测试数据(有长有短,没有超出长度限制)只能生成一个句号,而且有些示例在删掉一些字词或句子之后,就可以正常生成了,请问有可能是什么原因? (Issue #1643) 需要设置sampling params,sampling_params = SamplingParams(temperature=0.3, top_k=5, top_p=0.85, max_tokens=1024, stop=["."] # repetition_penalty=1.05 ) 设置了也还是一样,只生成句号 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.>
我尝试过但是出现问题。
我只输入prompt,然后vllm的返回结果可以显示我输入的prompt和对应的prompt_token_ids。、
但是我用百川的tokenizer将prompt_token_ids解码成中文,发现是乱码的。
并且用百川的tokenizer将prompt转成prompt_token_ids,输入vllm会报错。
我在之前测试batch推理时,遇到过你说的第一种情况,我当时对比了直接用tokenizer做encoder和用vllm做的encoder,我发现两者并不相同,我用的也是baichuan13b。后来我直接先过一遍tokenizer.encoder,调用vllm时,输入prompt_token_ids.
然后测试就是正常的了。当然,你的模型加载dtype是否是half?如果是half生成效果会降低的。改成float16
仵允港 @.***
------------------ 原始邮件 ------------------ 发件人: @.>; 发送时间: 2023年11月14日(星期二) 下午5:19 收件人: @.>; 抄送: @.>; @.>; 主题: Re: [vllm-project/vllm] baichuan-13b-chat用vllm来生成,很多测试数据(有长有短,没有超出长度限制)只能生成一个句号,而且有些示例在删掉一些字词或句子之后,就可以正常生成了,请问有可能是什么原因? (Issue #1643)
我之前遇到的同样的问题,是因为max_tokens默认最大值是16,所以有的数据生成一点就被截断了,后来我设置了这个参数就好了。还有一种解决方案,先将prompt过一遍tokenizer,以prompt_ids的形式输入,我之前在batch推理时,遇到了只生成一个句号的情况,通过这种方式解决了 仵允港 @. … ------------------ 原始邮件 ------------------ 发件人: @.>; 发送时间: 2023年11月14日(星期二) 下午5:03 收件人: @.>; 抄送: @.>; @.>; 主题: Re: [vllm-project/vllm] baichuan-13b-chat用vllm来生成,很多测试数据(有长有短,没有超出长度限制)只能生成一个句号,而且有些示例在删掉一些字词或句子之后,就可以正常生成了,请问有可能是什么原因? (Issue #1643) 需要设置sampling params,sampling_params = SamplingParams(temperature=0.3, top_k=5, top_p=0.85, max_tokens=1024, stop=["."] # repetition_penalty=1.05 ) 设置了也还是一样,只生成句号 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.>
我尝试过但是出现问题。
我只输入prompt,然后vllm的返回结果可以显示我输入的prompt和对应的prompt_token_ids。、
但是我用百川的tokenizer将prompt_token_ids解码成中文,发现是乱码的。
并且用百川的tokenizer将prompt转成prompt_token_ids,输入vllm会报错。
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>
我在之前测试batch推理时,遇到过你说的第一种情况,我当时对比了直接用tokenizer做encoder和用vllm做的encoder,我发现两者并不相同,我用的也是baichuan13b。后来我直接先过一遍tokenizer.encoder,调用vllm时,输入prompt_token_ids. 然后测试就是正常的了。当然,你的模型加载dtype是否是half?如果是half生成效果会降低的。改成float16 仵允港 @. … ------------------ 原始邮件 ------------------ 发件人: @.>; 发送时间: 2023年11月14日(星期二) 下午5:19 收件人: @.>; 抄送: @.>; @.>; 主题: Re: [vllm-project/vllm] baichuan-13b-chat用vllm来生成,很多测试数据(有长有短,没有超出长度限制)只能生成一个句号,而且有些示例在删掉一些字词或句子之后,就可以正常生成了,请问有可能是什么原因? (Issue #1643) 我之前遇到的同样的问题,是因为max_tokens默认最大值是16,所以有的数据生成一点就被截断了,后来我设置了这个参数就好了。还有一种解决方案,先将prompt过一遍tokenizer,以prompt_ids的形式输入,我之前在batch推理时,遇到了只生成一个句号的情况,通过这种方式解决了 仵允港 @. … ------------------ 原始邮件 ------------------ 发件人: @.>; 发送时间: 2023年11月14日(星期二) 下午5:03 收件人: @.>; 抄送: @.>; @.>; 主题: Re: [vllm-project/vllm] baichuan-13b-chat用vllm来生成,很多测试数据(有长有短,没有超出长度限制)只能生成一个句号,而且有些示例在删掉一些字词或句子之后,就可以正常生成了,请问有可能是什么原因? (Issue #1643) 需要设置sampling params,sampling_params = SamplingParams(temperature=0.3, top_k=5, top_p=0.85, max_tokens=1024, stop=["."] # repetition_penalty=1.05 ) 设置了也还是一样,只生成句号 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.> 我尝试过但是出现问题。 我只输入prompt,然后vllm的返回结果可以显示我输入的prompt和对应的prompt_token_ids。、 但是我用百川的tokenizer将prompt_token_ids解码成中文,发现是乱码的。 并且用百川的tokenizer将prompt转成prompt_token_ids,输入vllm会报错。 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.>
我看vllm的代码里面也是直接加载的AutoTokenizer,然后调用的tokenizer.encode(),不知道为什么会不一样。
你直接先过一遍tokenizer.encoder,是用的vllm做的encoder吗,怎么调用vllm的encode?
我加载vllm的时候是用的 dtype='float16'
我也看了源码并没有不一样,但是采用prompt_token_ids的推理才有正确结果。具体原因我也不太清除。我是预加载baichuan的tokenizer,先用它做tokenizer.encoder,用得到的token_id输入到vllm中
仵允港 @.***
------------------ 原始邮件 ------------------ 发件人: @.>; 发送时间: 2023年11月14日(星期二) 下午5:37 收件人: @.>; 抄送: @.>; @.>; 主题: Re: [vllm-project/vllm] baichuan-13b-chat用vllm来生成,很多测试数据(有长有短,没有超出长度限制)只能生成一个句号,而且有些示例在删掉一些字词或句子之后,就可以正常生成了,请问有可能是什么原因? (Issue #1643)
我在之前测试batch推理时,遇到过你说的第一种情况,我当时对比了直接用tokenizer做encoder和用vllm做的encoder,我发现两者并不相同,我用的也是baichuan13b。后来我直接先过一遍tokenizer.encoder,调用vllm时,输入prompt_token_ids. 然后测试就是正常的了。当然,你的模型加载dtype是否是half?如果是half生成效果会降低的。改成float16 仵允港 @. … ------------------ 原始邮件 ------------------ 发件人: @.>; 发送时间: 2023年11月14日(星期二) 下午5:19 收件人: @.>; 抄送: @.>; @.>; 主题: Re: [vllm-project/vllm] baichuan-13b-chat用vllm来生成,很多测试数据(有长有短,没有超出长度限制)只能生成一个句号,而且有些示例在删掉一些字词或句子之后,就可以正常生成了,请问有可能是什么原因? (Issue #1643) 我之前遇到的同样的问题,是因为max_tokens默认最大值是16,所以有的数据生成一点就被截断了,后来我设置了这个参数就好了。还有一种解决方案,先将prompt过一遍tokenizer,以prompt_ids的形式输入,我之前在batch推理时,遇到了只生成一个句号的情况,通过这种方式解决了 仵允港 @. … ------------------ 原始邮件 ------------------ 发件人: @.>; 发送时间: 2023年11月14日(星期二) 下午5:03 收件人: @.>; 抄送: @.>; @.>; 主题: Re: [vllm-project/vllm] baichuan-13b-chat用vllm来生成,很多测试数据(有长有短,没有超出长度限制)只能生成一个句号,而且有些示例在删掉一些字词或句子之后,就可以正常生成了,请问有可能是什么原因? (Issue #1643) 需要设置sampling params,sampling_params = SamplingParams(temperature=0.3, top_k=5, top_p=0.85, max_tokens=1024, stop=["."] # repetition_penalty=1.05 ) 设置了也还是一样,只生成句号 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.> 我尝试过但是出现问题。 我只输入prompt,然后vllm的返回结果可以显示我输入的prompt和对应的prompt_token_ids。、 但是我用百川的tokenizer将prompt_token_ids解码成中文,发现是乱码的。 并且用百川的tokenizer将prompt转成prompt_token_ids,输入vllm会报错。 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.>
我看vllm的代码里面也是直接加载的AutoTokenizer,然后调用的tokenizer.encode(),不知道为什么会不一样。
你直接先过一遍tokenizer.encoder,是用的vllm做的encoder吗,怎么调用vllm的encode?
我加载vllm的时候是用的 dtype='float16'
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>
我也看了源码并没有不一样,但是采用prompt_token_ids的推理才有正确结果。具体原因我也不太清除。我是预加载baichuan的tokenizer,先用它做tokenizer.encoder,用得到的token_id输入到vllm中 仵允港 @. … ------------------ 原始邮件 ------------------ 发件人: @.>; 发送时间: 2023年11月14日(星期二) 下午5:37 收件人: @.>; 抄送: @.>; @.>; 主题: Re: [vllm-project/vllm] baichuan-13b-chat用vllm来生成,很多测试数据(有长有短,没有超出长度限制)只能生成一个句号,而且有些示例在删掉一些字词或句子之后,就可以正常生成了,请问有可能是什么原因? (Issue #1643) 我在之前测试batch推理时,遇到过你说的第一种情况,我当时对比了直接用tokenizer做encoder和用vllm做的encoder,我发现两者并不相同,我用的也是baichuan13b。后来我直接先过一遍tokenizer.encoder,调用vllm时,输入prompt_token_ids. 然后测试就是正常的了。当然,你的模型加载dtype是否是half?如果是half生成效果会降低的。改成float16 仵允港 @. … ------------------ 原始邮件 ------------------ 发件人: @.>; 发送时间: 2023年11月14日(星期二) 下午5:19 收件人: @.>; 抄送: @.>; @.>; 主题: Re: [vllm-project/vllm] baichuan-13b-chat用vllm来生成,很多测试数据(有长有短,没有超出长度限制)只能生成一个句号,而且有些示例在删掉一些字词或句子之后,就可以正常生成了,请问有可能是什么原因? (Issue #1643) 我之前遇到的同样的问题,是因为max_tokens默认最大值是16,所以有的数据生成一点就被截断了,后来我设置了这个参数就好了。还有一种解决方案,先将prompt过一遍tokenizer,以prompt_ids的形式输入,我之前在batch推理时,遇到了只生成一个句号的情况,通过这种方式解决了 仵允港 @. … ------------------ 原始邮件 ------------------ 发件人: @.>; 发送时间: 2023年11月14日(星期二) 下午5:03 收件人: @.>; 抄送: @.>; @.>; 主题: Re: [vllm-project/vllm] baichuan-13b-chat用vllm来生成,很多测试数据(有长有短,没有超出长度限制)只能生成一个句号,而且有些示例在删掉一些字词或句子之后,就可以正常生成了,请问有可能是什么原因? (Issue #1643) 需要设置sampling params,sampling_params = SamplingParams(temperature=0.3, top_k=5, top_p=0.85, max_tokens=1024, stop=["."] # repetition_penalty=1.05 ) 设置了也还是一样,只生成句号 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.> 我尝试过但是出现问题。 我只输入prompt,然后vllm的返回结果可以显示我输入的prompt和对应的prompt_token_ids。、 但是我用百川的tokenizer将prompt_token_ids解码成中文,发现是乱码的。 并且用百川的tokenizer将prompt转成prompt_token_ids,输入vllm会报错。 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.> 我看vllm的代码里面也是直接加载的AutoTokenizer,然后调用的tokenizer.encode(),不知道为什么会不一样。 你直接先过一遍tokenizer.encoder,是用的vllm做的encoder吗,怎么调用vllm的encode? 我加载vllm的时候是用的 dtype='float16' — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.>
好的,感谢~~~
请问解决了吗?我遇到了类似问题,微调好的模型在使用vllm框架生成长对话时总容易中断 Is it solved yet? I have a similar problem, the fine-tuning model is always easy to interrupt when using the vllm frame growth growth dialogue
我尝试了@yungangwu提供的先过tokenizer方法但未生效,代码如下: I tried the first tokenizer method provided by @yungangwu but not effective with the code below:
tokenizer = AutoTokenizer.from_pretrained(model_id)
sampling_params = SamplingParams(temperature=0.3, top_k=5, top_p=0.85, max_tokens=1024, stop=["</s>"])
outputs = llm.generate(sampling_params=sampling_params, prompt_token_ids=model_inputs)
我也遇见了同样的问题, 参考上面将SamplingParams 中的max_tokens 设置大一点就行了.
我已找到问题所在,不算是vllm的问题。我使用的是llama2模型,微调并融合后使用transformer的AutoTokenizer编码会出现问题,但vllm的源码中调用了该函数。使用LlamaTokenizer先编码再传入prompt_token_ids来替代prompts就可以了。这种解决适用于离线批处理,openai风格server需修改vllm的源码
from vllm import LLM, SamplingParams
from transformers import LlamaTokenizer
tokenizer = LlamaTokenizer.from_pretrained(model_id)
llm = LLM(model=model_id)
model_inputs = []
for prompt in prompts:
model_inputs.append(tokenizer(prompt, return_tensors="pt").to("cuda")["input_ids"][0].tolist())
sampling_params = SamplingParams(temperature=0, max_tokens=1024, stop=["</s>"])
outputs = llm.generate(sampling_params=sampling_params, prompt_token_ids=model_inputs)
How about set "do_sample":False
and "temperature":1
?
我调用本地化模型,输出的结果绝了,有兄弟知道什么问题么,或者怎么解决的。
from vllm import LLM, SamplingParams
prompts = [
"你好",
"你是谁"
]
sampling_params = SamplingParams(temperature=0.8, top_p=0.95, max_tokens=100)
llm = LLM(model="/home/trimps/llm_model/baichuan/Baichuan2-13B-Chat",tensor_parallel_size=2,trust_remote_code=True, tokenizer_mode='auto')
outputs = llm.generate(prompts, sampling_params)
#Print the outputs.
for output in outputs:
prompt = output.prompt
generated_text = output.outputs[0].text
print(f"\n\n输出: {generated_text!r}")
输出的是什么玩意~~
LLM.generate
does not apply the chat template. If you must use LLM
, make sure to apply the chat template with the tokenizer first.
However, I'd recommend using the OpenAI compatible server https://docs.vllm.ai/en/latest/serving/openai_compatible_server.html
我调用本地化模型,输出的结果绝了,有兄弟知道什么问题么,或者怎么解决的。
from vllm import LLM, SamplingParams prompts = [ "你好", "你是谁" ] sampling_params = SamplingParams(temperature=0.8, top_p=0.95, max_tokens=100) llm = LLM(model="/home/trimps/llm_model/baichuan/Baichuan2-13B-Chat",tensor_parallel_size=2,trust_remote_code=True, tokenizer_mode='auto') outputs = llm.generate(prompts, sampling_params) #Print the outputs. for output in outputs: prompt = output.prompt generated_text = output.outputs[0].text print(f"\n\n输出: {generated_text!r}")
输出的是什么玩意~~
不能直接对话,要加对话模版,组成完整的prompt才能对。百川的模型我不清楚怎么做,meta的llama可以参考https://llama.meta.com/docs/model-cards-and-prompt-formats/meta-llama-3/ ,百川应该也有类似的。
要让大模型能够对话,需要传入大模型能理解的形式(尤其是经过“指令微调”的模型)。如果是直接输入给大模型,那么大模型仍然只是一个有“续写”功能的模型。
我尝试了(1)增大max_tokens,没啥变化 (2)用AutoTokenizer先对prompts进行处理,也没啥变化 (3)在处理prompts的时候加入chat_template,此时推理正常。具体原因参考是vllm的LLM没有apply chat template
baichuan-13b-chat用vllm来生成,很多测试数据(有长有短,没有超出长度限制)只能生成一个句号,而且有些示例在删掉一些字词或句子之后,就可以正常生成了,请问有可能是什么原因?
import torch from vllm import LLM, SamplingParams sampling_params = SamplingParams(temperature=0, top_p=1, max_tokens=512) prompts_list=["用户遇到问题前来求助客服,他们的对话内容如下:\n'''\n客服:您好,请问是咨询功能的问题吗。\n用户:是的。\n客服:的什么问题。\n用户:问题。\n客服:是**什么。\n用户:我,它说被多少用户举报打不开了。\n客服:被封了对吗。\n用户:是的。\n客服:稍后,会给您来电手机绑定的微信,这是一个入口,您点击那个入口去提交一下被封的复审资料,由工作人员来进行核实的。\n用户:好的好的。\n客服:尽快提交一下,就不打扰您。\n'''\n请根据客服和用户的多轮对话,生成对话总结,总结内容包括两部分:\n1、问题描述:表示的是用户遇到的问题。\n2、客服方案:指的是客服提出的解决方案,如果用户不接受,客服会继续提出其他方案,每个方案都需要总结在“客服方案”部分。"] llm = LLM(model = './Baichuan-13B-Chat', trust_remote_code=True, dtype='float16', tensor_parallel_size=1) outputs=llm.generate(prompts_list, sampling_params) outputs[0].outputs[0].text
输出结果是一个句号