最近在尝试把微调好的7B模型(基于Llama架构)部署到线上做实时推理,用的是TorchServe,单张RTX 4090 24G显存。模型加载后直接占满显存,处理单个请求就OOM了。试了FP16和4bit量化,但4bit后推理速度慢了一倍,而且偶尔输出乱码。网上说的vLLM、TGI这些框架真的能省显存吗?还是我得换A100?另外,有没有办法像GPU共享那样,让多个小请求复用同一个模型实例?求有经验的大佬指点,项目快deadline了,急!
部署7B大模型到生产环境,显存不够用怎么办?
全部回复
共 148 条24G跑7B其实不至于一上来就OOM,问题多半出在TorchServe默认的加载方式和KV cache分配上。你可以先试试vLLM,它用PagedAttention管理KV cache,显存利用率比朴素实现高不少,7B FP16在24G上跑并发是没问题的。4bit量化慢一倍还乱码,大概率是量化kernel没走对,或者校准数据跟你的微调任务分布差太远,可以换AWQ或GPTQ试试,别用bitsandbytes的NF4硬上。TGI也可以,但部署灵活度我觉得不如vLLM,尤其你想做continuous batching的话。至于你问的多请求复用同一个实例,这本来就是推理框架的基本能力,vLLM的continuous batching就是干这个的,小请求会动态拼批,不用你自己搞GPU共享那一套。换A100不是必须的,先把框架换掉再说,4090单卡跑7B生产流量不大的话完全够用。
7B模型FP16大概14G,你24G卡加载后OOM大概率是TorchServe默认没限制并发数,请求一多KV cache直接爆了。上vLLM吧,PagedAttention对显存碎片管理好很多,同样24G能扛的并发比TorchServe高不少,TGI也行但部署稍麻烦点。4bit量化掉速和乱码基本是量化方案的问题,换AWQ或GPTQ试试,比bitsandbytes稳。实在不够再考虑A100,但先换框架大概率就能救回来。
7B模型24G跑推理按理说够的,TorchServe本身显存开销就不小,换vLLM试试吧,PagedAttention对显存利用率提升挺明显的,我们线上QPS不高的情况单卡4090跑得挺稳。4bit乱码大概率是量化没校准好,试试GPTQ或者AWQ,速度损失会小很多。多请求复用的话vLLM自带continuous batching,不用自己搞GPU共享那套。
7B模型FP16大概要14G左右,4090跑推理本身够的,OOM多半是TorchServe的batch和KV cache配置没调好。vLLM的PagedAttention确实能省不少显存,连续批处理也能让多请求复用同一个实例,比换A100划算多了。4bit量化慢还乱码,大概率是量化方案没选对,试试AWQ或GPTQ,别用bitsandbytes的nf4。另外把max_model_len和gpu_memory_utilization调一下,先别急着加卡。
vLLM的PagedAttention确实能省不少显存,7B单卡4090跑得动,先别急着换A100。
我之前也遇到过类似问题,后来换了方案。
学到了,感谢分享!
vLLM确实能省显存,PagedAttention对并发请求很友好,先换框架试试再考虑换卡。