Closed oubeichen closed 3 months ago
不是,是因为没有做单独判断,tool calll在官方代码是单独实现的,用了规则处理
我会在多卡测试一下,你出现这个问题的复现语句是?
我会在多卡测试一下,你出现这个问题的复现语句是?
你可以参考我在上面正文发的这两个附件GLM4Prompt.txt GLM4_request.txt,前者是我拼好的 prompt,可能不是很准确但大差不差,后者是 openai 库日志记录的请求信息。
你好,我按你的代码改动和prompt复现没发现重复输出的问题
你好,我按你的代码改动和prompt复现没发现重复输出的问题
我试了下重新安装了 python 虚拟环境还是有问题
具体修改:
https://github.com/oubeichen/GLM-4/commit/bf2585cbcf6d372cb917caa1204119ef9380991e#diff-f6c09858408807615bba26a40410ec01bc0bcb7ca9cbe37ea14231691948d7a2 这次直接全新环境安装 requirements.txt 。
我的机器是用的 autodl 的
PyTorch / 2.3.0 / 3.12(ubuntu22.04) / 12.1
镜像,用 conda create -n my-env python=3.11
装上了 python 3.11,配置是 RTX 4090 x 2,系统是 ubuntu 22.04, CUDA 是 12.1, Nvidia Driver 我试了两种机器一个是 535 驱动,一个是 550 驱动,都一样。
对 /v1/chat/completions
请求的 body(我特意设置了max_tokens,避免长时间卡住,另外服务被我映射到本机 localhost:8002 端口):
对应的 CURL 请求,供参考(可以修改成后缀 .sh 来执行): GLM4_request_curl.txt
对应的 python 语句,供参考(可以修改成 .py 来执行): GLM4_request_python.txt
其他尝试:
modelscope download --model zhipuai/glm-4-9b-chat --local_dir glm-4-9b-chat
# find . -type f -exec sha256sum {} \;
d135f1555ed1036be6eda988fc6ae365cdc8a8122aff0bf6d0602c1e1c93bee6 ./config.json
1830142d07d5ff305266e056e32568af74f0fa52c5edca84dfa72dcf0ed0d713 ./.msc
9aab662b490910d41e19e7a4599f97f2027f738407ecf35179b0035b6c012d32 ./configuration.json
db714e8a9f7532eb2b6bfd4df01d24c700b373d2ab76b81eff0fe5a2617edb11 ./configuration_chatglm.py
1e3ca4066f68268a0e9156fbf67a51fc83adb46d4a1a4fdd51ea814cd6e50b59 ./generation_config.json
fd0689724426a3adbc3c8866e85a14c63b1c02df220a371e38699cda47ee276e ./LICENSE
d0040c9cf0d4d0553c4156dbd890437788ba43237037e1f9c4a3c1a3ddfad1f6 ./model-00001-of-00010.safetensors
f9163d47c6e1073d68fb03f933122e2ece0b30ce43b5309da15b783e93a34ad4 ./model-00002-of-00010.safetensors
28031e88b92dc942b47ac4dd0e73b2ce749fc87fc692a3ed72e1bdec74996968 ./model-00003-of-00010.safetensors
708ef7836140bd1822253cae05f5891ea02cedbe4c8ef8b096f712cdfdc9b01e ./model-00004-of-00010.safetensors
c390a67a568f7f3d440a3c3357b4d08c0539435ea6d7a36baa4a4f0274740ae5 ./model-00005-of-00010.safetensors
32e0d285c514e750e78ae42630a498ec526db4caba993fc2ea7226069410d1e7 ./model-00006-of-00010.safetensors
165687aa1873e91d13bf404ff91a4d702f79c5301f43c2645eabb45f17808cb2 ./model-00007-of-00010.safetensors
5388bffb210043271cded04b28a5fae2eeeb31b64b695b62638d9b856e322033 ./model-00008-of-00010.safetensors
449241babb7ce69a835c121efa26d9fd8823554ed0c8acd2af6666f482dd6809 ./model-00009-of-00010.safetensors
2544b92fc4f1cb511b31a6b06021a3136de0705436db6731d30ec5b8a2be80f6 ./model-00010-of-00010.safetensors
d153206225f09b11759dce2b36d32a7d65f36f00818535853bb0e3905038401a ./model.safetensors.index.json
4fb2cc3c395409f1dce729d401dfaa905ab031840ab550de01a2da234412842d ./modeling_chatglm.py
3e0e87996c46b81e089a16adcbc43704681d5d768cfe0d4d31c2b8c6c10bcaf6 ./README.md
607860825ff4e4e2037628e9b985bbc83d1823360df6535972e21c4d514b8566 ./README_en.md
433ac2103c9fec72e70935bf3a9f05054a48aa3805ecd8bdd09f1c209d2ded21 ./tokenization_chatglm.py
5a493598071550244b2ee7f26118f3edec2150b9dfa967929a99052ac83fe716 ./tokenizer.model
24fe6f10f57828538ebb6bd313ee619d459ac7f77a00789d7c6b2860038548a2 ./tokenizer_config.json
a59fa20488a06e382689a00234c21423fcb680d23c2326118caa99baca557166 ./.mv
均无效果
- 你可以试一下官方提供的request脚本
- 我使用你的request脚本进行复现,发现一个比较显著的问题,在拼接message的时候长文本最好用'''content''',单引号和双引号会不小心抵消或者冲突,修改完之后运行成功。 request.txt
这个是 RapidAPI 生成的文件,我之前也发现有问题改过,但是上传不知道咋的传错文件了,不好意思。
我看了下主要是在两条 message 的 content 前后有没有换行的区别。你发的文件所有 content 前后都加上了换行,所以运行没有问题。我刚才下载运行,也没有问题。 但是我之前的是 content 前后都没有换行,所以出现了问题。 (删掉 request.txt 里面 content 前后所有换行, 或者执行上面给的 GLM4_request_curl.txt 里面的命令,都可以复现问题)
其实以前用一些早期LLM也遇到过这个问题,输入最后必须带换行,否则没法让LLM知道输入已经结束。现在大部分LLM或者运行的框架都没这个问题。而且这个问题在输入比较短的时候也不会出现,我就没怎么注意了。
感觉我先暂时把所有输入前后都手动带上换行吧。
System Info / 系統信息
Python 3.11 RTX 4090 x 2,用过 535 和 550 驱动,问题依旧 已经使用了当前最新的模型文件(modelscope上)和最新的GLM-4 basic_demo 目录下的 requirements.txt 依赖
Who can help? / 谁可以帮助到您?
No response
Information / 问题信息
Reproduction / 复现过程
我需要做一个长文本提取关键词的应用,所以在 openai_api_server.py 的基础上修改了 MAX_MODEL_LENGTH 为 32000 和这一行 https://github.com/THUDM/GLM-4/blob/6af85cd4003fadbbf05b593ed25f9dd01e8dfe6c/basic_demo/openai_api_server.py#L355
的 1024 更改为 16000,使得可以支持更长上下文和输出。
这一行 https://github.com/THUDM/GLM-4/blob/6af85cd4003fadbbf05b593ed25f9dd01e8dfe6c/basic_demo/openai_api_server.py#L670 修改为 2,使得可以支持两张显卡。另外安装了 requirements.txt 里的 flash-attn 和 peft(因为没有 0.12.2 安装的 0.12.0),用作微调的准备,其他就没有做过多修改了。
然后在调用的时候,发现如果文本稍微长一点,则经常会出现API卡住的情况,其实是在不断输出结果直到上限。 以下是我拼好的 prompt,太长直接上传成 txt。 其中,
任务内容:
以上部分在 role: system 里面,任务内容:
以及以下部分在 role: user 里面。GLM4Prompt.txt
GLM4_request.txt
以下是结果的前面部分,后面基本上就是
铯领柏
无限重复。Expected behavior / 期待表现
正常返回结果
我发现部分第三方平台也可以使用 glm-4-9b-chat 这个模型,而且没有这个卡住问题,能正常返回结果。但他们的模型不支持 tool_call,有可能基底并不是用的 vllm。