聊聊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

首发于个人公众号

相关推荐
HyperAI超神经10 小时前
【vLLM 学习】Load Sharded State
llm·大语言模型·内存管理·vllm·推理加速·kv 缓存·中文文档
hlsilent9 天前
关于vllm【常见问题解决方案】
linux·经验分享·笔记·ai·大模型·llm·vllm
强哥之神24 天前
深入解析 vLLM 分布式推理与部署策略
深度学习·语言模型·架构·llm·transformer·vllm
救救孩子把2 个月前
使用 uv 工具快速部署并管理 vLLM 推理环境
大模型·模型部署·uv·虚拟环境·vllm
橙子小哥的代码世界2 个月前
【大模型部署】mac m1本地部署 ChatGLM3-6B 超详细教程
深度学习·神经网络·macos·大模型·transformer·chatglm·踩坑记录
小胡说人工智能3 个月前
深度剖析:Dify+Sanic+Vue+ECharts 搭建 Text2SQL 项目 sanic-web 的 Debug 实战
人工智能·python·llm·text2sql·dify·vllm·ollama
奔跑中的小象3 个月前
基于 nvitop+Prometheus+Grafana 的物理资源与 VLLM 引擎服务监控方案
grafana·prometheus·vllm·nvitop
为啥全要学3 个月前
vLLM部署Qwen2-7B模型推理
python·langchain·vllm
Nicolas8933 个月前
【大模型实战篇】华为信创环境采用vllm部署QwQ-32B模型
华为·信创·模型部署·昇腾·ascend·vllm·模型推理
engchina4 个月前
来自B站AIGC科技官的“vLLM简介“视频截图
人工智能·vllm