llama.cpp 模型量化与推理加速实操:三步让 8B 模型在 6GB 显存里跑起来 llama.cpp 模型量化与推理加速实操三步让 8B 模型在 6GB 显存里跑起来【免费下载链接】llama.cppLLM inference in C/C项目地址: https://gitcode.com/GitHub_Trending/ll/llama.cpp一个 8B 模型F16 版要占 15GB 显存生成速度 1 token/s很多人就停在这里。其实靠 llama.cpp 的模型量化与推理加速同一个 8B 能从 15GB 压到 5GB 以内速度提升数倍。下面按三步走十分钟让它在你的机器上跑起来。 先摸底硬件和用途决定起点动手改任何参数之前先回答两个问题你有多少显存或内存以及你拿它做什么。这两点决定量化档位和调参方向。有独显算显存。8B 模型 F16 占 14.96 GiBQ4_K_M 只占 4.58 GiBLlama 3.1 8B 实测数据见 tools/quantize/README.md。没有独显算内存容量和 CPU 物理核数。纯 CPU 推理瓶颈在内存带宽核心数其次。看用途个人聊天要单请求低延迟批处理要吞吐对外服务要在显存成本和稳定性之间平衡。你的情况起步量化档位-ngl 建议8GB 显存或无独显个人聊天Q4_K_M能卸载多少卸载多少剩余留 CPU12GB 显存对质量敏感Q5_K_M 或 Q8_099全量 GPU批量离线任务Q4_K_S 或更低99开大上下文对外提供服务Q4_K_M可上投机解码99⚡ 三步走让 8B 模型在你机器上跑得又快又稳全文用同一个例子把一个 8B 模型从 15GB 的 F16 文件变成在你机器上稳定运行的样子。第 1 步按显存挑量化档位显存是硬约束量化档位是第一个旋钮。四个常用档位速度为同机实测的相对快慢数据来自 tools/quantize/README.md量化档位比特/权重8B 体积相对速度什么人该选Q4_K_M4.894.58 GiB快多数人的默认选择体积和质量都均衡Q5_K_M5.705.33 GiB稍慢愿意多花 0.7 GiB 换一档质量的人Q8_08.507.95 GiB慢质量敏感想尽量贴近 F16IQ2_XXS2.382.23 GiB最快极限低显存场景能接受明显降质显存估算口诀模型文件体积 1~2 GiB 的 KV 缓存约等于你需要预留的显存。Q4_K_M 的 8B 大约 6GB 显存就够。第 2 步一条命令先跑起来拿到源码后先编译再用convert_hf_to_gguf.py把模型转成 16 位 GGUFcmake -B build cmake --build build --config Release然后一条命令跑通# 最小可运行8B Q4_K_M全部层卸载到 GPU生成 128 个 token ./llama-cli -m model-Q4_K_M.gguf -p 你好 -n 128 -ngl 99跑起来之后真正影响体验的只有五个参数参数作用建议值-n最大生成 token 数128~1024按需放大-c上下文窗口2048~8192越大 KV 缓存越吃显存-b批处理大小决定提示词处理速度默认 512处理慢再加大-tCPU 线程数物理核心数-ngl卸载到 GPU 的层数99 表示全卸载第 3 步调参找平衡跑通后调参就一件事先塞进显存再谈提速。三条口诀显存有富余先加-ngl加到头了再考虑线程。上下文窗口是隐性显存杀手-c翻倍KV 缓存跟着涨。装不下时先砍-c别急着换模型。-t从物理核心数起步超过这个数加线程收益常常为负。显存对照速查显存情况-ngl-c 建议24GB998192 以上8~12GB按量化档位定2048~4096不够用部分层留 CPU2048 以下进阶手段低比特下的质量与速度压榨推理速度的核心是矩阵乘法量化就是缩小每个矩阵元素占的字节数。字节读得少matmul 就快。下图是 llama.cpp 中矩阵乘法的内存布局示意 IMatrix 重要性矩阵它为什么有效量化要把权重舍入到低比特不重要权重舍错一点无所谓重要权重舍错就直接污染输出。IMatrix 先用一段校准文本让模型跑一遍记录每个张量的激活重要性量化时把比特往重要权重上倾斜。这样 PPL 一般能改善 5~15%比特越低效果越明显。imatrix 机制见 tools/quantize/README.md 与 tools/imatrix/README.md。# 用校准文本生成重要性矩阵层全部卸载到 GPU 提速 ./llama-imatrix -m model-f16.gguf -f wiki.txt -o imatrix.gguf -ngl 99 # 量化时带上矩阵得到 Q4_K_M ./llama-quantize --imatrix imatrix.gguf model-f16.gguf model-q4_k_m.gguf Q4_K_M混合精度与投机解码混合精度单一档位是一刀切但层与层敏感度不同。把 attn_v、ffn_down 这类敏感层抬到更高精度其余保持基准档通常比整体升档更划算# attn_v、ffn_down 升到 Q5_K其余按 Q4_K_M 模板 ./llama-quantize --tensor-type attn_vq5_k --tensor-type ffn_downq5_k \ model-f16.gguf model-mixed.gguf Q4_K_M投机解码挂一个小同族模型当草稿让它先猜大模型只负责验证。命中率高时生成速度接近翻倍适合对外服务、延迟要求稳定的场景./llama-server -m big.gguf -md draft.gguf \ --host 0.0.0.0 --port 8080 踩坑急救手册症状直接动作调整范围显存不足加载即崩先降-c再降-ngl最后才换更低档位-c8192→2048-ngl每次减 8~16 层推理太慢先把-ngl拉满再把-t设到物理核心数仍慢就换更快档位Q4_K_S、IQ3_XXS生成质量变差先升档位再补 IMatrix最后动采样参数Q5_K_M 或 Q8_0temp 0.7top_p 0.9注意-ngl调低后剩余层在 CPU 上跑瓶颈变成内存带宽此时-t超过物理核心数反而更慢别顺手加线程。四件事记住就够用档位跟着显存走Q4_K_M 是无脑默认值速度和稳定性由-ngl、-c、-t决定显存是硬约束低比特想保质量IMatrix 是性价比最高的一招再往下挖看 docs/ 官方文档量化实现在src/llama-quant.cpp量化工具文档在 tools/quantize/README.md。【免费下载链接】llama.cppLLM inference in C/C项目地址: https://gitcode.com/GitHub_Trending/ll/llama.cpp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考