量化ollama模型

量化ollama模型

受限于硬件环境,在主流消费级显卡(如配备16GB显存的RTX 4060 Ti等型号)上使用ollama运行DeepSeek-R1-32B、QwQ-32B等模型时,往往会显存溢出。官方提供的Q4_K_M量化方案虽可将显存需求压缩至约20GB,仍难以突破16GB显存设备的物理上限,将这些模型权重量化至Q2_K可将显存需求压缩至16GB以内。

本文阐述如何使用llama.cpp开源工具,自己对大模型权重进行量化,让自己的显卡能推理更大的模型。

环境:ubuntu 22.04, CUDA 11.8

下面的示例使用qwen2.5:0.5b,将该模型量化为Q2_K。

模型量化的原理

推荐观看:https://www.bilibili.com/video/BV1EE42157Ms/

安装llama.cpp

1
git clone https://github.com/ggerganov/llama.cpp

编译过程参考https://github.com/ggml-org/llama.cpp/blob/master/docs/build.md

1
2
cmake -B build -DGGML_CUDA=ON
cmake --build build --config Release

安装完成后,你可以借助build/bin/llama-quantize量化模型

拉取fp16权重

必须拉取fp16权重(不支持对已经量化的权重再次量化)

1
2
3
4
5
6
7
8
9
10
ollama pull qwen2.5:0.5b-instruct-fp16
pulling manifest
pulling 6f96e01a3f55... 100% ▕███████████████████████████████▏ 994 MB
pulling 66b9ea09bd5b... 100% ▕███████████████████████████████▏ 68 B
pulling eb4402837c78... 100% ▕███████████████████████████████▏ 1.5 KB
pulling 832dd9e00a68... 100% ▕███████████████████████████████▏ 11 KB
pulling ff54cb6e5ade... 100% ▕███████████████████████████████▏ 487 B
verifying sha256 digest
writing manifest
success

然后前往ollama的模型存放路径,例如/usr/share/ollama/.ollama/models/blobs,在这个目录下有很多sha256-开头的文件,你需要找到刚拉取的模型的GGUF权重文件。

根据上面的拉取日志,这个权重文件的开头是sha256-6f96e01a3f55,把这个文件复制到你喜欢的另一个文件夹,改名为qwen2.5:0.5b-instruct-fp16.gguf

开始量化!

1
build/bin/llama-quantize qwen2.5:0.5b-instruct-fp16.gguf Q2_K

得到的结果为ggml-model-Q2_K.gguf

1
mv ggml-model-Q2_K.gguf qwen2.5:0.5b-instruct-Q2_K.gguf

导入ollama

首先需要创建Modelfile,你可以使用旧模型的Modelfile,通过下面的指令查看

1
ollama show qwen2.5:0.5b-instruct-fp16 --modelfile

创建你自己的Modelfile,复制旧模型的Modelfile内容,注意修改FROM为自己量化后的模型路径

1
2
- FROM /usr/share/ollama/.ollama/models/blobs/sha256-6f96e01a3f550ca08aea1e5725bb8d5a7eccc6f281c30417e9d380b8c46467bd
+ FROM qwen2.5:0.5b-instruct-Q2_K.gguf

导入ollama并运行

1
2
ollama create myqwen:0.5b-Q2_K -f Modelfile 
ollama run myqwen:0.5b-Q2_K

量化ollama模型
https://blog.algorithmpark.xyz/2025/04/05/Quantize-the-Ollama-model/index/
作者
CJL
发布于
2025年4月5日
更新于
2025年4月5日
许可协议