首页 > 其他分享 >聊聊ChatGLM3多用户并发API调用的问题

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

时间:2024-04-09 10:33:43浏览次数:32  
标签:调用 多用户 demo 模型 ChatGLM3 接口 并发 API

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

背景

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

问题现象

在安卓与H5同时调用ChatGLM的API接口(流式接口)时,其中有一个客户端的返回是正常的,而另一个客户端返回却是乱码(解码后是空数据),同时模型报错。报错内容与问题请看issue
image.png
image.png
image.png
官方回复如下:
image.png
后来我测试用多卡部署模型,比如3卡,此时可以支持3个以下的用户调用,但再多就不行了。

问题分析

由于非AI相关科班出身也不是专门做这个的,因此一下子还有点棘手;后来在智谱AI开放平台的使用指南-速率限制指南 一文中,发现其支持并发调用,只是说有并发数限制。因此我分析来说,应该是放出来的模型与开放平台上的模型有一定的区别,而这个区别就在于模型的并发能力。毕竟外部API调用时,最终还是调用模型内部的流式接口/非流式接口。也就是说,这个模型内部的接口并不支持并行计算。
从模型的内部来说,其是transformer神经网络结构,但其并发能力却没有这么简单,毕竟模型涉及到的计算量是巨大的。归根来说,还是transformer的并行计算能力。
后来找到个遇到同样情况的博文,不过和我们的部署方式还是有区别的。mosec部署chatglm2-6B 一文中分析了下其遇到的问题与解决方案,至此我大概也清楚了并发调用模型API时为什么会返回乱码(空数据)。

原因与解决策略

当并发调用时,其中模型已经处理完了一个request后,返回的tensor识别了eos_token,模型会认为已经处理完了所有的request,因此返回空数据。
那么从这里来说的话,我暂时想到的解决策略:模型内部按batch来处理request。
这个代码不好改,应该有开源的实现和解决策略。后来我又想到了LLaMA-Factory这个微调框架,他们也是有api_demo的,应该也会遇到这样的问题,因此提了个Issue,还好最终有另外的解,见issue
image.png

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

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

首发于个人公众号
image

标签:调用,多用户,demo,模型,ChatGLM3,接口,并发,API
From: https://www.cnblogs.com/zhiyong-ITNote/p/18123334

相关文章

  • 京东详情API接口请求代码源码(java)
    京东详情API接口是用于获取京东商品详细信息的接口,它允许开发者通过发送请求,获取商品的描述、价格、评价等信息。下面是一个关于京东详情API接口的示例文档,包括接口地址、请求参数、响应参数等内容。京东详情API接口文档接口地址:https://api-gw.onebound.cn/jd/item_get请求......
  • 微信视频号api开发注意事项,微信号二次开发api
    简介#"VideosApi"是一个基于微信开放平台的二次封装API服务,旨在简化开发者与微信对接的流程。提供了丰富的功能API,包括好友管理、消息管理、群管理、朋友圈等,并且支持多开发语言接入。以及针对特定业务场景的定制化开发产品。开发原理:平台采用自研的RPA响应框架,避免了hook类......
  • 强!推荐一款API 接口自动化测试平台!
    在项目开发,迭代交付过程中开发人员,测试人员需要针对系统微服务API做调试,回归测试,性能测试。自动化测试,一个好的平台本质上需要解决API测试的5大基本问题。1.支持不同的项目,角色,技术人员多人协作2.支持定义多个不同的测试环境3.支持定义各种被测系统,API,功能,性能用例4.支持功能......
  • 第七章 常用API&异常
    7-1API的基本使用System类方法说明publicstaticvoidexit(intstatus) // 终止当前运行的Java虚拟机,非零表示异常终止publicstaticlongcurrentTimeMillis() //返回当前时间(以毫秒为单位)  Objects类(应用)说明publicstaticStringtoString(对象)//返回......
  • 实验一-密码引擎-3-加密API研究--20211313
    不同的加密API研究CryptoAPICryptoAPI功能功能:为应用程序开发者提供在Win32环境下使用加密、验证等安全服务时的标准加密接口。CryptoAPI处于应用程序和CSP(cryptographicserviceprovider)之间。CryptoAPI共有五部分组成:简单消息函数(SimplifiedMessageFunctions)、低层消息......
  • 智能客服系统对接通义千问和月之暗面MoonshotAI-基于OneAPI中转
    我们的智能AI客服系统已经对接了多种大模型,包括通义千问和Moonshot gofly.v1kf.com 现在GPT大模型或国产大模型有很多,Azure、AnthropicClaude、GooglePaLM2、智谱ChatGLM、百度文心一言、讯飞星火认知、阿里通义千问、360智脑以及腾讯混元,我们需要有一个中间系统来将......
  • Vue3 · 小白学习全局 API:常规
    全局API:常规本次笔记versionnextTick()defineComponent()defineAsyncComponent()defineCustomElement()1.version暴露当前所使用的Vue版本。类型string示例import{version}from'vue'console.log(version)2.nextTick()等待下一次DOM更新刷新的工具......
  • 突破编程_C++_网络编程(Windows 套接字(API 接口(1)))
    1初始化与清理1.1WSAStartupWSAStartup函数用于初始化Winsock库,并指定应用程序所需的Winsock版本。它允许应用程序与WinsockDLL(动态链接库)建立联系,并准备Winsock环境以供后续使用。(1)函数原型如下:intWSAStartup(WORDwVersionRequested,LPWSADATAlpWSAData......
  • Web API(五)之BOM操作&window对象&本地存储
    WebAPI(五)之BOM操作&window对象&本地存储js组成window对象定时器-延迟函数JS执行机制location对象navigator对象histroy对象本地存储localStoragesessionStorage(了解)localStorage存储复杂数据类型综合案例数组map方法数组join方法js组成JavaScript的组成ECMA......
  • midjourney绘画,midjourney api接口国内如何对接
    项目背景众所周知,Midjourney并没有提供任何的Api服务,但是基于Midjourney目前的行业龙头位置,很多企业以及个人会有相关的需求。TTApi平台基于Midjourney现有功能整理出一套完整的可集成性高的服务,如果你有类似的需求,那么恭喜你找到了正确的使用方式。新用户注册免费送100配......