这几天把Llama 3 7B量化后(AWQ 4bit)部署到一台A10(24G显存)上,用vLLM跑,并发8。显存占用才13G左右,但单token生成速度只有15-20 tokens/s,多轮对话时首token延迟能到3秒以上。我看网上别人说7B能跑到40-50 tokens/s,差距也太大了。
已经试过调整max_num_seqs、gpu_memory_utilization,也开了continuous batching,感觉提升不明显。是我哪里设置不对吗?还是说A10本身就这么弱?或者量化方式有问题?有没有大佬能指点下优化方向,或者分享一下你们的部署参数配置?谢谢!
部署7B大模型到生产环境,显存够用但推理速度慢得离谱,正常吗?
全部回复
共 6 条A10的显存带宽就那样,7B跑20左右其实正常,40+一般是4090或H系列。
A10的PCIe带宽和算力就那样,15-20已经算正常水平,网上那些40+的多半是H100或者A100跑出来的。
试试把max_model_len调小点,再把tokenizer并行度打开,首延迟能压下来不少。
A10跑AWQ 4bit的7B,15-20 tokens/s确实偏低了,但也没到离谱的程度,这卡本身推理就不是强项,带宽才600GB/s左右,跟4090那种1TB/s的没法比。你看到网上40-50的数据,多半是A100或者H20跑的,或者人家测的是纯生成速度没算首token。显存只占13G说明vLLM没把KV cache吃满,这会直接影响吞吐,你可以把gpu_memory_utilization调到0.9以上试试,同时把max_num_seqs拉高到32甚至64,让continuous batching真正跑起来。另外检查下是不是没开--enable-prefix-caching,多轮对话里历史prompt重复计算会很伤首token延迟。量化方面AWQ本身没问题,但你可以对比下GPTQ或者FP8,有些模型对AWQ的敏感度更高,掉点会体现在生成质量上,速度反而没差。还有个容易忽略的点,看下vLLM版本,老版本调度器效率差不少,升级到最新版可能直接提速30%。最后如果并发8是稳定峰值,建议压测下不同并发下的吞吐曲线,有时候并发太低反而触发不了batching优势。
A10跑7B AWQ这个速度确实偏低了,但网上那些40-50的数据多半是A100/H100或者纯生成场景的峰值,不能直接对标。你试试把并发降到1-2看单流速度能到多少,如果还是20左右,大概率是量化后显存带宽瓶颈,A10的显存带宽本来就不算强。另外检查下vLLM版本,老版本对AWQ的kernel优化差异很大,升级到最新版再跑一次,有时候能差出50%以上。多轮对话首token3秒的话,可以看看是不是prompt过长导致prefill算力吃紧,试试把max_model_len调低到2048。
说实话15-20 tok/s对于A10来说不算离谱,但确实没吃满性能。我怀疑问题不在量化方式,而是你的input序列长度——多轮对话首token延迟3秒,大概率是prefill阶段在长上下文上卡住了。vLLM的continuous batching对长prompt的优化有限,你可以试试把max_model_len调小到2048或4096,然后观察prefill和decode的耗时占比,应该能看出端倪。
另外A10的显存带宽只有600GB/s左右,跟A100差了快一倍,7B模型即便4bit量化,每个token也要读接近3GB的权重,理论极限也就50 tok/s,你跑到15-20说明还有优化空间。建议检查下vLLM版本,老版本对AWQ kernel支持很差,升级到0.6+会有明显改善。还有个小技巧:把--enable-prefix-caching开起来,多轮对话重复的system prompt能直接命中缓存,能省下不少prefill时间。
我自己的经验是,同样的模型在4090上能跑到30+,但A10上稳定在18-22,你的数字其实在合理范围内。如果非要压榨性能,可以试试换GPTQ量化或者ExLlamaV2,AWQ在低并发下有时候反而慢。最后确认下你的vLLM是不是用了flash-attn的后端,这个对A10的Ampere架构影响挺大的。
A10单卡跑7B AWQ,15-20 tok/s其实不算离谱,网上40-50基本都是A100/H100或者折腾过flash-attention、paged-attention的。你试试把max_model_len调低点,比如2048,然后vLLM版本升到0.4以上,开--enable-prefix-caching,多轮对话首token能明显降。另外确认下是不是被CPU offload拖了,nvidia-smi看下GPU利用率,如果没跑满八成是数据预处理瓶颈。量化本身没问题,AWQ 4bit对速度提升有限,主要省显存。