Skip to content
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

用 openai_api_server.py 运行 glm-4-9b-chat 可能会重复输出 #599

Open
1 of 2 tasks
oubeichen opened this issue Oct 17, 2024 · 7 comments
Open
1 of 2 tasks
Assignees

Comments

@oubeichen
Copy link

oubeichen commented Oct 17, 2024

System Info / 系統信息

以前也有类似问题,#476

Python 3.11
RTX 4090 x 2

今天发现问题之后, 我现在下载了最新 modelscope 上的 tokenization_chatglm.py (129d6b0e) 和 最新的 basic_demo(4e9b473),并新建环境安装了里面的 requirements.txt(取消注释了 vllm 那一列手动安装了 vllm 0.6.2, torch 被降级到了 2.4.0. )

因为内容比较短,我直接使用全默认值(最大长度8092, 单显卡),除了 MODEL_PATH 指向了本地目录.

Who can help? / 谁可以帮助到您?

@zRzRzRzRzRzRzR @zhipuch

Information / 问题信息

  • The official example scripts / 官方的示例脚本
  • My own modified scripts / 我自己修改的脚本和任务

Reproduction / 复现过程

MODEL_PATH=/path/to/model python openai_api_server.py

请求 python代码如文件:

request.txt

本质上就是如下这么一段对话,我现在的提示词比这复杂多了,但用原来issue的那套提示词的这个例子足够了.

之前能够在每段对话前后加上换行解决,这次前后也加上了换行但问题依旧.

data=json.dumps({
                "messages": [
                    {
                        "content":'''
你的任务是从用户输入文章内容中提取用户输入关键词。
以JSON格式输出结果,不用带上代码格式比如 ```json ```。
只输出中只包含用户提及的字段,不要猜测任何用户未直接提及的字段,不要包含任何注释。
你给出的任何日期都按照 “2024-04-20” 格式,任何时间都按照 “2024-04-20 01:23:30” 这样的格式提取。如果关键词无法表示为对应格式,可直接忽略,不要返回“2024年01月01日”这样的格式。
没有符合条件的关键词,则直接返回空,不要返回一个猜测的名字。

举例:
===================
从用户输入文章内容中提取用户输入关键词(用户输入的关键词每一个都以逗号或者顿号分隔开):

用户输入关键词:
文章日期、文章时间、地点、作者、文章名字

用户输入文章内容:
在2024年4月1日下午两点一个风和日丽的上午,作为报社核心作者的小明去到了景山公园的湖边,写下了一篇美丽的文章,但还没想好文章名字。

输出结果如下:
{"文章日期": ["2024-04-01"], "文章时间": ["2024-04-01 14:00:00"], "地点":  ["景山公园的湖边"], "作者": ["小明"], "文章名字": []}
===================
''',
                        "role": "system"
                    },
                    {
                        "content": '''
任务内容:
===================
用户输入关键词:
标题

用户输入文章内容:
标题:这是一个长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长的标题

===================
''',
                        "role": "user"
                    }
                ]

返回结果:

{'model': 'glm-4-9b-chat', 'id': 'chatcmpl-0UAqFzWsDK4FrUMp48Y3tT3QDgAL4', 'object': 'chat.completion', 'choices': [{'index': 0, 'message': {'role': 'assistant', 'content': '{"标题": ["这是一个长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长', 'function_call': None, 'tool_calls': None}, 'finish_reason': 'stop'}], 'created': 1729162441, 'system_fingerprint': 'fp_7D1qXIaSy', 'usage': {'prompt_tokens': 861, 'total_tokens': 1885, 'completion_tokens': 1024}}

Expected behavior / 期待表现

正常输出结果.
感觉模型本身大概就是这样子了,主要看看有没有什么通用的办法去避免这个问题.

@wyf-cyber
Copy link

wyf-cyber commented Oct 21, 2024

我也是这样的,这种结构化的输出编写了一两百的训练数据用LoRA微调一下应该就可以了。

@Jimmy-L99
Copy link

请教一下你运行openai_api_server.py的vllm版本和transformers版本,我也想跑这个,但老报错

@sixsixcoder
Copy link
Collaborator

sixsixcoder commented Oct 22, 2024

GLM-4使用vllm 0.5.x的版本可以正常运行,GLM-4暂时不支持最新版本的vllm,transformers版本最好<=4.44

@sixsixcoder sixsixcoder self-assigned this Oct 22, 2024
@oubeichen
Copy link
Author

GLM-4使用vllm 0.5.x的版本可以正常运行,GLM-4暂时不支持最新版本的vllm,transformers版本最好<=4.44

pip install "vllm<0.6" "transformers<4.45"

安装了

transformers-4.44.2 vllm-0.5.5 vllm-flash-attn-2.6.1

问题依旧。

@oubeichen
Copy link
Author

我也是这样的,这种结构化的输出编写了一两百的训练数据用LoRA微调一下应该就可以了。

大概是怎样的训练数据呢?因为我之前的测试是微调后反而更容易出现这种无限重复输出的问题。

@Jimmy-L99
Copy link

@oubeichen
可以参照一下命名实体识别教程,网上搜一下比较多。数据格式也是按照:

{
    "messages": [{"role": "user", "content": ""}, {"role": "assistant", "content": ""}]
}

我看你的例子,大概就是把文章内容填入"user"的"content",然后把你想要的输出比如{"文章日期": ["2024-04-01"], "文章时间": ["2024-04-01 14:00:00"], "地点": ["景山公园的湖边"], "作者": ["小明"], "文章名字": []}填入"assistant"的"content"。

@oubeichen
Copy link
Author

@sixsixcoder 请问是如何完成的呢?应该不是使用LoRA自己微调吧?我之前试过,在其他情况下出问题概率更大,会有其他更多答非所问的,在生产环境无法接受,所以现在很少使用。

@sixsixcoder sixsixcoder reopened this Nov 11, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants