ChatGLM2-6B
ChatGLM2-6B copied to clipboard
[BUG/Help] 单卡用2个worker启动api,GPU占用x2,但是有多个请求时并没有并行运行model
Is there an existing issue for this?
- [X] I have searched the existing issues
Current Behavior
单卡通过uvicorn用2个worker启动api,GPU实际占用了20G,但是同一时间处理2个请求时,他们并没有并行运行model
Expected Behavior
在单卡、显存支持下,能通过多开进程让多用户访问
Steps To Reproduce
在V100-32GB单卡 使用chatglm2-6b-int4模型,启动api.py 1.在workers=1时,GPU占用5.5G 2.在workers=2时,GPU占用20G 3.分别启动不同端口的2个workers=1的api.py进程,GPU占用10G
在2,3情况下模型应该都起来,能成功运行并占用GPU。
同一个问题,一个线程直接请求只耗时2.3s。 同一个问题,在测试脚本同时开2个线程同时请求,总耗时4.6s才返回;
开启多个进程的情况下,似乎还是在用同一个模型进行推理,想问这是我的姿势不对还是说这是模型在同一时间只能被单卡执行,多余的GPU只能浪费?
#全局定义model
app = FastAPI()
tokenizer = AutoTokenizer.from_pretrained("/root/chatglm2-6b-int4", trust_remote_code=True)
model = AutoModel.from_pretrained("/root/chatglm2-6b-int4", trust_remote_code=True).half().cuda()
model.eval()
#...
if __name__ == '__main__':
uvicorn.run("api:app", host='0.0.0.0', port=6006, workers=2)
Environment
- OS: linux
- Python: 3.8
- Transformers: 4.30.2
- PyTorch: 2.0.0
- CUDA Support (`python -c "import torch; print(torch.cuda.is_available())"`) :
Anything else?
No response
多个模型实例同时跑,得参考fastchat或者torchserve使用多进程分别加载模型服务了吧 但为啥api.py这样不行,也不太懂,同求一个原理解释
问题解决了吗
可以试试用triton server,可以加载多个实例
同问,2个进程,分别加载2个模型,最后还是串行的
可以试试用triton server,可以加载多个实例
你好,请问你试过triton框架部署glm-6b这种chat模型并行请求成功了吗?我想了解下大概多少GPU显存级别能并行多用户实例?
我查阅了下资料,还没找到相关例子,想尝试在autodl上部署 但是他不支持docker。。
同问
可以试试用triton server,可以加载多个实例
你好,请问你试过triton框架部署glm-6b这种chat模型并行请求成功了吗?我想了解下大概多少GPU显存级别能并行多用户实例?
我查阅了下资料,还没找到相关例子,想尝试在autodl上部署 但是他不支持docker。。
autodl和揽舟什么的gpu租用都不是物理机,都是虚拟机,虚拟机里没法再装docker
同问
你好 请问解决了吗?
已收到,谢谢
workers=2时,显存比开两个端口多一倍,是应为代码这么写模型会加载4次
workers=2时,显存比开两个端口多一倍,是应为代码这么写模型会加载4次
请问一下为什么一个worker会加载两次模型呢,应该怎么写才能一个worker对应一个模型
用以下方式,开启多进程一定会失败,因为虽然workes为2,但是整个api.py文件会加载5次,所以会特别占内存,并且还是串行的方式。
if __name__ == '__main__':
uvicorn.run("api:app", host='0.0.0.0', port=6006, workers=2)
多进程一定要用命令行的方式才能成功
gunicorn api:app --worker-class uvicorn.workers.UvicornWorker --workes 2
同问
已收到,谢谢
您好,请问解决了么。我现在测试也是这样,同时请求,但实际上就是串行执行的
已收到,谢谢