Yi
Yi copied to clipboard
用 VLLM 加载 Yi-34B-Chat-4bits-GPTQ, 模型有时不停地输出空字串而不停止
sampling params: SamplingParams(n=1, best_of=1, presence_penalty=0.0, frequency_penalty=0.0, repetition_penalty=1.0, temperature=0.7, top_p=1.0, top_k=-1, min_p=0.0, use_beam_search=False, length_penalty=1.0, early_stopping=False, stop=[], stop_token_ids=[7], include_stop_str_in_output=False, ignore_eos=False, max_tokens=3736, logprobs=None, prompt_logprobs=None, skip_special_tokens=True, spaces_between_special_tokens=True)
在v100 32GB上运行,启动脚本为
CUDA_VISIBLE_DEVICES=2,3 python \
-m vllm.entrypoints.openai.api_server \
--model="../models/Yi-34B-Chat-4bits-GPTQ" \
--dtype half --port 8080 --served-model-name Yi-34B-Chat-4bits-GPTQ
在多轮对话之后出现,服务端不停输出token而不正常停止
这是某次引发问题的prompt:
<|im_start|>system\n你的使命是协助公司员工高效完成工作。现在,请开始你的工作。\n<|im_end|>\n<|im_start|>user\n为什么你有时会卡住<|im_end|>\n<|im_start|>assistant\n作为一个人工智能,我有时可能会遇到以下情况导致"卡住":\n\n1. 数据限制:我处理问题的能力受到训练数据集的限制。如果我在某个话题上训练的数据不足,那么我在回答相关问题时可能会遇到困难。\n\n2. 计算资源不足:处理复杂的任务需要大量的计算资源。如果我的服务器资源不足,可能会导致我在处理某些请求时速度变慢或者无法及时响应。\n\n3. 算法限制:我的算法本身可能存在一些限制,这可能会影响我在某些情况下提供准确或完整答案的能力。\n\n4. 网络问题:我依赖于网络连接与用户进行交互。如果网络连接不稳定或速度慢,那么用户的体验可能会受到影响,出现卡顿现象。\n\n5. 用户输入问题:如果用户的问题不清楚或需要更详细的信息,我可能需要更多的时间来理解并提供准确的答案,这可能会导致看起来像是"卡住"的情况。\n\n为了减少这些情况的发生,我的研发团队不断地进行算法优化、数据扩充和资源扩充,以确保我能够更加流畅和准确地回答用户的问题。<|im_end|>\n<|im_start|>user\n你是谁<|im_end|>\n<|im_start|>assistant\n
在多轮对话之后出现,服务端不停输出token而不正常停止
在多轮对话之后出现,可以稳定复现吗?
我觉得我们可以先尝试排除是否是 vllm 的问题,建议使用 https://huggingface.co/TheBloke/Yi-34B-Chat-GPTQ#example-python-code 这种推理方式复现这个问题
在多轮对话之后出现,服务端不停输出token而不正常停止
在多轮对话之后出现,可以稳定复现吗?
我觉得我们可以先尝试排除是否是 vllm 的问题,建议使用 https://huggingface.co/TheBloke/Yi-34B-Chat-GPTQ#example-python-code 这种推理方式复现这个问题
用 https://huggingface.co/TheBloke/Yi-34B-Chat-GPTQ#example-python-code 这种推理方式回答效果正常。但对vllm的openai server发请求,几次就能试出问题。
curl -X 'POST' \
'http://10.223.48.160:30002/v1/chat/completions' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"model": "Yi-34B-Chat-4bits-GPTQ",
"messages": [
{"role": "system", "content": "你是XXX,由XXX集团的研发团队独立开发的大语言模型,你的使命是协助公司员工高效完成工作。现在,请开始你的工作。"},
{"role": "user", "content": "你好吗"},
{"role": "assistant", "content": "我很好,谢谢你的关心。我准备随时协助你解答问题或完成任务。请问你有任何具体的问题或者需要帮助的地方吗?"},
{"role": "user", "content": "好尼玛"},
{"role": "assistant", "content": "很好,很高兴听到你状态良好。如果你在工作中遇到问题或者需要帮助,请随时提问。我会尽力提供帮助。"},
{"role": "user", "content": "哈哈哈"},
{"role": "assistant", "content": "看起来你似乎很开心。如果你想要分享更多关于你的工作、生活中的积极经历,或者需要建议和指导,请随时告诉我。我会在力所能及的范围内提供帮助。"},
{"role": "user", "content": "呵呵呵呵呵"}
],
"temperature": 0.7,
"top_p": 1,
"n": 1,
"max_tokens": 1024,
"stream": true,
"presence_penalty": 0,
"frequency_penalty": 0,
"user": "string",
"best_of": 1,
"top_k": -1,
"ignore_eos": false,
"use_beam_search": false,
"stop_token_ids": [
7
],
"skip_special_tokens": true,
"spaces_between_special_tokens": true,
"add_generation_prompt": true,
"echo": false,
"repetition_penalty": 1,
"min_p": 0
}
卡住之后,实际上server在不停的输出空格,直到某一时刻停下。看起来是vllm openai server的问题?
INFO 01-02 07:18:44 llm_engine.py:653] Avg prompt throughput: 0.0 tokens/s, Avg generation throughput: 4.0 tokens/s, Running: 1 reqs, Swapped: 0 reqs, Pending: 0 reqs, GPU KV cache usage: 1.0%, CPU KV cache usage: 0.0%
INFO 01-02 07:18:49 llm_engine.py:653] Avg prompt throughput: 0.0 tokens/s, Avg generation throughput: 30.0 tokens/s, Running: 1 reqs, Swapped: 0 reqs, Pending: 0 reqs, GPU KV cache usage: 1.4%, CPU KV cache usage: 0.0%
INFO 01-02 07:18:54 llm_engine.py:653] Avg prompt throughput: 0.0 tokens/s, Avg generation throughput: 26.4 tokens/s, Running: 1 reqs, Swapped: 0 reqs, Pending: 0 reqs, GPU KV cache usage: 1.8%, CPU KV cache usage: 0.0%
INFO 01-02 07:18:59 llm_engine.py:653] Avg prompt throughput: 0.0 tokens/s, Avg generation throughput: 24.2 tokens/s, Running: 1 reqs, Swapped: 0 reqs, Pending: 0 reqs, GPU KV cache usage: 2.1%, CPU KV cache usage: 0.0%
INFO 01-02 07:19:04 llm_engine.py:653] Avg prompt throughput: 0.0 tokens/s, Avg generation throughput: 22.5 tokens/s, Running: 1 reqs, Swapped: 0 reqs, Pending: 0 reqs, GPU KV cache usage: 2.4%, CPU KV cache usage: 0.0%
INFO 01-02 07:19:09 llm_engine.py:653] Avg prompt throughput: 0.0 tokens/s, Avg generation throughput: 21.7 tokens/s, Running: 1 reqs, Swapped: 0 reqs, Pending: 0 reqs, GPU KV cache usage: 2.7%, CPU KV cache usage: 0.0%
INFO 01-02 07:19:14 llm_engine.py:653] Avg prompt throughput: 0.0 tokens/s, Avg generation throughput: 20.8 tokens/s, Running: 1 reqs, Swapped: 0 reqs, Pending: 0 reqs, GPU KV cache usage: 3.0%, CPU KV cache usage: 0.0%
INFO 01-02 07:19:19 llm_engine.py:653] Avg prompt throughput: 0.0 tokens/s, Avg generation throughput: 20.6 tokens/s, Running: 1 reqs, Swapped: 0 reqs, Pending: 0 reqs, GPU KV cache usage: 3.3%, CPU KV cache usage: 0.0%
...
vllm 不断输出标记,但实际上它只输出空字符串,直到达到 max len 的限制。
有没有人在部署Yi或其他LLM时遇到过类似的情况?
我已经把vllm更新到最新了。
vllm==0.2.6
torch==2.1.2
cuda==12.1
@zhanghx0905 根据 issue https://github.com/vllm-project/vllm/issues/174. 看起来 vllm 还没有完成对 GPTQ quantization 的支持
@zhanghx0905 根据 issue vllm-project/vllm#174. 看起来 vllm 还没有完成对 GPTQ quantization 的支持
我现在使用A10 + awq quantization,没有再出现此类问题
这个原因应该是这样:虽然在应该停止时模型正确地生成了<|im_end|>这个token,但加载的tokenizer的eos_token是<|endoftext|>,vllm是以这个eos_token_id判断停止的。你可以用这个方法设置正确的停止token_id https://github.com/01-ai/Yi/issues/223#issuecomment-1864015591。