AI DeepSeek:量化不够用了之后
年初的时候,我的主力开发机器是一台 16GB 显存的 4080 本地机,跑个 7B 模型还得精打细算,13B 更是想都不敢想。
为什么折腾这个
老实说,一开始的想法很简单:本地跑代码助手,不用把代码扔到外网。
但现实很骨感。DeepSeek-Coder V2 这类模型,FP16 版本动辄就要 26GB+ 显存起步,哪怕只跑推理,13B 模型在我这 16GB 显存上都是奢望。硬要跑?要么 OOM,要么卡成PPT。
但换个角度想,代码模型真的需要 FP16 的精度吗?大部分场景下,我们需要的只是一个能补全代码、解释逻辑、给建议的助手,不是科学研究级的数值精度。如果能在质量损失可控的前提下,把显存需求砍掉 3/4,那这就不是"能不能"的问题,而是"怎么做到"的问题。
量化技术就是为了解决这个问题。
什么是量化
用人话说,量化就是把模型的参数从高精度数(比如 FP16 的 16 位浮点数)压缩到低精度数(比如 INT4 的 4 位整数)。
但别被"压缩"这个说法骗了——这不是 zip 压缩,不能随便解压就完事。量化本质上是把一个连续的浮点空间映射到一个有限的整数空间里,有点像把 0.1 到 1.0 的所有小数强行塞进 0 到 15 的整数里。
这个过程必然有信息损失,但模型训练时就已经考虑到了"在什么位置损失最小"这个问题。只要量化得当,大部分情况下生成的代码质量和推理结果不会明显变差。
常见的量化精度:
- INT8:8 位整数,精度损失较小,显存节省约 50%
- INT4:4 位整数,显存节省约 75%,但需要更谨慎地校准
- FP8:8 位浮点数,介于 INT8 和 FP16 之间的折中方案
对于代码模型这种生成任务,INT4 通常够用,前提是量化工具靠谱、校准数据合理。
整体思路
先说结果:最终选择用 llama.cpp 的 INT4 量化方案,把 DeepSeek-Coder V2 跑在本地,显存占用从 26GB 降到约 7GB,推理速度提升了约 2 倍。
整个过程可以分成这几步:
具体实现
环境准备
先说明一下我的硬件环境,这对量化方案选择很关键:
- GPU: NVIDIA RTX 4080 16GB
- CPU: AMD Ryzen 9 7950X
- RAM: 64GB DDR5
- OS: Ubuntu 22.04 LTS
为什么强调 CPU 和 RAM?因为 llama.cpp 支持 GPU offloading,但如果显存不够,它会自动把部分计算 offload 到 CPU。这时候大内存就有用了。
量化工具选择
市面上常见的量化工具主要有三个:
llama.cpp:
- 优点:成熟稳定,社区活跃,支持 INT4/INT5/INT8 多种量化
- 缺点:对某些模型架构的支持需要等待更新
- 适合:追求稳定性和通用性
AutoGPTQ:
- 优点:量化质量高,专门为 LLM 优化
- 缺点:依赖较多,配置相对复杂
- 适合:对精度有极致要求的场景
AWQ (Activation-aware Weight Quantization):
- 优点:激活感知量化,理论上质量更好
- 缺点:相对较新,生态还在发展
- 适合:愿意尝鲜且愿意踩坑的场景
我最终选 llama.cpp 的原因是:当时 DeepSeek 官方已经给出了 llama.cpp 的量化建议,社区也有现成的转换脚本,踩坑成本低。
转换步骤
- 下载原始模型
git lfs install
git clone https://huggingface.co/deepseek-ai/DeepSeek-Coder-V2-Lite-Instruct
- 转换为 GGUF 格式
llama.cpp 使用 GGUF 格式,需要先把 Hugging Face 格式的模型转换过来:
# 编译 llama.cpp
cd llama.cpp
make
# 转换模型
python3 convert-hf-to-gguf.py \
../DeepSeek-Coder-V2-Lite-Instruct \
--outfile deepseek-coder-v2-lite-instruct-f16.gguf \
--outtype f16
这一步会生成一个 FP16 的 GGUF 文件,先别急着量化,用它跑一个基准测试,方便后续对比质量。
- 量化为 INT4
./quantize \
deepseek-coder-v2-lite-instruct-f16.gguf \
deepseek-coder-v2-lite-instruct-q4_k_m.gguf \
Q4_K_M
这里的 Q4_K_M 是量化策略:
Q4_K_M: 4 位,中等精度,质量和速度平衡Q4_K_S: 4 位,更激进的压缩,质量略差Q4_0/Q4_1: 老式量化方法,一般不推荐
如果你希望质量更好,可以考虑 Q5_K_M 或 Q6_K,但显存占用会相应增加。
- 本地推理测试
./main -m deepseek-coder-v2-lite-instruct-q4_k_m.gguf \
-n 512 \
-p "Write a Python function to merge two sorted lists:" \
--gpu-layers 35 \
-ngl 35
参数说明:
-n 512: 最大生成长度 512 tokens-p: 提示词--gpu-layers 35: 35 层放到 GPU 上跑-ngl: 与--gpu-layers相同(不同版本的写法)
踩坑记录
显存依然不够
量化后模型确实小了,但第一次跑的时候还是 OOM。
问题出在 --gpu-layers 设置上。我一开始贪心,想全部放 GPU 上,结果 7B 模型还要 KV cache,显存还是不够。
解决方法是手动调整:
# 先全部放 CPU 跑一次,看实际需求
./main -m deepseek-coder-v2-lite-instruct-q4_k_m.gguf \
-p "test" \
--gpu-layers 0
# 逐步增加 GPU 层数,直到刚好不爆显存
./main -m deepseek-coder-v2-lite-instruct-q4_k_m.gguf \
-p "test" \
--gpu-layers 20
# 找到平衡点
./main -m deepseek-coder-v2-lite-instruct-q4_k_m.gguf \
-p "test" \
--gpu-layers 35
最终发现 35 层是个平衡点,既能充分利用 GPU,又不会 OOM。
代码质量下降
量化后第一次测试代码生成,发现补全的逻辑明显变糙了:变量命名随意、边界条件处理不严、有时候还会瞎编不存在的 API。
排查后发现是量化策略选错了。一开始用的 Q4_K_S,这个模式更激进,压缩更大,但对代码模型这种"逻辑敏感"的任务不太友好。
换回 Q4_K_M 后质量明显回升,几乎和 FP16 差不多。
生成速度慢
解决了显存和质量问题后,发现生成速度还是有点慢,尤其是长代码补全的时候。
检查后发现,llama.cpp 默认的 n_threads 设置没有充分利用多核 CPU。7950X 是 16 核 32 线程,但默认只用了 8 线程。
调整参数:
./main -m deepseek-coder-v2-lite-instruct-q4_k_m.gguf \
-p "Write a fast sorting algorithm in C:" \
-n 512 \
--gpu-layers 35 \
-n_threads 32 \
-t 32
速度提升了约 1.5 倍。
性能对比
量化前后的关键指标对比:
| 指标 | FP16 | INT4 (Q4_K_M) | 变化 |
|---|---|---|---|
| 模型大小 | 26GB | 7.2GB | -72% |
| 显存占用 | 26GB+ | 8.5GB | -67% |
| 推理速度 | 8.5 tokens/s | 18 tokens/s | +112% |
| 代码质量 | 基准 | ~95% 基准 | -5% |
四个维度的对比一目了然:INT4 在模型体积和显存上砍掉了约七成,推理速度翻倍,代码质量只损失约 5%。

代码质量的评估方式是人工检查生成的 100 个代码片段,对比逻辑正确性、边界条件处理、API 使用准确度三个维度。INT4 在大部分场景下表现不错,只有少数复杂算法实现时会出现逻辑错误。
实际使用效果
跑了一个月本地开发,整体感受是这样:
优点:
- 不用把代码扔到外网,安全得多
- 推理速度比预期快,日常补全基本无感知
- 显存占用大幅下降,还能跑点别的东西
- 成本固定,没有按 token 计费的焦虑
缺点:
- 复杂任务的质量还是比不上云端的高精度模型
- 遇到生僻库时会瞎编,需要自己把关
- 量化后的模型偶尔会出现奇怪的中英文夹杂
结论: 如果你只是需要一个本地代码助手,INT4 量化的 DeepSeek-Coder 完全够用。但如果你要靠它解决复杂的算法问题、生成生产级代码,还是老老实实上云端吧。
一些遗留问题
这次折腾留下几个没解决的小问题:
INT8 还是 INT4? INT8 质量更好,但显存占用翻倍。我试过一次,13B 模型还是会爆显存,后来就没再细调。如果后面上 24GB 显存,可能会重新考虑。
AWQ 真的更好吗? 理论上 AWQ 的激活感知量化质量更高,但当时社区支持还不完善,转换脚本经常报错。现在应该稳定多了,有空可以再试。
量化后的微调 有没有可能在 INT4 模型基础上做微调,把损失的质量补回来?理论上可以,但工程复杂度太高,暂时没折腾。
总结
量化不是万能的,但它确实让大模型从"实验室玩具"变成了"日常工具"。
如果你也在犹豫要不要本地跑模型,给几个实际建议:
- 先想清楚你的场景:需要什么样的质量、能接受多大的损失
- 从成熟的量化工具开始,别一开始就追最新技术
- 显存是硬约束,但 CPU 和 RAM 可以兜底
- 量化模型可以先用,不合适再换,反正成本低
技术这东西,有时候不需要最优解,只要"够用"就行。
最后更新于 2026-07-17
版权声明: 本文首发于 指尖魔法屋-AI DeepSeek:量化不够用了之后(https://blog.thinkmoon.cn/post/409-ai-deepseek-quantization-code-practice/) 转载或引用必须申明原指尖魔法屋来源及源地址!
评论
使用 GitHub 账号登录后即可留言,支持 Markdown。