最近在试着把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 条显存这块我怀疑你双卡3090是不是没做gpu分配,vLLM默认会把模型均匀塞到两张卡上,单卡负载反而高,试试用CUDA_VISIBLE_DEVICES指定单卡跑,显存应该能压下来。延迟3秒确实离谱,但535驱动跑paged attention确实容易出幺蛾子,我上次用545才正常,建议先升个驱动再测。另外你确认下AWQ的量化版本是不是和vLLM的kernel匹配,有时候版本不对会偷偷回退到fp16计算,性能直接崩。
这问题我上周刚踩过一模一样的坑,你试试把gpu-memory-utilization参数显式设成0.9,vLLM默认会预留一部分显存做kv cache,双卡环境里它可能没自动分配好。另外535驱动确实有点旧了,paged attention在535上有个已知的cuda graph冲突问题,建议升到545以上再跑一次。首token延迟3秒的话,检查下是不是没开enable_prefix_caching,这个对短对话影响特别大。
官方那个数据一般是单卡A100测的,3090的带宽和显存管理本来就有差距,尤其AWQ在双卡下显存翻倍正常,因为每张卡都要加载权重。你试过把tensor parallel设为1,单独跑单卡看看吗?还有驱动535确实偏老,vLLM有些新特性对驱动要求高,建议升到545+,paged attention的缓存分配会有明显改善。延迟方面,首token3秒可能是prefill阶段没开continuous batching,检查下--max-num-seqs是不是默认值太小了。
我猜你可能是量化后没做warmup,vLLM第一次请求要编译CUDA kernel,3秒里大半是初始化开销。你先发个空请求或者跑个简单prompt热热机,再测延迟。另外显存18GB的话,看看是不是--gpu-memory-utilization设太高了,默认0.9会预占满,改成0.7试试,虽然会牺牲点吞吐但显存能降不少。驱动535确实有点悬,我朋友之前用535跑vLLM也遇到诡异问题,升到550就正常了。
你这对比的官方数据大概率是batch size=1且输入很短的情况,你如果测试时token长度不一样,prefill延迟差个几倍很正常。建议你确认下是不是开了--enable-prefix-caching,
你这显存大头八成是KV cache和CUDA context,官方数据都是纯模型权重,把gpu_memory_utilization调低点试试。
显存这块儿我倒觉得官方数字本来就是个参考值,跟gpu驱动、cuda版本、还有vllm的版本都有关系,535驱动配新点的vllm确实容易出幺蛾子。你试试先升到550以上,再把vllm更新到最新版,延迟应该能改善不少。另外确认下是不是真加载了量化权重,有时候huggingface缓存路径搞错了会偷偷加载fp16版本,那显存肯定对不上。
显存这块儿我也踩过类似的坑,AWQ量化后实际占用比官方标称高很正常,他们一般测的是纯模型权重,你这边还有KV cache和CUDA context的开销,双卡3090跑7B其实单卡就够,试试把tensor parallel size设成1,能省不少显存。延迟差这么多的话,先确认下是不是没开continuous batching,或者输入序列长度设太长了,首token延迟跟prefill长度关系很大。驱动535确实有点旧了,vLLM新版本对paged attention的优化很依赖新驱动,建议升到545以上再对比一次。还有个容易忽略的点,看看是不是加载时没指定max_model_len,默认值可能会吃掉很多显存,手动设个2048试试。
驱动535确实太旧了,paged attention在旧驱动上会吃满显存,升到550+再试试,延迟应该能下来一大截。
先确认下是不是真的加载了AWQ权重,有时候路径指错会默默回退到FP16,显存和速度都会翻倍涨。
我之前也踩过类似的坑,官方那个显存数据一般是纯模型权重+单batch的理想值,你加上KV cache和CUDA context,18GB挺正常的,尤其双卡还得算上跨卡通信的buffer。延迟的话建议先关掉AWQ试试FP16跑一下,如果还是3秒那就不是量化的问题,大概率是vLLM版本和535驱动不兼容,我升到550之后paged attention的吞吐直接翻倍。另外你检查下有没有开--enable-prefix-caching,这个对首token影响挺大的。
显存这块我怀疑你是不是把双卡的显存都算进去了,vLLM默认会做tensor parallel,两张卡各占9G左右加起来可不就18G了嘛。官方数据大概率是单卡跑出来的,你试试加--tensor-parallel-size 1看看。延迟的话3秒确实离谱,不过535驱动跑新框架确实容易出幺蛾子,建议升到545或550,paged attention对驱动版本挺敏感的。另外确认下是不是真加载了AWQ权重,有时候模型路径指错了会默默回退到fp16,那显存和延迟就全对不上了。
显存这块我倒是觉得官方数据水分挺大,AWQ实际跑起来加上KV cache和CUDA context,18GB在双卡3090上真不算离谱。延迟问题建议先看下是不是vLLM版本太老,0.4.x和0.5.x的paged attention差异巨大,升级到最新版说不定直接解决。另外你测首token的时候有没有预热?冷启动第一次请求肯定慢,多跑几次再对比才有意义。驱动535确实有点老,但影响更多是CUDA版本匹配,建议先确认下vLLM和PyTorch对应的CUDA要求,别急着甩锅给驱动。
驱动535确实太旧了,换550+试试,vLLM新版本对paged attention优化很吃驱动。
我之前也遇到过类似情况,官方那个数据多半是纯推理跑benchmark测的,你加了对话服务的话,前缀缓存和显存碎片都会多占不少,18GB不算离谱。延迟方面,建议先确认下是不是没开continuous batching,或者max_num_seqs没调,双卡3090如果没走张量并行,单卡扛7B的AWQ首token延迟3秒确实偏高了。另外535驱动确实有点老,vLLM有些版本对CUDA 12.4以上有优化,你试试升级到545以上,说不定paged attention性能能拉回来一点。
我上周也踩过类似的坑,后来发现是vLLM的gpu_memory_utilization默认值没调,它会给每个卡预留一部分显存做KV cache,你试试设成0.9看看。至于首token延迟,3秒确实离谱,先确认下是不是没开--enable-prefix-caching,或者输入prompt太长导致prefill阶段变慢,跟驱动关系应该不大。
显存翻倍大概率是双卡张量并行把权重复制了两份,试试单卡跑或者关掉tp再对下数据。
显存这块儿我踩过类似的坑,AWQ量化后实际占用跟官方数字对不上太正常了,官方一般给的是纯模型权重+KV cache的理想值,你双卡3090跑起来还得算上CUDA context、碎片化预留和paged attention的block管理,18GB不算离谱。延迟问题我倒觉得大概率是驱动,535版本对vLLM的flash attention支持确实有坑,建议先升到545以上再测,很多性能问题都是驱动版本太老导致的。另外你可以看一眼vLLM的日志里有没有警告说kernel fallback,如果走了普通attention那首token延迟翻几倍很正常。
我上次用vLLM跑7B AWQ也遇到过类似情况,后来发现是没开gpu_memory_utilization,默认值只留了部分显存给模型,手动设到0.9能压下来不少。不过延迟这块,首token 3秒确实离谱,你试试把--max-num-seqs调小一点,还有确认下是不是在跑prefill阶段,有时候并发请求会拉高延迟。驱动535确实老,但一般不至于差这么多,建议先排除软件配置再考虑升级驱动。
我之前也遇到类似情况,后来发现是vLLM的gpu_memory_utilization默认值在搞鬼,它不会自动按量化后模型算,你得手动调低到0.7左右试试。另外3090双卡要注意pipeline parallel和tensor parallel的区别,你如果是把模型切到两张卡上,显存占用翻倍是正常的,官方数据应该是单卡跑出来的。首token延迟3秒的话,建议先排除一下是不是在冷启动加载权重,跑几个请求后再测,另外可以试试把--max-num-seqs调小,有时候默认并发会占满算力。驱动535确实偏旧,但影响更多是CUDA版本匹配,建议先升到545以上再对比下。
驱动535我之前也踩过坑,vLLM对CUDA 12.1以上的版本支持才算稳定,你可以先跑一下nvidia-smi看看显存是不是被其他进程占了,有时候双卡会互相干扰。延迟对不上大概率是模型没完全加载进显存,首token会触发逐层compile,跑个十几次后就正常了。另外AWQ量化文件最好确认下是不是官方release的,有些第三方转换的会保留原始权重导致显存虚高。
我猜你可能是把--tensor-parallel-size设成2了,3090双卡这样会让每张卡都存一份完整权重,显存自然翻倍
这差距确实有点离谱,不过大概率不是驱动的问题,535跑vLLM虽然老点但基本功能没毛病。我怀疑你是没关掉默认的显存预分配,vLLM会预留一部分gpu_memory_utilization,试试设成0.8以下,另外首token慢可能跟AWQ的kernel没走对有关,确认下有没有装对应的quant工具库。还有个小坑,双卡3090的话是不是默认把张量并行开了,batch=1但模型被拆到两张卡上,显存和延迟都会虚高,试试单卡跑对比下。
驱动535确实老,建议先升到545+,vLLM对paged attention的兼容性跟驱动版本关系挺大的。
之前我也遇到过类似问题,发现是没开gpu-memory-utilization,默认值太低导致显存没吃满还反复换页。
我前几天刚用vLLM部署过Qwen2.5-7B,不过是FP16版本,显存占用大概16GB出头,跟官方标称的差不多。但你AWQ量化后反而飙到18GB,这不太对劲,我怀疑不是量化本身的问题,而是vLLM的KV cache默认预留空间太大导致的。你可以在启动参数里显式设置gpu_memory_utilization,比如0.9或者更低,这样vLLM就不会把显存全占满预留给后续请求了,我之前就遇到过类似情况,调这个参数后显存直接降了3-4GB。至于首token延迟3秒,那个跟模型加载和预热也有关系,你跑几个warmup请求后再测一下,另外检查一下是否真的加载了AWQ量化权重,有时候路径写错会静默回退到原始精度。驱动535确实偏老,vLLM对CUDA版本挺敏感的,但不至于导致这么夸张的差距,建议你先跑个官方benchmark脚本对比一下,排除环境干扰。