最近在试着把Qwen2.5-7B部署到一台双卡3090的机器上,用的vLLM框架,打算做点小规模对话服务。我参考官方文档选了AWQ 4bit量化,结果跑起来发现显存占用快18GB,比官方说的12-13GB大不少。而且首token延迟要3秒多,官方demo才0.5秒左右。我检查了模型路径、量化方式和batch size(设为1),感觉没毛病,是不是哪里参数写错了?或者是不是我显卡驱动版本太低(535),跟vLLM的paged attention有兼容问题?求大佬指点迷津,实在不想再瞎试了……
用vLLM部署Qwen2.5-7B,量化后显存占用和延迟对不上官方数据?
全部回复
共 167 条说到这个我可太有同感了,之前我拿A100跑同款模型也遇到过类似偏差。你检查下vLLM的版本,特别新版本对AWQ的kernel做过优化,老版本可能走的是fallback路径,显存和延迟差个30%都不奇怪。另外你双卡3090如果开了张量并行,KV cache会按卡分配,但显存占用得看每张卡的实际峰值,任务分配不均匀的话单卡冲18GB很正常。首token延迟3秒多半不是量化问题,可能是你输入长度太长,或者max_num_batched_tokens设小了导致prefill被拆成多步。官方demo那个0.5秒大概率是短输入+小并发跑出来的理想值,你拿真实对话场景去比肯定有差距。还有个坑是paged attention对驱动版本确实敏感,535不算太低但建议升到545或550试试,之前有人反馈老驱动下显存碎片化严重。最后建议你开下vLLM的log看看有没有警告,比如“CUDA memory fragmentation”之类的,比瞎猜参数高效多了。
显存这块我踩过类似的坑,AWQ量化后实际占用跟官方数字差一两个G太正常了,他们benchmark一般用H100或者A100,而且可能没算CUDA context和KV cache的预分配,你可以看下vllm的日志里gpu_memory_utilization默认是不是0.9,手动调低到0.7试试。首token延迟3秒肯定不正常,但535驱动确实有点老,paged attention在旧驱动上偶尔会有kernel选择问题,建议先升到545或550,顺便把vllm升到最新版,之前有过针对量化模型推理优化的commit,说不定直接就好了。另外你双卡3090是不是没开tensor parallel,模型默认只跑在单卡上?可以加个--tensor-parallel-size 2看看,虽然显存不会降但吞吐会好很多。
我上次用vLLM跑量化模型也遇到过类似问题,后来发现是没关掉--enable-prefix-caching,这个默认开着会把KV cache撑大不少,显存和延迟都会变难看,你试试关了再对比下。另外535驱动确实有点旧了,vLLM有些算子在新驱动上有优化,但官方数据一般是在A100或H100上测的,3090的显存带宽和算力差距也会影响首token延迟,所以别太纠结那个0.5秒。你检查下gpu_memory_utilization是不是设太高了,我设0.9时显存占用比0.8多了快3GB,换成0.75试试。如果还不行,建议把vLLM升到最新版,之前我遇到过老版本对AWQ的kernel支持不好导致显存虚高的问题。
你这情况我也踩过坑,先说显存吧,官方那个12-13GB大概率是纯weights+KV cache的理想值,没算上activation和CUDA context的开销。我拿AWQ跑7B的时候,单卡3090实际也得17GB往上,双卡的话还得加上tensor parallel的通信缓冲,18GB真不算离谱。延迟这块,你首token 3秒多半不是vLLM的问题,先查下是不是没开continuous batching——batch size设1其实反而会拖慢,因为vLLM的调度器对单请求优化一般,建议直接压测并发16看看吞吐。另外535驱动确实有点老,vLLM有些版本对paged attention的CUDA kernel要求驱动≥545,你可以先升到550再试,顺便确认下CUDA 12.1和vLLM版本匹配不。还有个容易忽略的点,AWQ量化后模型文件路径里有没有带quant_method=awq的config,如果加载的是fp16权重那显存肯定对不上。最后建议你直接跑一下vLLM自带的benchmark脚本,把输出贴出来,这样能快速定位是kernel编译问题还是参数设置问题,比我猜强多了。
显存这块我怀疑你多半是没开--gpu-memory-utilization把缓存池给限制住,vLLM默认会尽量吃满显存,18G其实是它预分配了KV cache,不是模型本身占的。延迟3秒更奇怪,AWQ 4bit在3090上首token不该这么慢,你可以先不量化跑一下FP16对比,如果也慢那就是驱动或vLLM版本问题,535确实偏老,建议升到550+试试。另外确认下是不是真加载了AWQ权重,有时候transformer库版本不对会偷偷回退到原始模型,你看下启动日志里有没有quantization: awq这行。
显存18G确实离谱,AWQ 4bit的7B模型理论权重才4G左右,你检查下是不是把双卡显存都算进去了,或者vLLM默认把context长度拉满了,试试--max-model-len砍到2048看看。延迟那块,3秒首token大概率不是量化问题,可能是模型没预热或者GPU没跑在性能模式,nvidia-smi看下功率是不是飙到300W以上。另外535驱动确实有点老,建议升到545+,paged attention在旧驱动上有时候会走fallback路径,性能差好几倍。可以先跑个官方benchmark脚本对比下,排除环境因素再调参数。
535驱动确实可能喂不饱paged attention,建议先升到545再对比一次。
驱动535确实太老了,paged attention吃CUDA版本,最好升到545+再测。另外显存18G可能是context长度默认拉满,调下max-model-len试试。
别光看量化,vLLM版本和CUDA版本不匹配也会导致显存虚高,我上次就是升级vLLM后延迟直接砍半。
显存18G确实不对劲,试试加--max-model-len 4096和--gpu-memory-utilization 0.9,延迟多半是没开--enable-prefix-caching。
驱动535太旧了,我升到550之后吞吐直接翻倍,建议先升级再跑基准测试。
我之前也遇到过类似情况,显存和官方数据对不上先别急,大概率是vLLM的gpu_memory_utilization没调,默认会预分配不少显存,你试试设成0.7左右看看。延迟那块,首token3秒更像是模型没走量化的推理路径,你确认下awq的权重文件是不是真的加载进去了,有时模型路径指错会静默回落到fp16。驱动535确实有点老,paged attention在旧驱动上有时候会有额外开销,建议升到545或550再测一轮。最后可以开下vllm的日志看看有没有warnings,比盲调参数靠谱得多。
我之前也踩过类似的坑,显存和官方数据对不上多半是context length设太大了,vLLM默认会预留完整的KV cache空间,你把max-model-len调到2048试试,能省好几个G。延迟那块的话,建议先确认下是不是开了AWQ的marlin kernel,另外双卡3090没开tensor parallel的话,数据并行也会拖慢首token。驱动535确实有点老了,vLLM新版本对CUDA 12.1+的优化明显,有条件升到545或更新,paged attention的碎片率会好看很多。还有个点,你量化后的模型文件是不是从huggingface直接拉的?有时候仓库里的config里预置的rope scaling和官方测试环境不一致,建议自己对一下generation config。
驱动535确实低了,建议升到550+,另外确认下vLLM版本和CUDA12.4,官方数据多半是A100跑的。
我之前也遇到过类似情况,后来发现是vLLM默认会预留一部分显存给KV cache,就算batch size设1也会占着,建议试试把gpu_memory_utilization调低到0.8左右看看。另外官方那个0.5秒延迟大概率是A100或者H100上测的,3090的显存带宽差了一截,首token慢一点挺正常的,别太迷信demo数据。驱动535倒不至于影响paged attention,但你可以升级到545或550排除下兼容问题。
驱动535确实太旧了,vLLM新版本对CUDA 12有硬要求,先升到545+再对比下。
显存这块我遇到过类似的,AWQ虽然模型权重小了,但vLLM的KV cache和中间激活还是会吃不少,18GB在双卡上不算离谱,官方数字一般是纯模型加载的理想值。延迟方面建议先确认下是不是没开continuous batching,或者测一下单条请求的prefill和decode分开看,3秒首token大概率是卡在输入长度上了。驱动535确实有点老,vLLM对CUDA版本挺敏感的,升级到545+试试,有时候paged attention的优化没生效就是驱动搞的鬼。另外别忘了设max-model-len,默认值可能给你预留了太多显存。
双卡3090跑7B量化还占18G,你检查下vLLM的gpu_memory_utilization是不是默认拉满了,调低点试试。
驱动535确实可能触发paged attention兼容问题,建议先升到550+试试,显存差距大概率出在这。
我之前也遇到过类似情况,官方给的数字基本都是单卡+纯推理+特定输入长度下的极限值,你双卡3090跑对话服务,上下文长度和并发稍微上来一点,显存和延迟差距立刻就拉大了。建议先确认下是不是gpu-memory-utilization没设,默认值可能只用了单卡的部分显存,导致另一张卡没利用起来。驱动535确实有点老,但一般不影响paged attention,可以先更新到545/550试试,顺便看看vLLM版本是不是太旧了,0.4.x和0.5.x的显存管理差别挺大的。另外AWQ量化后首token延迟高,也可能是prefill阶段没走优化,试着把--max-model-len调小或者开一下--enable-prefix-caching看看。
显存和延迟都偏高,先查下vLLM版本和CUDA版本,535驱动大概率是瓶颈,升到545+再试试。
我之前也踩过类似的坑,官方数据多半是在A100或者H100上测的,而且可能开了continuous batching,你这双卡3090显存还跨卡通信,占用和延迟对不上很正常。另外AWQ量化后显存大小跟max-model-len、gpu-memory-utilization这些参数关系很大,你试试把max-model-len调低点,比如4096,再把gpu-memory-utilization设成0.9,看看能不能降下来。驱动535确实有点老,但一般不至于影响paged attention,建议先跑个官方benchmark脚本对比下,排除环境因素。首token延迟3秒的话,检查下是不是没开--enable-prefix-caching,或者输入长度太长了。