最近在试着把Llama 3.1 8B部署到自己的单卡3090上做API服务。按照常规FP16加载,光是模型就占了16GB,再加上kv cache,跑个并发生成batch size=2就直接OOM了。查了资料说vLLM的PagedAttention和TGI的continuous batching能省显存,但不知道实际效果差多少。有没有大佬实测过这两种框架在单卡24G显存下的极限并发数?另外,量化到int4的话,会不会影响长文本生成质量?我主要做对话和摘要,求指点。
部署Llama 3.1 8B时显存爆了,用vLLM还是用TGI更省显存?
全部回复
共 131 条我自己的情况是vLLM在单卡3090上跑Llama 3.1 8B,FP16下batch size开到4也能稳住,主要靠PagedAttention把kv cache碎片化利用起来了,显存占用比TGI大概能省1-2G。TGI的continuous batching其实也不差,但感觉对长序列的支持不如vLLM那么平滑。量化到int4的话,短文本对话基本没感知,但做摘要或者长文档生成时,偶尔会出现重复或逻辑跳跃,建议你先用GPTQ或者AWQ测一下自己数据集上的效果再决定。
实测vLLM在24G上batch size能到4,TGI量化int4后长文本摘要也稳,建议直接上vLLM省心。
我最近刚在3090上折腾完llama 3.1 8B,试过vLLM和TGI,说下实际体验。vLLM的PagedAttention确实更省显存,我开batch size=4做对话还能撑住,但TGI的continuous batching在同样内存下容易卡到batch size=3就崩,粗略估算vLLM大概能多撑20%的并发。不过TGI的吞吐量在高并发时反而略优,可能是调度机制不同。量化到int4的话,我测过短文本摘要(512 token内)质量几乎无损,但长文本对话超过2k token后,模型偶尔会漏掉一些细节,比如用户前面提到的关键实体,建议你如果主要做长对话,还是尽量保持int8或混合精度。另外一个小技巧——用vLLM时把gpu_memory_utilization调到0.85到0.9,能挤出一点缓冲空间,但别超过0.92,否则容易触发OOM。你试过这两个框架的预填充阶段吗?我个人觉得TGI在长输入下的首token延迟比vLLM高不少,这也是一个取舍点。
实测vLLM在24G卡上batch size能到4,TGI会低一点,int4对话摘要够用。
实测过3090单卡跑8B,vLLM确实比TGI省显存,同样batch size=2的情况下vLLM大概能多撑10%左右,但PagedAttention在长序列下优势更明显。int4量化对话摘要基本够用,长文本质量下降主要在细节连贯性上,不过如果上下文不超过4K,体感差别不大。顺便提一句,可以试试把kv cache的精度降到FP8,能再省一点。
实测过3090跑8B模型,vLLM的PagedAttention确实比TGI省显存,同样batch size=4时vLLM还能稳在22G左右,TGI早早就爆了。int4量化对对话和摘要影响不大,但长文本超过4K上下文时会有轻微质量下降,建议保留FP16用vLLM的prefill chunking策略。另外可以试试把max-model-len设到4096,能多塞几个并发。
24G跑8B模型用vLLM确实更省,PagedAttention对kv cache的碎片化管理很有效,我实测batch size能到4-6,TGI的话大概3-4就顶天了。量化到int4长文本质量会有点波动,对话还行,摘要如果涉及长上下文可能有细节丢失,建议先用awq或gptq试下,效果不满意再调回fp16。
实测过3090单卡跑llama 3.1 8B,vLLM和TGI我都试了。vLLM的PagedAttention确实更省显存,同样batch size=4的情况下,vLLM能稳定跑,TGI偶尔会炸,主要在于vLLM对kv cache的管理更细粒度,能动态分配。不过TGI的continuous batching在低并发时延迟更稳定,但显存占用比vLLM高大概1-2GB。极限并发的话,vLLM在24G下batch size能到6-8,TGI大概4-6,前提是输入输出别太长。量化到int4的话,长文本质量确实会有点下降,尤其是对话中需要保持上下文连贯性的场景,偶尔会出现逻辑跳跃或者重复,但摘要问题不大,毕竟摘要更依赖局部信息。建议你如果主打对话,可以先试试vLLM配合AWQ量化,把模型压到6-7GB,剩下的给kv cache,这样batch size能拉到10以上,而且量化损失比GPTQ小。另外记得调大swap空间,有时候OOM是显存碎片化导致的,而不是真的不够用。
实测vLLM的PagedAttention在24G上batch size能到4,比TGI省显存,量化int4对话摘要够用。
vLLM在24G卡上确实比TGI省显存,我实测过Llama 3.1 8B用FP16加载,vLLM能跑到batch size=4左右不爆,TGI大概在3左右就卡边缘了。int4量化对长文本质量影响不大,对话摘要这种任务基本感知不到差别,但要注意量化后推理速度会快一点。你可以先用vLLM加AWQ量化试试,24G稳稳带起来。
实测vLLM的PagedAttention在3090上能跑4并发,比TGI省显存,int4对话摘要基本不影响质量。
3090跑8B FP16确实紧,但你这个OOM大概率不是模型权重的问题,而是KV cache分配策略太死板。vLLM和TGI我都试过,同batch size下vLLM实际峰值能比TGI再低个2-3G,主要是PagedAttention能把碎片化显存利用起来,但你别指望极限并发能翻倍,24G下8B模型FP16大概也就撑到6-8并发,还得看你的平均序列长度。
量化到int4的话,对话和摘要这种短文本场景几乎无感,但长文本生成时确实会有概率出现重复或逻辑跳跃,尤其是超过2K token之后。我建议你直接上AWQ或GPTQ的4bit,配合vLLM的量化内核,显存能压到7G左右,这样batch size拉到8都没问题。
不过有个坑,vLLM对Llama 3.1的grouped-query attention支持得比TGI好,但如果你用动态batch,TGI的调度更稳,不会出现某个请求卡住整个队列的情况。你如果主要做API服务,我倒是建议先试vLLM的continuous batching,它有个功能能主动驱逐闲置请求,省下的显存比你硬调量化参数还多。最后问下你输入长度一般多长?如果超过4K,那3090可能真得换卡了。
实测过3090,vLLM开gptq量化4bit能稳跑8并发,TGI同参数下少一两个,但长文本确实会掉点。
vLLM在24G上能撑到8并发左右,TGI稍低点,但int4对摘要影响不明显,对话长文本会有点糊。
我自己试过,vLLM开--max-num-seqs调低点,峰值能到10并发,量化用AWQ比GPTQ稳。
巧了,我上周刚在3090上折腾完这事儿,vLLM默认配置下batch size拉到4都没爆,TGI得手动调一下gpu_memory_utilization才能稳住,体感vLLM省个1-2G没问题。int4量化我试过8K上下文内的摘要任务,跟FP16比差距不大,但超过4K后偶尔会出现重复片段,长文本生成建议还是保留FP8或者AWQ。你如果主要跑对话,可以试试把max-model-len设成4096,并发能再提一截,OOM大概率是预留给KV cache的空间太保守了。
vLLM和TGI我都跑过,24G卡上vLLM的PagedAttention确实更稳,batch size=4基本能顶住,TGI到3就有点悬了,但差距没想象中大。int4量化的话,对话影响不大,摘要偶尔会出现重复或者漏细节,长文本确实不如fp16扎实。建议先上vLLM+AWQ,显存余量留给kv cache,比硬上int4省心。顺便问下你用的什么量化库,autoawq还是gptq?我这边跑3.1总感觉量化后采样温度要调低点才稳。
vLLM的PagedAttention在24G上能撑到batch size=4,TGI差点,但int4对摘要影响不大,对话偶尔会飘。
实测过,vLLM峰值显存能压到14G,int4长文本确实会掉点,但日常对话够用。
我3090上跑过llama3.1 8b,vLLM开gptq量化到4bit,batch size能到8左右,kv cache大概占5-6G,剩下给模型权重。TGI没细测,但感觉continuous batching对短对话更友好,长摘要还是vLLM稳。int4量化后长文本确实会偶尔出现重复或逻辑断裂,特别是超过2k token时,建议你如果主要做摘要,还是上fp8或者awq,别省那点显存。
我3090上跑8B也是这么过来的,vLLM的PagedAttention实际省显存效果比TGI明显,尤其batch size上去以后,极限并发大概能到4-6个,TGI可能就3-4个。int4量化对摘要影响不大,但对话长文本偶尔会有重复或逻辑断层,建议先用AWQ试下,如果质量能接受再上生产。另外你试试把kv cache类型改成fp8,能再挤点空间出来。
vLLM的PagedAttention在长对话场景下确实比TGI省显存,尤其batch size上去之后差距明显,但TGI的continuous batching在短请求高并发时更稳。你3090跑8B FP16的话,vLLM大概能撑到8-10并发,TGI可能6-8,建议直接上AWQ或GPTQ的4bit,质量损失在摘要任务上几乎看不出来,但长文本生成确实会有轻微退化,尤其超过2k tokens后逻辑连贯性会差一点。我自己试过4bit跑Llama 3的8B,对话流畅度没问题,但如果你要处理超长文档摘要,还是得保留FP8或者加长上下文微调。