最近在搞一个私有化知识库问答项目,用的ChatGLM3-6B,想把模型部署到公司内网服务器上。机器是两张4090(24G),数据量不大,就几千条文档。试了FastChat,感觉启动挺方便,但并发一高响应就很慢,显存也吃紧。后来看别人说vLLM吞吐量高很多,但配置起来有点懵,PagedAttention那些参数不太会调。有没有大佬实际部署过这两个框架的?想请教下:1)6B模型用哪个更稳?2)两张卡怎么分配显存比较合理?3)如果量化成int8或者AWQ,实际效果和速度会差多少?求指点,感谢!
部署ChatGLM3-6B用vLLM还是FastChat?显存不够怎么优化?
全部回复
共 88 条vLLM吞吐确实香,但6B模型FastChat调好也够用,4090两张跑int8量化稳得很。
同款场景,我也是两张4090跑ChatGLM3-6B做内部知识库,FastChat启动是方便,但一压测就露馅,显存碎片化严重,后来切到vLLM之后吞吐直接翻倍,体感上响应速度快了不止一截。vLLM配置没那么玄乎,PagedAttention基本不用手动调,默认参数就能跑,主要把max-model-len和gpu-memory-utilization设好就行,两张卡建议各分配90%左右的显存,剩下留给KV cache。量化的话我试过AWQ 4bit,效果比int8好,困惑度下降不明显,但生成速度能再快个30%左右,不过如果你们文档检索后的prompt很长,建议还是先跑fp16,因为量化后长上下文下会有概率输出退化。你几千条文档其实数据量不大,瓶颈主要在并发和显存,vLLM开continuous batching之后,两张卡能撑住20个并发基本不抖。有个坑是vLLM对ChatGLM3的模板支持偶尔要手动改一下chat_template,不然多轮对话会串,FastChat就没这问题。
vLLM那个吞吐优势在6B上其实没想象中夸张,但PagedAttention对长文档场景确实友好,尤其你知识库碎片多的时候显存碎片能省不少。FastChat胜在省心,不过并发一上来就得靠调max-memory和swap参数硬撑,我试过把KV cache压到0.3以下才勉强稳。两张4090的话建议直接tensor parallel,单卡跑int8反而容易爆显存。量化这块AWQ比int8稳,速度基本不掉,但中文效果会有轻微损失,你文档量小的话可以接受。
vLLM确实香,我拿6B试过,吞吐量比FastChat高一大截,尤其并发上来以后差距很明显,不过配置确实要花点时间,PagedAttention默认参数其实够用,不用太纠结。两张4090的话建议张量并行,每张卡分12G左右,量化成int8显存压力小很多,速度损失大概在10%以内,AWQ更稳但部署麻烦点,看你项目对响应时延的要求了。另外几千条文档的话,检索这块是不是也吃显存?可以试试把embedding模型单独放一张卡,主模型用另一张,这样调度更灵活。
vLLM吞吐确实猛,但6B模型FastChat调好也够用,量化AWQ能省一半显存,速度损失不大。
vLLM吞吐确实猛,但6B规模FastChat调好batch也够用,别一上来就上强度。两张卡直接张量并行,int8量化损失小,AWQ速度香但显存省不了太多。
vLLM吞吐确实猛,但6B没必要上量化,两张卡张量并行跑FP16最省心。
vLLM确实值得折腾一下,6B模型并发高的时候PagedAttention优势很明显,我这边单卡24G跑int8能稳定撑住20路左右。两张卡的话建议张量并行关掉,直接数据并行各跑各的,省得通信开销反而拖慢速度。量化方面AWQ比int8稳,体感速度几乎没损失,但显存能省下4-5G,你这数据量其实不用太纠结精度。FastChat适合快速验证,真上生产还是vLLM吧。
这题我熟,之前踩过坑。vLLM配置别被参数吓到,默认值就能跑,主要调下max-num-seqs和gpu-memory-utilization就行,0.9那个值挺关键。两张4090别做张量并行,6B模型单卡完全带得动,双卡反而浪费带宽。量化我试过AWQ,4bit下回答质量掉得能接受,速度比FP16快将近一倍,显存直接减半,你知识库场景完全够用。
我用的vLLM,FastChat并发上来确实拉胯。显存分配这事,建议先看下你实际峰值占用,我这边24G单卡跑6B int8,KV cache留了8G左右,剩余给模型,用gpu-memory-utilization设成0.85就挺稳
vLLM吞吐确实猛,但6B这体量FastChat调好也够用,显存紧就上int8,AWQ效果更稳但麻烦点。
vLLM确实吞吐量香,但6B模型上FastChat调好tensor并行也够用,你这数据量瓶颈多半在RAG检索不在生成。两张4090建议直接张量并行,各占12G左右,剩下留给KV cache,int8量化基本无损,AWQ在小batch下收益不明显,但显存能压到10G以内,优先试试FP16+张量并行,真爆显存再上量化。
vLLM吞吐确实强,但6B模型FastChat调好batch也够用,两张卡直接张量并行就行。量化的话int8损失小,AWQ速度提升明显但得看你的知识库检索重不重。
4090双卡跑6B其实vLLM更省心,pagedattention默认参数就行,显存不够就开gpu-memory-utilization到0.9。int8和AWQ我实测差距不大
vLLM吞吐确实强,但6B这规模FastChat调好也够用,4090双卡建议tensor parallel加int8量化,AWQ效果更稳但部署麻烦点。
vLLM上限高但调参费劲,你这规模FastChat加量化够用,两张卡各塞一半模型就行。
vLLM吃显存更狠但吞吐确实猛,6B的话两张卡用tensor parallel加AWQ量化最稳。
说实话你这情况我太懂了,之前做内部问答也卡在这俩框架上纠结好久。6B这规模其实vLLM优势没那么夸张,但并发上来确实比FastChat稳,尤其你两张4090,PagedAttention吃显存的方式比FastChat那种静态分配聪明多了,建议直接上vLLM,参数不用太慌,默认配置改个tensor-parallel-size=2就行。显存分配的话,两张卡各12G给模型,剩下留给KV cache,你几千条文档的检索量其实context不会太长,没必要塞满。量化方面我试过int8,AWQ也跑过,体感AWQ在6B上更值,速度几乎不掉,显存能压到10G左右,int8有时候会有轻微的生成质量波动,但知识库场景基本无感。不过你数据量小的话,其实也可以考虑干脆用CPU offload或者换更小的量化版,毕竟4090显存够大,全精度跑起来也不至于爆。还有个坑提醒下,vLLM对ChatGLM3的某些版本兼容性有点迷,记得先查下你用的transformers版本对不对,不然启动会报奇怪错误。
vLLM我试过,吞吐确实比FastChat强不少,尤其并发上来之后显存管理好很多,PagedAttention不用太纠结参数,默认设置跑6B问题不大。两张4090的话建议tensor parallel=2,显存分配让它自动调度就行,不用手动切。量化方面我试过AWQ,效果损失很小,速度能提个20%左右,int8反而有时候显存省得不明显,你可以优先试AWQ。另外几千条文档这种场景,瓶颈其实在检索不在生成,vLLM的continuous batching对长文档批处理更友好。
别纠结FastChat了,这并发量直接上vLLM,吞吐差距真不是一星半点。两张卡开tensor并行,量化走AWQ,显存和速度都能兼顾。
vLLM吞吐确实猛,但6B小模型FastChat调好batch也够用,别太迷信框架。显存紧就上AWQ,4bit精度损失能接受,速度还翻倍。
vLLM确实吃香,但你这数据量不大,FastChat调好并发线程池和批处理其实够用,瓶颈更可能在embedding和检索那块。两张4090的话,建议一张卡跑模型,另一张留给向量检索和缓存,别全塞给推理。量化方面,int8对6B来说速度提升有限,显存也就省个几G,AWQ倒是稳一点,但得看你知识库问答对精度敏不敏感,可以先跑个评测集对比下再决定。
vLLM确实值得折腾一下,我拿6B试过,吞吐量比FastChat高一倍不止,PagedAttention其实不用太纠结,默认参数跑起来就行。两张4090的话,建议直接用tensor parallelism切分,每张卡分12G左右,剩下的留给KV cache,几千条文档完全够用。量化的话,AWQ的int4我实测效果比int8好,速度差不多但显存能再省一半,就是部署时稍微麻烦点。你如果只是内部用,其实可以先跑int8,响应慢大概率是FastChat的调度问题,换vLLM后应该会明显改善。