本文最后更新于 2025-04-05T02:27:16+00:00
量化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