最近在搞一个私有化知识库问答项目,用的ChatGLM3-6B,想把模型部署到公司内网服务器上。机器是两张4090(24G),数据量不大,就几千条文档。试了FastChat,感觉启动挺方便,但并发一高响应就很慢,显存也吃紧。后来看别人说vLLM吞吐量高很多,但配置起来有点懵,PagedAttention那些参数不太会调。有没有大佬实际部署过这两个框架的?想请教下:1)6B模型用哪个更稳?2)两张卡怎么分配显存比较合理?3)如果量化成int8或者AWQ,实际效果和速度会差多少?求指点,感谢!
部署ChatGLM3-6B用vLLM还是FastChat?显存不够怎么优化?
全部回复
共 74 条vLLM的PagedAttention对长上下文和并发提升确实明显,6B模型用vLLM更稳,FastChat做原型验证还行,生产环境别指望。两张4090可以试试tensor parallel,但6B模型单卡也跑得动,另一张卡留给embedding或rerank模型更划算。量化方面,int8实测速度基本没损失,AWQ在低显存下更友好,但知识库问答场景建议先试试int8,效果差距很小,显存能省下3-4G。你文档量不大,瓶颈大概率在检索和生成调参,别太纠结框架。
同款场景,我之前也在这俩之间纠结。vLLM确实吃吞吐,但6B这个体量FastChat的短板不在框架本身,你把max-length调小点、开个continuous batching,并发其实能救回来不少。显存分配建议两张卡都跑张量并行,单卡24G跑6B其实有点浪费,int8量化后显存能省一半,但AWQ对ChatGLM的激活值敏感,效果掉得比int8明显,速度提升倒不大。另外如果文档检索为主,不如把量化省下来的显存留给embedding和向量库,响应体验会比死磕推理框架更直接。
说实话你这需求直接上vLLM就行,FastChat并发一高确实拉胯,6B模型用vLLM吞吐能翻倍,PagedAttention其实不用细调,默认参数就够用。两张4090的话建议张量并行(tensor parallel),各占12G左右,剩下留给KV cache,几千条文档完全没压力。量化方面我试过AWQ,int4下显存能压到10G以内,速度基本不掉,但效果会有轻微下降,做知识库问答够用,int8反倒性价比不高。你要是图省事可以先用vLLM默认配置跑起来,遇到OOM再调gpu-memory-utilization,别一上来就折腾量化。
vLLM上手确实有点门槛,但6B规模下吞吐优势很明显,尤其你并发一高FastChat就吃紧,建议直接换vLLM。双4090的话,张量并行设2就行,显存分配不用太纠结,vLLM会自动切块,重点是把max-model-len调小点,几千文档没必要留太长上下文。量化的话int8实测掉点不多,AWQ在6B上速度提升大概20%-30%,但显存省得有限,你要是24G×2其实不太需要量化,优先保证精度吧。
vLLM吃显存确实猛,但吞吐高不是一星半点,量化到AWQ能省不少,两张卡开tensor并行试试。
vLLM吃显存但吞吐确实猛,6B上两张卡开tensor parallel够用,int8能省一半显存速度掉得不多。
vLLM吃显存确实猛,但吞吐量真香,6B的话两张卡切张量并行够用,int8基本无感掉点。
我也踩过类似的坑,FastChat胜在省心,但vLLM的吞吐确实强一截,尤其并发上来之后差距很明显。6B这种规模,vLLM配默认参数基本够用,PagedAttention不用太纠结,先跑通再调。两张4090的话,建议张量并行直接开2,显存分配上vLLM会自动管理,不用手动指定。量化方面我自己试过AWQ,int4下显存能压到10G左右,速度反而比int8快,质量损失的感知得看你的知识库场景,如果只是检索式问答问题不大。
vLLM吃显存确实比FastChat狠,但吞吐量真不是一星半点,6B模型上两张4090跑vLLM绝对够,PagedAttention主要调个max-num-seqs和gpu-memory-utilization就行,别用默认值。显存分配建议tensor并行开2,每张卡留个2-3G给KV cache,不然长文档容易爆。量化的话实测AWQ比int8稳,速度提升大概20-30%,但文档检索场景下质量损失基本感知不到,可以优先试AWQ。
vLLM的上限确实高,但你这数据量用FastChat也够,瓶颈多半在并发线程和显存碎片上,可以试试把两张卡都塞满,用tensor并行再加--num-gpu 2,显存吃紧就开--max-memory限制每卡占用。量化的话,int8基本无损,AWQ在6B上速度提升明显但偶尔有输出抖动,建议先跑一批测试文档看看。你几千条文档其实可以试试只量化KV cache,效果和速度平衡最好。
vLLM那个PagedAttention没你想的那么玄乎,默认参数基本就能跑,关键是把gpu-memory-utilization设到0.9左右,两张卡就用tensor-parallel-size=2,数据量才几千条文档的话其实不用太纠结吞吐,FastChat慢多半是它默认的调度策略太保守。我自己试过ChatGLM3-6B,vLLM的TTFT(首token延迟)确实比FastChat低不少,但如果你只是内部几十个人用,FastChat调好max-num-seqs和max-total-tokens也能凑合,没必要为了极致性能去啃vLLM的文档。显存分配上,两张卡最好别各跑一个副本,用张量并行反而省显存,6B模型int8下大概12G左右,AWQ能压到10G以内,但说实话4090的24G跑FP16都绰绰有余,除非你同时开长上下文和超大批次。量化方面我建议先试AWQ,速度比int8快且掉点不明显,但要注意AWQ对ChatGLM3-6B的支持在vLLM里可能有点坑,有些版本会报算子不匹配,实在不行就退回int8,效果差异在知识库问答这种场景里基本感知不到。你既然数据量小,不如直接上vLLM,把max-model-len设成4096,block-size用默认的16,剩下交给框架自己调,跑通了再回头看显存瓶颈在哪。还有个事,FastChat的并发慢有时候是embedding和re-ranking拖后腿,跟LLM本身没关系,你检查下是不是知识库检索那段卡住了。
4090双卡跑6B其实挺宽裕的,vLLM的吞吐优势在并发场景下确实明显,但FastChat胜在省心。我个人建议直接上vLLM,PagedAttention默认参数就能跑,不用太纠结调参,先把max-num-seqs和gpu-memory-utilization设到0.85左右试试。两张卡的话,如果数据量不大可以考虑张量并行,但6B模型单卡就能塞下,另一张卡留给后续扩展或者跑个embedding模型更划算。量化的话int8对速度提升有限,AWQ在4090上能快个20%-30%,但知识库场景更吃显存带宽,效果损失其实不太能感知到,你可以先不开量化跑通流程再对比。
vLLM吞吐确实香,但6B规模FastChat调好batch也够用,4090双卡建议直接tensor并行。量化试过AWQ,速度提升明显但知识库检索质量会掉点,得自己权衡。
vLLM的PagedAttention别纠结,默认参数就能跑,关键是把max-num-seqs调小点省显存。int8实测比AWQ稳,回答质量损失小,双卡张量并行比
说实话这俩框架我都折腾过,最后留了vLLM。FastChat胜在开箱即用,但6B这种模型并发一上来确实容易卡死,它那个调度太笨了。vLLM的PagedAttention不用纠结太多,默认参数对6B完全够用,你只要把gpu-memory-utilization调到0.9左右,剩下交给它自己管理。
双4090的话建议直接tensor-parallel-size=2,别学网上那些分卡跑两个副本的骚操作,知识库场景需要的是单请求低延迟,不是多副本吞吐。我试过把两张卡拆开各部署一份,结果显存碎片化反而更严重。
int8和AWQ我实测过,AWQ在6B上基本能保住95%的原始精度,显存能压到12G左右,速度比FP16快大概20%。但你这24G卡其实不太需要量化,除非你想同时塞别的模型。真要量化的话,建议用GPTQ,AWQ和ChatGLM的兼容性偶尔会有奇怪的问题。
对了你数据量小的话,可以试试把embedding模型单独放一张卡,主模型放另一张,这样推理时互不干扰。另外记得开vLLM的continuous-batching,默认关着的话性能差一倍不止。
vLLM吃显存确实更狠,但吞吐量真香,两张卡直接tensor parallel,量化选AWQ比int8稳。
我之前6B试过,AWQ后速度提升明显,就是响应延迟会高一点点,文档少的话其实FastChat也够用。
vLLM确实更适合高并发,6B模型量级不大,直接上vLLM就行,PagedAttention默认参数其实够用,不用太纠结。两张4090的话,可以试试tensor parallel=2,显存分配上注意把max-model-len调低点,比如2048,能省不少显存。量化的话,AWQ比int8稳,速度提升明显,但知识库场景里检索质量可能会掉一点,建议先跑几个测试case对比下再定。
我自己的使用体验是vLLM在并发上确实碾压FastChat,尤其是多轮对话场景下显存碎片少很多,但6B模型不需要太纠结PagedAttention那些参数,默认配置跑起来就很稳。两张4090的话,建议单卡部署一个实例,另一张留给后续扩展或者跑embedding模型,别强行张量并行,6B用不上。量化方面AWQ挺香的,实测int4比int8速度提升明显,回答质量基本没掉,显存能压到12G左右,但要注意有些算子会变慢,先跑个benchmark再决定。
vLLM吞吐确实猛,但6B量级FastChat调好线程也不差,重点先上int8量化,显存能省一半。
vLLM在6B上吞吐确实比FastChat强不少,尤其并发上来后显存复用优势很明显,但PagedAttention主要调max_num_seqs和gpu_memory_utilization这两个就行,别被吓到。两张4090的话建议先单卡跑,另一张留给后续服务或干脆开个tensor parallel,24G跑6B其实挺宽裕的。量化我试过AWQ,int4下速度提升有限但显存能省一半,知识库场景效果损失基本感知不到,int8反而性价比不高。你数据量小的话其实瓶颈大概率在检索和prompt拼接上,模型推理倒不是最急的。
vLLM确实更适合你这场景,吞吐量差距不是一点半点,尤其并发高的时候FastChat容易卡在显存管理上。6B模型两张4090用vLLM开tensor parallel就行,PagedAttention基本不用调,默认参数跑起来就挺稳。量化的话建议先试AWQ,int8在6B上掉点不明显,速度能快不少,但vLLM对AWQ支持比int8好,glm3的话可能得自己转一下格式。显存分配上,两张卡别均分,主卡多给点,比如14G和10G,留点余量给KV cache,具体可以看vllm的日志调整。