llama.cpp 量化到 GGUF 全流程,从 fp16 到 Q4_K_M 一次说清
唐唐老师855 阅读
很多人第一次接触 GGUF 量化,觉得就是把权重文件过一遍 convert 脚本,其实里面门道不少。我这篇直接讲实测数据,不整虚的。
先说转换流程。拿一个 fp16 的模型转 Q4_K_M,标准做法是两步:
Bash
# 1. 转成 GGUF(fp16 中间格式)
python convert_hf_to_gguf.py ./model-fp16 --outfile model-fp16.gguf --outtype f16
# 2. 量化
./llama-quantize model-fp16.gguf model-q4km.gguf Q4_K_M
第二步才是最耗时的,Q4_K_M 在 4090 上跑一个 14B 大概要十几分钟,中间别手贱 Ctrl+C。
量化等级我实际测过 Q4_K_M、Q5_K_M、Q8_0 三档,用的都是 Qwen2.5-14B:
- Q4_K_M:显存占用约 9.5G,单 token 生成 22 tokens/s,整体可用,数学和代码任务能感觉到一点点退化。
- Q5_K_M:显存 11G 左右,速度 19 tokens/s,质量跟 fp16 几乎无差别,是我的主力档位。
- Q8_0:显存 14G,速度 15 tokens/s,除非你对质量极其敏感,否则没必要。
还有一个很多人不知道的点:量化应该在转换 GGUF 时顺便做,别先转 fp16 再二次量化。虽然结果一样,但中间文件占用磁盘,14B 的 fp16 就 28G,转完记得删。
对了,llama-quantize 有个 --allow-requantize 参数,如果你是从已量化过的模型再转,必须加这个,不然会报错说不允许重复量化。我一开始没加,报错信息又看不懂,白白折腾了半小时。
最后,跑起来之后可以用 --n-gpu-layers 99 把所有层都丢进 GPU,速度会好看很多。
评论0
还没有评论,来抢沙发~