聊聊ChatGLM3多用户并发API调用的问题

转载请备注出处:https://www.cnblogs.com/zhiyong-ITNote

背景

目前在公司内部4张A10的GPU服务器上部署了ChatGLM3开源模型;然后部署了官方默认的web_demoapi_demo两种模式;重新设计了前端,支持H5和安卓两个客户端调用。但却发现了不能并发访问的问题。

问题现象

在安卓与H5同时调用ChatGLM的API接口(流式接口)时,其中有一个客户端的返回是正常的,而另一个客户端返回却是乱码(解码后是空数据),同时模型报错。报错内容与问题请看issue


官方回复如下:

后来我测试用多卡部署模型,比如3卡,此时可以支持3个以下的用户调用,但再多就不行了。

问题分析

由于非AI相关科班出身也不是专门做这个的,因此一下子还有点棘手;后来在智谱AI开放平台的使用指南-速率限制指南 一文中,发现其支持并发调用,只是说有并发数限制。因此我分析来说,应该是放出来的模型与开放平台上的模型有一定的区别,而这个区别就在于模型的并发能力。毕竟外部API调用时,最终还是调用模型内部的流式接口/非流式接口。也就是说,这个模型内部的接口并不支持并行计算。

从模型的内部来说,其是transformer神经网络结构,但其并发能力却没有这么简单,毕竟模型涉及到的计算量是巨大的。归根来说,还是transformer的并行计算能力。

后来找到个遇到同样情况的博文,不过和我们的部署方式还是有区别的。mosec部署chatglm2-6B 一文中分析了下其遇到的问题与解决方案,至此我大概也清楚了并发调用模型API时为什么会返回乱码(空数据)。

原因与解决策略

当并发调用时,其中模型已经处理完了一个request后,返回的tensor识别了eos_token,模型会认为已经处理完了所有的request,因此返回空数据。

那么从这里来说的话,我暂时想到的解决策略:模型内部按batch来处理request。

这个代码不好改,应该有开源的实现和解决策略。后来我又想到了LLaMA-Factory这个微调框架,他们也是有api_demo的,应该也会遇到这样的问题,因此提了个Issue,还好最终有另外的解,见issue

LLaMA-Factory官方通过vllm实现了并发流式,暂时还没验证,简单看了下代码,理论上是冒得问题的:


转载请备注出处:https://www.cnblogs.com/zhiyong-ITNote

首发于个人公众号

相关推荐
蔡不菜和他的uU们10 小时前
vLLM实践之个人AI基建——云端vLLM+SSH Tunnel+本地Cherry Studio
人工智能·ssh·vllm
likerhood15 小时前
服务器使用 vLLM 部署 Qwen2.5-Coder-7B-CL 笔记
服务器·笔记·vllm
一只努力的微服务16 小时前
vLLM vs SGLang 深度技术对比
vllm·sglang
做个文艺程序员2 天前
第08篇:K8s 部署 AI 大模型推理服务:GPU 调度 × vLLM × Java 客户端集成——从 0 到生产的完整方案
人工智能·kubernetes·vllm
reset20213 天前
vllm性能优化
性能优化·vllm
我叫张土豆3 天前
V100 显卡部署 Qwen3-ASR-1.7B 语音识别模型(vLLM + Docker 完整教程)
docker·语音识别·vllm
碳基硅坊4 天前
MTP在vLLM与llama.cpp上的性能对比:Qwen3.6与Gemma4实测
人工智能·vllm·llama.cpp·模型加速·mtp
Soonyang Zhang4 天前
vllm分析(八)——deepseek v4 Attention (SWA + CSA + HCA)
vllm·推理框架·kv cache
Soonyang Zhang5 天前
vllm分析(七)——模型结构分析(llama, qwen3moe)
vllm·推理框架
陈 洪 伟5 天前
大模型推理引擎vLLM(25): 从--kv-cache-dtype fp8_e5m2时gsm8k答非所问的bug梳理kv cache相应代码片段
vllm·kvcache