最近在搞一个私有化知识库问答项目,用的ChatGLM3-6B,想把模型部署到公司内网服务器上。机器是两张4090(24G),数据量不大,就几千条文档。试了FastChat,感觉启动挺方便,但并发一高响应就很慢,显存也吃紧。后来看别人说vLLM吞吐量高很多,但配置起来有点懵,PagedAttention那些参数不太会调。有没有大佬实际部署过这两个框架的?想请教下:1)6B模型用哪个更稳?2)两张卡怎么分配显存比较合理?3)如果量化成int8或者AWQ,实际效果和速度会差多少?求指点,感谢!
部署ChatGLM3-6B用vLLM还是FastChat?显存不够怎么优化?
全部回复
共 74 条vLLM吞吐确实猛,但6B这规模FastChat调好也够用,量化AWQ能省一半显存速度还不掉太多。
vLLM吞吐确实猛,但6B这规模FastChat调好线程也够用,量化AWQ能省一半显存速度还快。
vLLM确实吞吐高,但6B这个规模其实FastChat调好也能用,关键是你得开tensor parallel把两张卡都用起来,不然单卡24G跑int8勉强够但并发一高就爆。PagedAttention不用太纠结,默认参数就行,主要把max-num-seqs调小点比如256,能明显降显存。量化的话AWQ比int8稳,速度几乎无损,但你要注意ChatGLM3的AWQ权重得自己转,网上现成的少。另外几千条文档的话,不如先试试embedding+向量库做检索,模型只用来生成答案,显存压力会小很多。
vLLM吞吐确实猛,但6B这规模FastChat调好也够用,别折腾量化先上vLLM试试。
vLLM的吞吐量确实比FastChat强不少,尤其并发上来以后差距很明显,6B模型的话我建议直接上vLLM,PagedAttention默认参数其实就能跑,不用太纠结。显存分配的话两张卡各放一半模型就行,不过你数据量小,其实单卡也能扛,另一张卡可以留着跑向量检索。量化的话int8体感速度提升有限,AWQ会好一些,但6B模型本身不大,我试过AWQ后回答质量有点下降,如果知识库对准确性要求高,建议先别动量化。
vLLM吞吐确实猛,但6B这规模FastChat调好线程池也够用,别折腾量化了先冲AWQ。
说实话你这情况我太懂了,上个月刚把ChatGLM3-6B从FastChat迁到vLLM,结论是直接用vLLM别犹豫。FastChat胜在省心,但它的调度机制对长上下文和并发请求真的不友好,4090虽然显存够,但碎片化严重,跑几个会话就卡得不行。vLLM的PagedAttention不是玄学,它把KV cache按页管理,实测同样两张4090,单卡并发8个请求,吞吐能翻三倍,延迟还稳。你数据量小,配置不用太复杂,核心就设个max-model-len(建议4096或8192),gpu-memory-utilization设0.9,剩下用默认就行。两张卡的话,别用张量并行,6B模型单卡塞得下,直接开两个实例,每张卡一个,再用负载均衡转发,比单卡双卡并行稳得多。量化方面,我试过AWQ 4bit,显存直接降到8G左右,速度比FP16快大概1.5倍,但说实话知识库场景下,回答质量会有一点点肉眼可见的下降,尤其是长尾问题,如果业务对准确率敏感,建议先用int8,显存占用也就12G左右,效果损失小得多。最后提醒一句,vLLM对ChatGLM3的适配版本有坑,记得用0.4.0以上,不然会报算子错误,我当时卡了一下午。
vLLM确实更适合你这场景,6B模型并发高的时候FastChat的调度开销太明显。两张4090不用太纠结,直接张量并行跑vLLM就行,显存分配让它自己管,PagedAttention默认参数对6B来说够用了。量化的话建议先试int8,AWQ在小模型上收益没那么夸张,尤其你数据量就几千条,精度损失可能比想象中更影响检索质量。顺便问下,你知识库用的什么embedding模型?如果检索端太弱,光优化推理端也救不回来。
vLLM吞吐确实猛,但6B这规模FastChat调好也够用,量化AWQ能省一半显存速度几乎不掉。
vLLM的吞吐量优势在你这场景下其实没那么明显,6B模型两张4090跑FastChat完全够用,瓶颈多半在max-length和并发线程配置上。显存分配建议开张卡跑张量并行,另一张留30%给KV cache,别全塞满。int8量化速度基本不掉,但AWQ对6B提升感知不强,先试下vLLM的默认参数再说,PagedAttention不用调,开起来就行。
vLLM确实适合高并发,6B模型吃不满两张4090,单卡跑vLLM留一张卡做embedding和rerank更划算。PagedAttention不用太纠结,默认参数对6B够用了。量化的话AWQ比int8稳,速度提升有限但显存能省不少,实测3.5B左右显存占用能跑起来。
别纠结,6B直接上vLLM,吞吐量差距很明显,量化用AWQ基本不掉点,两张卡张量并行就行。
说实话你这情况我建议直接上vLLM,FastChat胜在省心但吞吐确实拉胯,尤其并发上来之后显存碎片化严重。我这边之前也是6B模型,单卡24G跑vLLM,开PagedAttention之后并发能到20多,响应时间比FastChat稳定太多,关键是它自动管理KV cache,不用手动调参,你就把max-num-seqs设个256,gpu-memory-utilization调到0.9就行。两张4090的话,别搞张量并行,6B模型单卡就能塞下,直接把第二张卡空出来或者跑另一个副本做负载均衡,这样反而更稳,因为张量并行在小模型上通信开销会吃掉不少收益。量化的话我试过AWQ 4bit,显存直接降到8G左右,但说实话生成质量有轻微下降,尤其在长文档问答里会出现细节丢失,int8的话效果跟fp16几乎没差,但速度提升不明显,只省显存。如果你显存不特别紧张,建议先跑fp16,配上vLLM的continuous batching,已经能压榨出不少性能了。另外你几千条文档的RAG场景,瓶颈大概率在embedding和检索上,模型推理反而是次要的,建议先测一下整体链路再决定要不要上量化。
vLLM确实适合你的场景,6B模型吞吐量差距挺明显的,尤其并发上来之后FastChat容易卡在显存碎片上。两张4090的话建议tensor parallel切一下,每张卡12G左右,int8量化其实掉点不多,AWQ对ChatGLM3支持也还行,但得看你们知识库的检索逻辑吃不吃精度。我自己试过vLLM配AWQ,响应速度能快个两三倍,但PagedAttention的gpu_memory_utilization记得调到0.85左右,别拉满,不然长上下文容易爆。要是刚上手怕配置麻烦,可以先跑个baseline对比下,再慢慢调参数。
看到你这个配置我第一反应是羡慕,两张4090跑6B其实很宽裕了,问题大概率出在框架选型上。vLLM确实在吞吐上碾压FastChat,尤其并发高的时候,PagedAttention本质是显存碎片管理,你不需要调参,默认值就够用,真正要改的是max-num-seqs和gpu-memory-utilization这两个,后者设个0.9就行,别贪心。
显存分配的话,我建议优先考虑张量并行而不是数据并行,两张卡直接tensor-parallel-size=2,6B模型拆分后每卡占用很小,能留出大量KV cache空间,这比FastChat那种默认的线程模式高效得多。至于量化,AWQ比int8稳,特别是长尾知识库场景,6B量化后loss不大,实测速度能提升30%左右,但如果你文档检索依赖embedding,那瓶颈反而可能在向量化环节,跟LLM推理关系不大了。
还有个坑,你说的几千条文档如果走RAG,那响应慢未必是生成模型的问题,可能卡在检索排序上。建议先压测定位瓶颈,别急着换框架,vLLM对ChatGLM3的支持其实挺完善,官方文档里就有对应例子,照着跑一遍就顺了。另外如果真要量化,记得先校准数据集,用你自己的文档子集,不然效果会漂。
你这情况我太熟了,之前做内部工具也是ChatGLM3-6B,两张4090折腾了快两周。vLLM确实吞吐量碾压FastChat,但你这数据量几千条文档,其实并发压力没那么大,我建议先用vLLM的默认配置跑起来,PagedAttention那些参数别碰,默认值对6B足够稳,真遇到OOM再调gpu-memory-utilization。显存分配的话,两张卡最好别用张量并行,6B模型单卡就能塞下,另一张卡留给推理的KV cache和请求队列,vLLM会自动负载均衡,手动设tensor-parallel-size=1反而更省心。量化方面我试过AWQ的4bit,显存能降到7G左右,响应快20%-30%,但回答质量在长上下文场景下偶尔会飘,int8更保守,效果几乎无损,速度提升有限。你如果只想稳,就别量化,24G单卡够跑;想折腾就AWQ,但记得保留原始FP16权重做对比测试。最后提醒下,FastChat启动方便但调度器效率低,换vLLM后你的并发瓶颈大概率会从显存变成CPU,记得把--max-num-seqs调小点。
vLLM确实更适合你这场景,6B规模下吞吐差距不是一星半点,尤其并发上来之后。两张4090可以先用张量并行跑FP16,显存不够再切int8,AWQ的话速度损失很小但需要花时间校准数据集。PagedAttention参数别太纠结,默认值对6B完全够用,主要调下max-num-seqs和gpu-memory-utilization就行。我自己试过int8量化后回答质量基本没掉,但延迟能降30%左右,建议你直接上vLLM+AWQ组合。
我最近刚好用vLLM跑过ChatGLM3-6B,响应速度确实比FastChat快一截,尤其并发上去后差距很明显。不过vLLM配置确实有点门槛,但PagedAttention其实不用太纠结,默认参数对6B这种小模型够用了,关键是把gpu-memory-utilization设到0.9左右,两张卡各跑一个实例或者用tensor-parallel-size=2都行,后者更省心。量化的话,AWQ在4bit下显存能压到8G以内,速度损失大概10%,但知识库场景准确率下降不明显,int8就有点鸡肋了,性价比不高。另外你数据量不大,建议把embedding和rerank也放一张卡上,别和推理抢显存,不然4090也会卡。
vLLM上6B挺稳的,吞吐确实比FastChat高,两张卡直接tensor parallel就行,int8基本无损。
vLLM的吞吐优势在6B上其实没那么夸张,但PagedAttention对长文档场景确实友好,尤其你才几千条数据,并发压力不大的话FastChat完全够用。显存分配建议两张卡各跑一个副本做负载均衡,别用张量并行,6B单卡24G绰绰有余。量化的话AWQ比int8稳,速度提升20%左右但精度损失很小,不过4090跑6B其实没必要量化,除非你想把上下文拉满。我上次试过vLLM配AWQ,启动参数确实折腾,但调好后推理延迟比FastChat低不少,你可以先跑个benchmark对比下再决定。