imClumsyPanda/ChatGLM-6B-API

请问这个方法会增加显存占用吗?

QNLanYang opened this issue · 14 comments

我自己在使用的时候发现显存占用越来越多,是因为模型偷偷记住了所有对话吗?
但是传入request的时候不给历史记录也并不能想起来之前的对话。
如果是模型缓存了记录应该怎么清除呢?
感谢解答

我这边是使用tesla v100 32G显存使用,测试下来偶尔会有现存崩溃的情况,是否缓存过记录还有待确认,后面我再研究看看

谢谢你的解答,也非常感谢你做出这个API,给了我写nonebot插件的灵感

@QNLanYang 感谢支持😁 后面准备把最近实现的ChatGLM + llama-index 全用开源模型、可离线部署的项目也分享一下

image
这一次终于爆显存了,我使用的是 chatglm-6b-slim 的 int4 量化模型

@QNLanYang 直接运行模型的,不通过API的话没有这个问题是吗

image
这是我加载同一个模型,但是B站UP秋叶akiii做的那个webUI,初始只占用不到5G显存。
但是用这个API貌似一打开就是8-10G占用,而且如果把reload设成true还会加载第三次就几乎吃满了
(我上面说加载三次是因为任务管理器的显存占用明显看出是上升了三次,控制台也是差不多的输出重复三次。

@QNLanYang 好的 收到反馈 这两天我再调试一下

@QNLanYang 已找到该问题的原因,是在脚本中用unicorn调用时发生的问题,可以通过将

uvicorn.run(app="chatglm_api:app",
修改为 “unicorn.run(app”解决,将在今天晚些时候上传新的commit进行更正

非常感谢你,我试了一下是有效的,确实初始占用只有5个G了,但是随着对话次数显存占用还是会慢慢提高至接近上限(目前还没爆过)
不过我 粘贴 来了一部分代码(如下)可以在每次post请求后清除缓存,然后对话完的显存占用就很稳定了,运算的时候差不多8个G,闲置7个G
image
代码的来源是这里:(ChatGLM webUI)
然后可以看到我还加了一些参数进去(因为加入对话记录可能聊着聊着就超过默认2048的max_length了)
这样修改之后请求时就用这样的就可以:
xxx.post(f"{address}/predict?user_msg={msg}&max_length={max_length}&top_p={top_p}&temperature={temperature}", json=history)

另外如果你需要的话,我的目录结构如下:
根目录安装那个webUI,然后模型在./modle/目录,然后直接把你的api.py丢在根目录

非常感谢你,我试了一下是有效的,确实初始占用只有5个G了,但是随着对话次数显存占用还是会慢慢提高至接近上限(目前还没爆过)
不过我 粘贴 来了一部分代码(如下)可以在每次post请求后清除缓存,然后对话完的显存占用就很稳定了,运算的时候差不多8个G,闲置7个G
image
代码的来源是这里:(ChatGLM webUI)
然后可以看到我还加了一些参数进去(因为加入对话记录可能聊着聊着就超过默认2048的max_length了)
这样修改之后请求时就用这样的就可以:
xxx.post(f"{address}/predict?user_msg={msg}&max_length={max_length}&top_p={top_p}&temperature={temperature}", json=history)

@QNLanYang 太棒了,不过不知道这样会不会增加过多时间成本,感觉也可以考虑再增加个接口用来清理显存,定期清理。

我自己体验的话感觉占用不了太多时间,没感觉到生成时间等的变化

image
要不把这个reload默认设置成False吧……我也不太懂这个是干嘛的

@QNLanYang reload应该就是检查到代码有更新的时候重新运行脚本