最近在折腾本地跑7B模型,电脑是4090 24G,准备部署个ChatGLM3或者Qwen1.5玩玩。用的llama.cpp和transformers都试了,FP16直接OOM,加载到一半就爆显存。后来试了4bit量化(GPTQ和AWQ都试了),显存是够了,但生成出来的代码逻辑明显变差,写个递归都能报错。
大模型本地部署显存爆了,量化后效果又不行,求老哥指条明路
全部回复
共 48 条24G跑7B的FP16其实有机会的,你试试把上下文长度砍到2K以内,再用flash attention和offload到内存,加载时应该能压到20G左右。量化掉精度这事我懂,特别是代码生成,4bit下逻辑崩得很厉害。要不你试试Q8或者混合量化,只把关键层保留高精度,效果会好不少。还有别忽略llama.cpp的mmap模式,能省不少显存。
试试8bit量化或者用vLLM开KV cache offload,24G跑7B其实不用压到4bit。
24G跑7B的FP16按理说应该够啊,你是不是把context window开太大了,或者用了transformers没开gradient checkpointing?llama.cpp的话可以试试--no-mmap或者把cache全放CPU。量化这块建议别碰GPTQ了,试试GGUF的Q5_K_M或者Q6_K,体感和FP16差距小很多,代码生成这种任务对量化敏感度确实高。另外可以看下是不是prompt写得有歧义,有时候模型逻辑崩了不全是量化锅。
试试8bit量化或者GGUF的Q5_K_M,比4bit强不少,显存占用也就多3-4G,4090完全扛得住。
4090 24G跑7B FP16按理说不会爆啊,你是不是上下文窗口开太大了?我昨天刚用Qwen1.5 7B试了llama.cpp,默认8k上下文能塞进去,你检查下是不是把max_length设成了32k之类的。量化掉代码能力确实肉疼,但可以试试把KV cache保持FP16,只量化权重,效果会好不少。另外你那个递归报错,说不定是采样参数调太激进,temperature拉低点再试试。
24G跑7B的FP16按理说应该够啊,你查过是不是context长度设太大或者kv cache没优化?我拿4090跑Qwen1.5-7B用vLLM开gptq量化,代码生成准确率跟原版差距不大,可能你解码参数或者prompt格式有问题。另外试试llama.cpp的Q5_K_M,比4bit损失小很多,或者用AWQ配合lmdeploy,显存占用和效果能平衡不少。
24G跑7B FP16其实够了,OOM多半是没开flash attention或者context设太长,先把max_seq砍到2k试试。量化掉点很正常,但写递归都报错八成是量化校准集太烂,换个c4或者wiki的校准数据重新量化,AWQ比GPTQ稳一些。要不直接上vLLM加GPTQ-Int8,8bit基本不掉点,24G带7B绰绰有余。
试试GGUF的Q5_K_M量化,比4bit稳不少,显存也扛得住。