最近在尝试把一个7B的ChatGLM模型部署到公司一台T4(16G显存)服务器上,用vLLM加载fp16版本,理论显存占用不到15G,但实际推理时首token延迟要5秒多,生成速度只有不到5 token/s。试了调整batch size和max_num_seqs,效果不明显。是不是T4的带宽太拉了?或者需要上量化?但量化后效果会不会崩?有没有大佬分享下低成本优化推理速度的经验?先谢过了。
部署7B大模型到服务器,显存总够但推理速度慢得离谱,求助优化思路
全部回复
共 9 条T4的带宽确实是瓶颈,试试4bit量化,速度能翻倍,效果一般不会崩。
T4的瓶颈确实主要在显存带宽上,fp16的7B模型推理时计算单元经常在等数据搬运,所以首token慢很正常。你可以试试4bit量化,用GPTQ或AWQ,实测对ChatGLM这类模型的效果影响很小,吞吐能翻倍。另外检查下vLLM的tensor parallel是不是没开,单卡T4用这个也能压榨点带宽出来。
T4的带宽确实是瓶颈,试试4bit量化,效果损失不大但速度能翻倍。
T4带宽确实是瓶颈,试试4bit量化加FlashAttention,速度能翻倍,效果损失很小。
T4的瓶颈确实主要在显存带宽上,fp16的7B模型推理时计算单元经常在等数据搬运,所以首token慢很正常。可以试试4bit量化,现在GPTQ或AWQ对ChatGLM支持得不错,效果损失其实很小,生成速度能翻倍不止。另外把max_num_seqs调低到8以下,配合vLLM的continuous batching,有时候反而比大batch更稳。如果还不满意,可以看看是不是CPU解码或者tokenizer预处理拖了后腿,把这两步切到后台异步跑也能省点时间。
T4的带宽确实是瓶颈,70GB/s左右跑7B模型推理,首token慢是正常的。建议试试4bit量化,用GPTQ或者AWQ,精度损失很小,但速度能翻倍,显存占用也降到8G左右,还能开大batch。另外vLLM对T4支持一般,可以换ExLlamaV2或者llama.cpp,实测同配置下吞吐能高不少。
T4那块卡的显存带宽确实是个瓶颈,fp16下7B模型推理时内存搬运开销很大,首token慢是正常的。可以考虑上int8或者更激进的4bit量化,GLM系列量化后效果损失一般不太明显,实测速度能翻倍。另外试试把vLLM的gpu_memory_utilization调低到0.85左右,给KV cache留足空间,能减少调度延迟。
T4的显存带宽确实是瓶颈,7B模型fp16推理时计算单元经常在等数据,所以首token慢很正常。可以考虑用GPTQ或AWQ量化到4bit,显存占用降到8G左右,带宽压力小很多,生成速度能翻倍。量化对7B模型的效果影响一般不大,除非任务对精度极其敏感。另外试试FlashAttention,vLLM新版本支持了,能再挤点性能出来。
说实话,T4的瓶颈主要就在显存带宽上,16G显存跑7B模型fp16是够,但T4的带宽只有320GB/s左右,对比A100那种接近2TB/s的确实差太多,首token慢很多时候是prefill阶段内存搬运太吃力。我之前也试过在T4上跑类似模型,vLLM已经很不错了,但想明显提升的话还是得考虑量化,int8或者4bit其实对7B模型来说效果崩不了太多,特别是ChatGLM本身对量化兼容性还可以,可以先用GPTQ或者AutoGPTQ试一下4bit,显存占用能降到7-8G,生成速度能翻倍甚至更多。另外你也可以看看是不是CPU解码和GPU间数据拷贝频繁,比如用--gpu-memory-utilization 0.9把显存利用率拉满,或者试试把prompt预处理放到CPU做,减少GPU空闲等待。如果公司允许的话,换成两张T4做张量并行也能分摊计算压力,但成本会高一些。总之量化是性价比最高的路子,先调低精度试试,效果崩了再换回fp16也来得及。