最近在搞llama2-70B的本地部署,手头有4张A100(40G),用vLLM加载FP16版本,不管怎么调tensor-parallel-size都报OOM,后来改用AWQ 4bit量化勉强跑起来,但生成质量明显下降,尤其是中文长文本逻辑混乱。我看了半天官方文档,说是要开--quantization参数配合GPTQ,但试了还是不行。想问问有经验的老哥:是不是我加载方式有问题?还是说40G单卡根本玩不动70B?如果非要本地跑,有什么靠谱的量化方案或者offload策略推荐吗?不求速度,只求别崩,能跑通就行。
4张A100部署70B模型老爆显存,量化后效果又拉胯,求指点
全部回复
共 48 条FP16跑70B本来就要80G往上,4卡40G得开offload或者换KV cache量化,纯靠tensor parallel肯定爆。
AWQ掉精度正常,试试GPTQ配vLLM的--kv-cache-dtype=fp8,能省不少显存,中文长文本逻辑会稳一些。
70B的FP16权重就要140G,4张40G卡扣掉KV cache和框架开销确实悬,tp=4也不一定稳。AWQ掉点挺常见,尤其长中文,试试GPTQ-Int4的group_size=128加act-order,比AWQ稳一些。真要保质量可以上8bit,或者用两张卡跑量化+CPU offload,慢是慢但基本不崩。vLLM那会版本对70B量化的支持也有限,建议换最新版或者试试llama.cpp的Q4_K_M。
70B的FP16权重就要140G,4张40G卡扣掉KV cache和激活根本不够塞,OOM很正常。AWQ掉质量大概率是校准集偏英文,中文长文本直接崩。可以试试GPTQ的Chinese-llama校准版,或者上llama.cpp的Q4_K_M做CPU+GPU混合offload,慢是慢但基本不炸。真要稳还得看你的并发和上下文长度,别一上来就拉满max-model-len。
70B FP16光权重就140G,你4张40G加起来才160G,还要留KV cache和激活的显存,TP切分再均匀也顶不住,OOM太正常了。AWQ 4bit掉质量尤其是中文这块我也遇到过,llama2本身中文底子就弱,量化一压逻辑直接散架,不是你的错觉。vLLM那个--quantization参数其实要配合模型本身已经是量化格式才行,你直接拿FP16权重加这个参数是没用的,得下现成的GPTQ或AWQ权重。想稳一点可以试试GPTQ-Int4加exllama内核,中文掉得比AWQ轻一些,或者干脆上8bit用bitsandbytes的NF4,显存大概80G左右能塞进4卡。真要跑通不求速度,可以考虑accelerate的device_map加CPU offload,把部分层丢内存,慢是慢但基本不崩。另外检查下是不是max_model_len设太大了,默认拉满的话KV cache能吃掉几十G,调小到2k-4k能省不少。
4张40G跑70B FP16确实挺紧的,光权重就140G,分到每张卡上35G,还没算KV cache和中间激活,OOM很正常。你调tensor-parallel-size没用是因为vLLM启动时就要把所有卡的显存算进去,TP=4刚好卡在边缘,稍微长一点的上下文就炸了。AWQ掉质量主要是激活量化太狠,中文长文本尤其明显,可以试试GPTQ的group_size=128加上act_order,或者用SqueezeLLM那种稀疏量化方案,对中文逻辑保留好一些。真要稳跑,建议上4-bit量化加CPU offload,vLLM的swap空间调大点,或者直接用llama.cpp的Q4_K_M,速度慢但基本不崩。40G单卡跑70B不现实,除非用多卡加NVLink做流水线并行,但延迟会很难看。
4张40G跑70B FP16肯定不够,权重就140G了。试试AWQ加--enable-prefix-caching,中文拉胯可能是校准集问题。
4张40G跑70B确实吃力,试试AWQ加tp=4再开cpu-offload,慢但能稳。
试试开vLLM的--enable-prefix-caching加CPU offload把部分层丢内存,4张40G跑70B本来就紧,量化掉点正常。