码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 聊聊ChatGLM3多用户并发API调用的问题


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

    背景

    目前在公司内部4张A10的GPU服务器上部署了ChatGLM3开源模型;然后部署了官方默认的web_demo、api_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

  • 相关阅读:
    MyBatis-PLUS使用教程
    Linux 文件、目录和用户权限管理指南
    位运算 |(按位或) &(按位与) ^(按位异或)
    Linux系统100条命令:关于Ubuntu和 CentOS 7 相同功能的不同的终端操作命令
    来看下这篇文章,教你如何实现一个SpringBoot的Mybatis分库分表组件
    Android 11 inputflinger分析(触摸优先级)
    Spring Boot 日志文件 ——打印日志和日志持久化详解
    NetMvc通过亚马逊方式服务器端和客户端上传MinIO顺利解决
    页表缓存(TLB)和巨型页的实现
    【Git】git tag 查看版本号 | 删除本地 | 删除远程仓库| 批量删除
  • 原文地址:https://www.cnblogs.com/zhiyong-ITNote/p/18123334
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号