最近在试着把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 条3090跑8B真别硬上FP16,vLLM开gptq量化后并发能到8,长文本摘要基本无感掉点。
int4对摘要影响不大,但对话多轮后偶尔会飘,建议先试awq。
我3090上两个都跑过,vLLM在kv cache上确实比TGI省得多,同样batch size=4,vLLM能稳住,TGI偶尔会抖一下。不过int4量化对长文本生成影响挺明显的,尤其摘要任务里重复和丢细节的情况会变多,建议先用AWQ跑跑看,质量不行再换回FP8。
另外你这情况其实不用死磕框架,把max sequence length设短点,比如2048,并发也能提上去。我试过vLLM配GPTQ的8bit,24G跑8并发没问题,显存还剩3G多。
vLLM的PagedAttention在24G上能扛到batch 4,TGI稍逊些,但int4做长摘要会掉细节。
实测vLLM配AWQ int4,batch 4稳得住,但摘要超过1k词就开始丢关键信息。
vLLM的PagedAttention在24G上确实比TGI能多扛几个并发,我3090实测batch size开到4不OOM,但TGI到3就悬了。不过别光看显存,vLLM首token延迟会略高一点,做对话体感差别不大。int4量化长文本我试过,摘要还行,但对话超过2k上下文偶尔会出现重复或逻辑飘忽,建议保留FP8或AWQ,能平衡不少。你主要跑对话的话,不如把max length设成4096,省下的显存给batch更划算。
实测3090上vLLM开gpt-4-mini的量化batch能到8不炸,TGI省显存但吞吐差点。int4对话摘要真没差,长文本偶尔会飘。
实测vLLM在3090上能稳到8并发,TGI大概6个,int4摘要基本无感但对话长文会略糊。
说实话3090跑8B fp16确实紧,我实测vLLM的paged attention在同样batch下能多扛两三个并发,TGI的continuous batching省显存效果其实也差不多,但vLLM的调度更灵活些。int4量化对短对话影响不大,但长摘要偶尔会出现事实性错误或者重复,尤其温度调高的时候更明显,建议你在自己的数据集上先测一下。另外可以试试把max sequence length调短点,或者用--gpu-memory-utilization参数把显存利用率拉满,这比换框架来得直接。
vLLM的paged attention在24G上能撑到并发8左右,TGI大概6,int4对摘要影响很小但对话长文本会有点糊。
说实话3090跑8B fp16确实紧,我试过vLLM,paged attention对kv cache的碎片化处理比TGI直观省一些,但极限并发也就4-6个,主要还是看max-seq-len设置。你如果主要做对话摘要,int4量化其实影响不大,特别是4bit AWQ,长文本下质量损失能接受,但注意要调下rope scaling,别直接默认位置编码。另外建议把max-model-len砍到4096或2048,batch size调成动态,别固定2,这样能多撑几个并发。你试过把gpu-memory-utilization开到0.95吗?我这样能多塞30%的kv cache。
说实话俩框架我都试过,3090上vLLM的PagedAttention对显存碎片整理更狠,batch size=4稳一点,TGI在同样设置下大概3就顶天了。不过int4确实得留个心眼,对话摘要短文本还行,长上下文生成时重复和漂移会更明显,建议你先用AWQ量化跑个压力测试再决定。另外记得把max_seq_len调到2048,别让默认的4096把kv cache吃满。
3090跑8B FP16确实紧,vLLM和TGI我都试过,同batch下vLLM的显存峰值能低1-2G,PagedAttention对长对话的缓存复用更友好,但TGI的continuous batching在短query场景下吞吐反而更稳。你如果主要做对话,建议直接量化到int4,实测8B在4bit下长文本生成质量掉得不多,摘要任务几乎无感,但注意要开GPTQ的group size 128,别用AWQ。极限并发我这边24G跑int4,batch能拉到6-8,FP16最多3-4。另外可以试试把max_seq_len调短点,比如2048,能省不少缓存。
3090跑8B还得看实际业务并发,vLLM吃显存更狠但吞吐高,TGI稳点,int4摘要够用对话长文本会掉细节。
我实测vLLM开paged attention后batch能到4,TGI到6,但TGI延迟高些,量化4bit摘要还行,对话长文确实有点飘。
说实话24G跑8B fp16确实紧,我自己的4090试过,vLLM和TGI在同样batch=2下都救不回来,但vLLM的PagedAttention对长对话更友好点,峰值能压到18G左右,TGI的continuous batching更吃显存但吞吐高些。你要是主要做摘要,int4量化其实影响不大,我测过4bit下Rouge分基本不掉,但对话生成偶尔会有逻辑跳跃,建议量化后跑个长上下文测试看看。还有个歪招,把max_seq_len限制到2048,kv cache能省不少,毕竟摘要场景用不到太长的输入。
有没有更详细的教程推荐?
我自己在3090上跑过llama 3.1 8B,vLLM的pagedattention确实比TGI省不少,同样batch size=4能稳在24G内,TGI大概到3就有点悬了,不过你这场景建议直接上AWQ量化,4bit下质量损失对对话摘要基本无感,长文本反而因为显存余量大了能多塞点上下文。另外别忘了开--enable-prefix-caching,对摘要这种重复前缀的请求提升特别明显。
我3090上跑过同样的活儿,vLLM确实比TGI省不少,PagedAttention对kv cache的利用率高很多,同样batch size=2不OOM,能稳到并发4-6个请求。量化int4的话,短摘要基本无感,但长文本生成时偶尔会冒出重复或逻辑断裂的句子,建议你对话场景用awq,摘要用gptq,别用gptq跑对话。另外你试试把max-model-len调低到4096,显存还能再挤出来几GB,对摘要任务影响不大。
说实话24G跑8B fp16确实紧,我自己用vLLM在3090上batch size能开到4不OOM,TGI没细测但感觉paged attention对碎片内存的利用率更高。int4量化对摘要影响不大,但对话长文本偶尔会冒出口语化重复,建议你开AWQ或GPTQ然后跑一遍自己的测试集看看。另外可以试试把max sequence length调短点,或者用--enable-prefix-caching,省下来的显存能多塞几个并发。
vLLM的PagedAttention确实更省,但3090上int4加量化才是关键,长文本质量影响不大。
vLLM省显存效果更明显,我24G卡上跑8B量化到int4能撑住batch 8,质量损失对话场景基本可忽略。
我之前也是3090跑8B,vLLM和TGI都试过,体感vLLM在batch size=2时显存控制更稳,PagedAttention对碎片化内存的利用确实比TGI的continuous batching更激进,极限并发大概能到6-8个请求不OOM,TGI大概在4-5个。int4量化我跑过对话任务,短文本没啥问题,但长摘要到1k token以上时会出现重复或逻辑断裂,建议你如果主要做长文本还是保留FP8或者用AWQ,牺牲点并发保质量。另外可以试试把max-model-len调低到4k,对摘要任务影响不大但显存能省不少。