最近在搞一个私有化知识库问答项目,用的ChatGLM3-6B,想把模型部署到公司内网服务器上。机器是两张4090(24G),数据量不大,就几千条文档。试了FastChat,感觉启动挺方便,但并发一高响应就很慢,显存也吃紧。后来看别人说vLLM吞吐量高很多,但配置起来有点懵,PagedAttention那些参数不太会调。有没有大佬实际部署过这两个框架的?想请教下:1)6B模型用哪个更稳?2)两张卡怎么分配显存比较合理?3)如果量化成int8或者AWQ,实际效果和速度会差多少?求指点,感谢!
部署ChatGLM3-6B用vLLM还是FastChat?显存不够怎么优化?
全部回复
共 74 条vLLM吃显存但吞吐确实猛,6B用AWQ量化后单卡就能跑,双卡张量并行反而浪费带宽。
vLLM那个PagedAttention其实不用太纠结,默认参数对6B模型来说基本够用,你只需要把max-model-len设成4096或者8192就差不多了。我之前在两张3090上跑过ChatGLM3-6B,vLLM的吞吐量确实比FastChat高一截,尤其是并发20以上的时候特别明显,FastChat更像是个调试工具,生产环境还是建议vLLM。
显存分配这块,如果你用vLLM的话,它会自动做张量并行,两张卡各分12G,剩下的留给KV cache,你可以用--gpu-memory-utilization 0.85这个参数控制,别拉满不然容易OOM。不过你数据量才几千条,其实可以考虑只加载一半的文档进知识库,没必要把全部上下文都塞进去,这样显存压力会小很多。
量化方面我试过AWQ的4bit,效果比int8好不少,尤其对中文长文本的连贯性影响很小,速度大概能再提升30%左右,但前提是你得用官方给的量化脚本重新打包模型,别直接拿HuggingFace上的原版硬转。int8的话就简单粗暴,损失稍微大一点,但如果你只是做问答不追求太精准的生成,完全能接受。
还有个事,你既然有4090,为什么不试试TensorRT-LLM?虽然配置更折腾,但推理速度比vLLM还快,主要是不用管PagedAttention那些细节,官方对ChatGLM的支持也挺好。就是得花时间编译,你如果急着上线就先vLLM顶着,后面有空再折腾。
我最近刚好用vLLM跑过ChatGLM3-6B,体感比FastChat稳不少,尤其是并发上来后显存控制得更好,PagedAttention其实不用太纠结,默认参数就能用,先把tensor-parallel-size设成2试试。两张4090的话,建议直接张量并行,每张卡分12G左右,别开流水线并行,小模型没必要。量化的话,AWQ比int8香,实测速度基本不掉,显存能压到10G以内,但如果你文档检索对精度敏感,建议先跑一遍评估集再决定,别盲上量化。
vLLM那个PagedAttention其实不用太纠结,默认参数就能跑,主要收益在大并发场景下显存碎片少很多。你这种情况我建议直接上vLLM,FastChat做原型验证可以,但生产环境吞吐量差距确实明显。两张4090的话,如果走张量并行,6B模型其实单卡就能塞下,另一张卡可以留给embedding模型或者干脆跑个reranker,知识库问答里这俩才是性能瓶颈。量化方面我踩过坑,int8用GPTQ方案比AWQ稳,AWQ在6B上偶尔有 weird 的输出抖动,但速度能快20%左右,显存能压到10G以内。你要是只是几千条文档,其实可以考虑把向量检索和LLM拆开,用vLLM只做生成,检索走CPU内存,这样显存压力会小很多。顺便问下你用的embedding模型是哪个?如果是bge-large,那个本身也要占2G多显存,分配的时候得留出来。
vLLM确实适合并发场景,但6B模型上FastChat调好线程池也够用,关键是显存碎片问题。两张4090建议用张量并行,每卡12G左右留给KV cache,剩下的跑量化。我之前试过AWQ 4bit,显存直接砍半,速度比int8快15%左右,但知识库检索的质量会掉一点,看你更看重哪头。你文档量不大,其实可以考虑只量化部分层,效果折中。PagedAttention参数不用太纠结,默认值就行,主要调下max_num_seqs和gpu_memory_utilization。
4090双卡跑6B其实vLLM更省心,吞吐量差距在长文档场景特别明显,FastChat的显存碎片化太严重了。PagedAttention不用太纠结,默认参数对6B够用,重点是把tensor-parallel开到2,两张卡各12G左右。量化的话建议直接试AWQ,int8在4090上速度反而可能掉,AWQ的显存占用能压到8G以内,精度损失基本感知不到,但要注意ChatGLM3的AWQ版本对某些算子支持不完善,最好先用官方测试脚本跑一遍。你几千条文档的RAG场景,瓶颈多半在embedding和检索,模型推理反而不是大头,别花太多时间调参。
vLLM那个PagedAttention确实上手有点门槛,但6B这规模真没必要太纠结,我两张3090跑过,vLLM开个tensor-parallel=2,--max-model-len设4096,--gpu-memory-utilization设0.9基本就能把显存榨干,吞吐比FastChat稳太多了,尤其并发上来以后差距很明显。FastChat胜在省心,但长文档和并发一多,它的调度机制确实容易卡,你几千条文档做RAG的话还是建议直接上vLLM。显存分配这块,两张卡直接平分就行,不用搞什么流水线并行,6B参数量单卡24G其实都放得下,关键在KV cache,vLLM会自动管理,你只要留个2-3G给别的进程就行。量化的话,AWQ比int8稳,我试过AWQ 4bit,速度能再提个20%左右,但回答质量在知识库场景下会有点飘,尤其是专有名词和长句复述,如果文档质量要求高,建议先用FP16跑通,后面再量化对比。你倒是可以先用vLLM默认配置跑一下,参数太多了反而容易出问题,卡的话再调--block-size和--swap-space。另外问下,你RAG的检索和embedding模型是跑在同一台机器上吗?如果是,那显存分配得重新算,不然会打架。
vLLM吞吐确实香,但6B模型FastChat调好batch也够用,4090两张跑int8刚好。
vLLM的吞吐量确实比FastChat强不少,尤其并发上来之后差距很明显,6B模型用vLLM更稳,配置别怕,pagedattention基本不用动,默认值就行。显存分配的话,两张卡直接tensor parallel,各占12G左右,留点余量给KV cache。量化的话AWQ比int8靠谱,效果损失很小,速度能提30%以上,但得确认你用的是支持AWQ的版本,不然容易踩坑。
vLLM吞吐确实猛,但6B这规模FastChat调好了也够用,量化AWQ省显存效果还行。
两张4090别用张量并行,拆两路部署吞吐更高,int8够用别上AWQ折腾。
vLLM确实快不少,尤其并发上来之后差距很明显,6B模型建议直接上vLLM,FastChat适合快速验证场景。两张4090不用刻意分配,vLLM会自动做tensor parallel,跑起来显存占用比FastChat干净多了。量化的话我试过AWQ,4bit下效果基本无感,int8稍微稳一点但速度提升有限,你这数据量不大其实不用太纠结,先把PagedAttention的gpu_memory_utilization调到0.9试试看。
vLLM做推理确实比FastChat稳不少,尤其并发上来之后显存管理好很多,PagedAttention其实不用太纠结,默认参数对6B模型基本够用。两张4090的话建议张量并行或者干脆单卡跑,另一张留作冗余,不然跨卡通信开销反而拖慢速度。量化方面我试过AWQ,int4下显存能压到10G左右,速度几乎没损失,但知识库问答这种场景还是建议int8,准确率更保险,毕竟几千条文档对6B来说精度波动影响挺明显的。
vLLM确实值得折腾一下,6B规模下吞吐提升挺明显的,尤其你并发一高FastChat就吃力,换vLLM基本能解决。双卡的话直接tensor parallel=2就行,不用手动分,PagedAttention默认参数够用,别被吓到。量化的话建议先试AWQ,int8实测速度损失很小,但显存能省不少,6B完全能塞进单卡24G,这样另一张卡还能跑别的服务或留余量。
vLLM确实吞吐高,但6B这规模FastChat调好batch和max-length也够用,主要瓶颈在并发时显存碎片化。我之前两张4090直接tensor并行跑int8,每张卡分12G左右,剩余给KV cache,响应稳定多了。AWQ量化后速度提升明显,但知识库场景下检索质量下降得比int8多,建议先试int8。PagedAttention不用太纠结,默认参数对6B够用,你把gpu-memory-utilization调到0.9试试。
vLLM吞吐确实猛,但6B小模型FastChat调好batch也够用,双卡直接tensor并行省心。int8速度损失小,AWQ显存更友好,建议先试AWQ。
之前做rag服务踩过类似的坑,6B这规模其实vLLM优势更明显,吞吐高不少,FastChat胜在省心但并发确实拉胯。显存分配建议两张卡都开tensor parallel,24G跑6B其实挺宽裕,不用刻意量化。int8实测掉点不明显,AWQ如果知识库问答对精度敏感建议先跑测试集对比下。PagedAttention不用太纠结参数,默认值就够用,主要调下max-num-seqs和gpu-memory-utilization。
vLLM吞吐确实强,但6B规模FastChat调好线程池也够用,建议先量化int8试试。
vLLM吃显存确实猛,但吞吐量碾压FastChat,6B建议直接vLLM+张量并行,两张卡刚好。量化选AWQ,int8掉点不明显,速度能再提一截。
vLLM的吞吐确实比FastChat强不少,尤其并发高的时候差距很明显,6B模型我建议直接上vLLM,PagedAttention默认参数其实就够用,不用太纠结。两张4090的话,可以开tensor parallel,把张量切到两张卡上,显存压力会小很多,或者干脆只挂单卡推理,另一张留给embedding和rerank。量化方面,AWQ的int4比int8稳,速度提升大概30%-50%,但效果损失很小,几千条文档的场景基本感知不到,你可以先跑个评测集对比下再定。
vLLM吞吐确实猛,但6B这规模FastChat调好batch也够用,量化AWQ能省一半显存速度损失很小。