纯新手教程:用llama.cpp本地部署DeepSeek蒸馏模型

大模型向量数据库机器学习
  1. 前言

llama.cpp 是一个基于纯 C/C++ 实现的高性能大语言模型推理引擎,专为优化本地及云端部署而设计。其核心目标在于通过底层硬件加速和量化技术,实现在多样化硬件平台上的高效推理,同时保持低资源占用与易用性。

最近 DeepSeek 太火了,就想用 llama.cpp 在本地部署一下试试效果,当然在个人电脑上部署满血版那是不可能的,选个小点的蒸馏模型玩一玩就好了。

  1. 编译llama.cpp

首先从 Github 上下载 llama.cpp 的源码:


        
        
            

          git clone https://github.com/ggml-org/llama.cpp
          
   

 
          cd llama.cpp
          
   

 
        
      

llama.cpp 支持多种硬件平台,可根据实际的硬件配置情况选择合适的编译参数进行编译,具体可以参考文档 docs/build.md

「编译CPU版本」


        
        
            

          cmake -B build
          
   

 
          cmake --build build --config Release -j 8
          
   

 
        
      

「编译GPU版本」

编译英伟达 GPU 版本需要先装好驱动和 CUDA ,然后执行下面的命令进行编译


        
        
            

          cmake -B build -DGGML\_CUDA=ON -DGGML\_CUDA\_ENABLE\_UNIFIED\_MEMORY=1
          
   

 
          cmake --build build --config Release -j 8
          
   

 
        
      

编译完成后,可执行文件和库文件被存放在 build/bin 目录下。

  1. 模型转换与量化

本文以 DeepSeek R1 的蒸馏模型 DeepSeek-R1-Distill-Qwen-7B 为例进行介绍。

2.1 模型下载与转换

首先从魔搭社区下载模型:


        
        
            

          pip install modelscope
          
   

 
          modelscope download --model deepseek-ai/DeepSeek-R1-Distill-Qwen-7B --local\_dir DeepSeek-R1-Distill-Qwen-7B
          
   

 
        
      

下载好的模型是以 HuggingFacesafetensors 格式存放的,而 llama.cpp 使用的是 GGUF 格式,因此需要先要把模型转换为 GGUF 格式:


        
        
            

          
 #
 
          
  安装python依赖库
 
          
   

 
          pip install -r requirements.txt
          
   

 
          
 #
 
          
  转换模型
 
          
   

 
          python convert\_hf\_to\_gguf.py DeepSeek-R1-Distill-Qwen-7B/
          
   

 
        
      

转换成功后,在该目录下会生成一个 FP16 精度、 GGUF 格式的模型文件 DeepSeek-R1-Distill-Qwen-7B-F16.gguf

2.2 模型量化

FP16 精度的模型跑起来可能会有点慢,我们可以对模型进行量化以提升推理速度。

llama.cpp 主要采用了分块量化( Block-wise Quantization )和 K-Quantization 算法来实现模型压缩与加速,其核心策略包括以下关键技术:

  1. 「分块量化(Block-wise Quantization)」

该方法将权重矩阵划分为固定大小的子块(如 3264 元素为一组),每个子块独立进行量化。通过为每个子块分配独立的缩放因子( Scale )和零点( Zero Point ),有效减少量化误差。例如, Q4\_K\_M 表示每个权重用 4 比特存储,且子块内采用动态范围调整。

  1. 「K-Quantization(混合精度量化)」

在子块内部进一步划分更小的单元(称为“超块”),根据数值分布动态选择量化参数。例如, Q4\_K\_M 将超块拆分为多个子单元,每个子单元使用不同位数的缩放因子(如 6bit 的缩放因子和 4bit 的量化值),通过混合精度平衡精度与压缩率。

  1. 「重要性矩阵(Imatrix)优化」

通过分析模型推理过程中各层激活值的重要性,动态调整量化策略。高重要性区域保留更高精度(如 FP16 ),低重要性区域采用激进量化(如 Q2\_K ),从而在整体模型性能损失可控的前提下实现高效压缩。

  1. 「量化类型分级策略」

提供 Q2\_KQ8\_K 等多种量化级别,其中字母后缀(如 \_M\_S )表示优化级别:

典型场景下, Q4\_K\_M 相比 FP16 模型可减少 70% 内存占用,推理速度提升 2-3 倍,同时保持 95% 以上的原始模型精度。实际部署时需根据硬件资源(如 GPU 显存容量)和任务需求(如生成文本长度)选择量化策略。

  • 「Q4_K_M」 :中等优化级别,平衡推理速度与精度(常用推荐)。
  • 「Q5_K_S」 :轻量化级别,侧重减少内存占用

执行下面的命令可将 FP16 精度的模型采用 Q4\_K\_M 的量化策略进行量化:


        
        
            

          ./build/bin/llama-quantize DeepSeek-R1-Distill-Qwen-7B/DeepSeek-R1-Distill-Qwen-7B-F16.gguf DeepSeek-R1-Distill-Qwen-7B/DeepSeek-R1-Distill-Qwen-7B-Q4\_K\_M.gguf Q4\_K\_M
          
   

 
        
      

量化完成后,模型文件由 15.2G 减少到 4.7G

  1. 运行模型

模型量化完后,我们就可以运行模型来试试效果了。 llama.cpp 提供了多种运行模型的方式:

命令行方式

执行下面的命令就可以在命令行与模型进行对话了:


        
        
            

          ./build/bin/llama-cli -m DeepSeek-R1-Distill-Qwen-7B/DeepSeek-R1-Distill-Qwen-7B-Q4\_K\_M.gguf -cnv
          
   

 
        
      

picture.image

HTTP Server方式

由于模型是以 Markdown 格式输出内容,因此用命令行的方式看着不太方便。 llama.cpp 还提供 HTTP Server 的方式运行,交互性要好很多。

首先在终端执行命令


        
        
            

          ./build/bin/llama-server -m DeepSeek-R1-Distill-Qwen-7B/DeepSeek-R1-Distill-Qwen-7B-Q4\_K\_M.gguf --port 8088
          
   

 
        
      

然后打开浏览器,输入地址 http://127.0.0.1:8088 就可以在网页上与模型进行交互了,非常方便!

picture.image

0
0
0
0
关于作者

文章

0

获赞

0

收藏

0

相关资源
在火山引擎云搜索服务上构建混合搜索的设计与实现
本次演讲将重点介绍字节跳动在混合搜索领域的探索,并探讨如何在多模态数据场景下进行海量数据搜索。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论