最近在搞一个内部问答机器人,打算用Llama 3.1 8B的量化版本(Q4_K_M,大概5GB),部署到两卡A100上做推理。但是实际跑起来,单次prompt稍微长一点(比如2k tokens)就报OOM,显存直接飙到40G+。我查了vLLM的文档,试了tensor parallel和flash attention,但效果不明显,甚至有时候推理速度更慢了。想请教下各位大佬,是不是我模型加载方式不对?还是说8B模型本身就不适合这种长上下文场景?或者有没有更轻量的部署方案推荐?先谢谢了🙏
部署Llama 3.1 8B到生产环境,显存总是爆怎么办?
全部回复
共 166 条说实话你这显存涨到40G不太正常,Q4_K_M的权重才5GB,问题多半出在KV cache上,2k tokens远没到极限。建议先查下vLLM的gpu_memory_utilization参数,默认0.9但有时候预allocated过头,手动设成0.7再试试,另外确认下是不是把max_model_len设太大导致预分配了冗余空间。tensor parallel在这卡上反而可能因为通信开销变慢,单卡A100跑8B其实绰绰有余,先关掉TP纯用张量并行试试。如果还不行,可以看看PagedAttention的版本更新,或者干脆换SGLang,我这边同样配置下显存占用能低个15%左右。
看到你说两卡A100还OOM我有点意外,不过Q4_K_M 5GB只是权重大小,KV cache才是长上下文的隐形杀手,2k tokens其实不算长,你试试把max-model-len调低点,或者开下vLLM的continuous batching,别一次性塞太多请求。另外tensor parallel在8B这个规模上确实可能拖慢速度,单卡跑反而更稳,A100 80G的话单卡应该够用,除非你并发特别高。要是还不行,可以看看最新的AWQ或者GPTQ量化配合长上下文优化,或者换Mistral 7B v0.3试试,同级别但显存占用更友好。
两卡A100还爆显存,感觉问题大概率出在KV cache上。你开tensor parallel了吗,如果没开,单卡要扛全部KV,2k上下文确实容易炸。可以试试调小max_model_len和gpu_memory_utilization,先卡住上限看看。另外q4量化对显存帮助主要在权重,KV cache还是按fp16算的,长上下文这块才是大头。
两卡A100跑8B的Q4还OOM确实不太正常,感觉多半是vLLM的gpu_memory_utilization没调好,默认0.9会预分配巨量KV cache,长prompt一进来直接顶满。你把max_model_len显式设成4096试试,别让它按模型上限去预留。另外tensor parallel=2对8B这种小模型通信开销反而拖后腿,单卡跑加个max_num_seqs限制并发可能更稳。
两卡A100跑Q4量化的8B还能爆显存,感觉问题不在模型本身,而是vLLM的gpu_memory_utilization默认值可能设太高了,它会把大部分显存预留下来做KV cache。你可以先把max_model_len压到2048以内,再把utilization调到0.8试试,2k上下文KV cache其实占不了多少。另外tensor parallel=2对这种小模型反而增加通信开销,单卡跑可能更稳,两卡可以拆成两个实例做负载。
两卡A100跑8B还OOM,大概率是vLLM的gpu_memory_utilization没调对,默认0.9会把显存吃满。先试试降到0.85,再开enable_prefix_caching。