最近在试着把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,量化后显存占用和延迟对不上官方数据?
全部回复
共 172 条双卡3090跑7B还占18G,大概率是张量并行把权重复制了,试试单卡加载看数据对不对。
显存差这么多先别急着怪驱动,535跑vLLM虽然老点但一般不至于这么夸张。你确认下是不是gpu_memory_utilization没设,默认会占满整卡显存,18G看着就像把两张卡里的一张吃满了。延迟那个更可能是模型下载后没走AWQ的量化权重,你加载的时候打印下模型配置看quant_method对不对,我之前就是路径指错导致偷偷加载了fp16。另外首token 3秒也可能跟并发有关,虽然batch=1但vLLM默认会预留KV cache,试试把max_num_seqs也调成1再测下。
这问题我踩过类似的坑,AWQ的官方显存数字一般是按纯模型权重算的,没算上KV cache和CUDA context,你batch=1但max_model_len如果设得高,照样吃满好几个G。延迟那块更玄学,官方demo多半是拿H100跑的,3090的显存带宽差了一截,3秒首token可能跟paged attention的prefill分配也有关系。建议你先降到max_model_len=2048试试,然后确认下是不是真的加载了AWQ而不是fallback到FP16,用vllm的日志看下模型dtype就知道了。
驱动535确实老点,建议升到550+再看,paged attention这玩意儿挺吃新驱动的。
535驱动确实老,建议先升到550+,我上次也是这问题,升完显存和延迟直接正常了。
显存18G确实偏高了,AWQ 4bit按理说应该跟官方数据差不多。你可以先查下vLLM版本,老版本对Qwen2.5的支持不完善,量化权重加载时可能没走优化路径,建议升到0.6.3以上再看看。另外首token延迟3秒大概率是paged attention没生效,驱动535确实有点老,我印象里vLLM官方要求至少545,你先把驱动升了,顺便确认下CUDA版本匹配不匹配。如果还不行,试试把gpu_memory_utilization调低点,有时候默认值会把两块卡都塞满导致调度出问题。
18G不算离谱,vLLM预分配显存加KV cache本来就吃得多。首token慢先看下是不是没开chunked prefill。
你这也太像我的经历了,我当时用AWQ跑7B也是显存比预期高一截,后来发现vLLM默认gpu_memory_utilization是0.9,它会预分配一大块KV cache,实际占用当然比纯权重高。首token慢可能跟没开chunked prefill或者max_num_seqs太小有关,你可以试试调下这两个参数。驱动535确实有点老,但paged attention一般不至于不兼容,先看下vLLM日志里有没有报fallback到eager模式。
首token延迟高多半是没开chunked prefill,驱动535确实偏老,升到550再试试看。
我之前也遇到过类似问题,后来换了方案。
我之前也遇到过类似问题,后来换了方案。
18GB显存有点怪,AWQ 4bit按理说不该这么高,建议先跑一下nvidia-smi看看是不是KV cache占多了,vLLM默认gpu_memory_utilization是0.9,会尽量吃满显存。另外首token 3秒多,检查下是不是没开enable-prefix-caching或者chunked prefill,3090上535驱动对flash attention支持确实一般,可以试试升级到550以上。还有个坑是AWQ kernel在某些驱动版本上会退化,日志里搜一下有没有fallback到eager模式的警告。