一、前言
在上一次的DeepSeek的部署教程中,我们使用Ollama与LM Studio很轻松的部署了DeepSeek并且也完成了相关API的调用,如果还有不会的小伙伴请看下面的教程:
DeepSeek本地部署:[AI]从零开始的DeepSeek本地部署及本地API调用教程-CSDN博客
当然,在部署的时候,我们也发现了一些问题,那就是Ollama和LM Studio它们都只能运行GGUF格式的模型,但是我们会发现,在模型仓库中,模型的格式非常多样,比如有下图这种的:
这样的模型有一堆的配置文件和一个向量文件。那么这种模型,我们要怎么运行呢?答案其实很简单,这里我们需要使用到一款非常强大LLM框架——llama.cpp。它不仅可以完成模型的格式转换、量化,自身还可以运行被转化出来的模型。那么本次教程,就来教大家如何使用llama.cpp转换模型格式以及模型量化。如果你准备好了,就让我们开始吧!
二、谁适合本次教程
在本次教程中,会提供两种llama.cpp的安装方法,一种是自己编译llama.cpp另一种是直接使用预编译版本。如果你想体验编译的过程,那么你可以跟着我一起编译。如果你是小白,那么就建议直接使用预编译的版本,我也会讲解如何下载预编译的llama.cpp。最后就是,模型格式转换部分可能会使用到一个python脚本,这里需要部署脚本运行所需的环境,请确保自己对python或者python虚拟环境有一定的了解。
三、llama.cpp的部署
在前面也提到了,本次我们会提供两种llama.cpp的部署方法,一种是自己编译,另一种是直接使用已经编译好的。这里的编译也提供了CPU和GPU两种版本的编译方法,GPU编译的过程比较麻烦并且对显卡有一定的要求。顺带一提,如果你只是想将模型的格式转化为GGUF的话,可以直接跳过整个第三步,模型格式的转化不需要安装llama.cpp。如果你准备好了,那就让我们开始吧!
1.编译安装llama.cpp
之前也提到了,自己编译安装llama.cpp是非常麻烦的,需要安装好几个环境,不建议小白轻易尝试。自己安装llama.cpp首先要分两种情况。有NVIDIA的GPU和没有NVIDIA的GPU。这里划重点,必须要NVIDIA的GPU才行,目前AMD的显卡有一定的解决方案,但是资料太少了,这里不推荐。如果你没有NVIDIA的GPU那就只能编译CPU版的llama.cpp。llama.cpp我们主要也是用来做模型的量化,不会长期在上面运行模型,所以,CPU版的llama.cpp并没有什么影响,最多就是量化的时候会慢一些。
1.CUDA的安装 (没有NVIDIA显卡跳过此步)
如果你确定你有NVIDIA的显卡,那么就需要为你的显卡安装一个CUDA用来驱动CUDA核心。首先,使用下面的命令查看自己显卡支持的CUDA版本,直接在cmd窗口或者powershell输入即可:
nvidia-smi.exe
这里被我圈出来的数字就是显卡支持的最大的CUDA版本:
重点的来了,如果你这里的CUDA版本低于12.4请跳过此步,你的显卡不支持自己编译最新版的llama.cpp,会引发下面的错误:
当然,你不一定需要自己编译,也可以使用下面的预编译版本,那里有llama.cpp官方编译好的GPU版的llama.cpp。
当你确定你的GPU条件符合以后,就可以开始安装CUDA了,这里的CUDA安装教程我在之前的pytouch安装教程中已经讲得很详细了,你可以前往我的pytouch安装教程中查看如何为自己的显卡安装CUDA:
pytouch安装教程:[python]如何正确的安装pytorch?(详细)_pytorch安装-CSDN博客
当然,如果你是计算机高手知道安装步骤,直接前往CUDA的下载地址即可:
CUDA官网地址:CUDA Toolkit Archive | NVIDIA Developer
当你安装安装好CUDA以后,输入下面的命令,如果有如下输出就表示CUDA安装成功了:
nvcc -V
如果你没有这样的输出,可以尝试跟着CUDA的安装教程再操作一遍,一般再CUDA这一步不会出错,这里就不多说了。
2.CMake的安装
下面我们需要安装一个构建工具CMake,这里大家可以直接点击下方的链接前CMake的官网:
CMake官网:CMake - Upgrade Your Software Build System
进入官网以后,就能看到以下界面了:
我们直接点击右上角的“Download”:
进入新的页面以后,往下滑就能看到许多CMake的版本了:
这里我们直接选择64位的版本即可:
这里需要注意的是目前是2025年2月14日,目前CMake的版本是3.31.5,如果你在未来的某天使用我的方法构建失败了,那就将CMake和llama.cpp源码都降级到今天的版本。
点击了下载以后,浏览器就弹出了下载:
大家将其下载到自己能找到的地方即可:
我们双击这个安装引导程序开始安装,这里直接点击“Next”:
然后勾选同意协议随后点击下一步:
这里的第一个选项是将CMake添加到环境变量,需要勾上。第二个选项是将CMake添加到桌面,大家视情况勾选即可。勾选完以后,我们点击“Next”:
随后就是选择安装的路径了,这里大家自行选择即可,选择完成以后点击“Next”:
最后点击“Install”:
然后CMake就进入了安装阶段,大家等待安装完成即可:
出现下面的窗口就表示安装已经完成了,我们直接关掉窗口即可:
然后可以在cmd或者powershell中输入下面的命令来查看CMake是否安装成功:
cmake --version
输入命令以后CMake会输出自己的版本号,这就表示已经安装成功了:
如果你在这一步被提示找不到命令,可以检查CMake安装目录下的bin目录是否被添加到环境变量,如果没有,可以手动添加。
至此,我们CMake的安装就完成了。
3.Visual Studio 2022的安装
这里建议大家和我使用一样的VS版本,避免出现一些未知的错误。这里VS的安装过于简单,只要你学过C语言应该都用过。所以VS的安装步骤就不多说了。我们主要讲一下需要在VS中勾选哪些开发环境。这里大家可以跟着我勾:
安装好对应的环境以后VS的安装就结束了。它们有的教程还需要添加VS的某些路径到环境变量,经过测试,这不是必须的。
5.拉取llama.cpp的源码
我们直接使用git命令拉取llama.cpp的代码,在座的各位应该都会使用git吧?嗯,能够自己编译llama.cpp的应该都会使用git,那我就不教喽:
git clone https://github.com/ggerganov/llama.cpp.git
这里大家将其拉取到自己能找到的地方即可,拉取下来以后,就得到了一个名为“llama.cpp”的文件夹:
6.llama.cpp的编译
我们进入llama.cpp的项目文件夹就能看到下面的文件和文件夹了:
这里,我们需要创建一个目录,用于存放编译后生成的文件,大家在powershell中执行下面的命令即可,当然,也可以直接右键创建:
mkdir build
这里使用下面的命令进入这个文件夹:
cd build
进入llama.cpp项目目录下的build文件夹以后,就可以输入下面的命令了:
cmake -DGGML_CUDA=ON ../
这里需要注意的是,只有你想编译GPU版的llama.cpp时才需要加“-DGGML_CUDA=ON”参数,如果你想编译CPU版的llama.cpp直接输入“cmake ../”即可。如果你的GPU的CUDA不符合要求或者是没有GPU,加了“-DGGML_CUDA=ON”参数就会出现错误导致相关的编译文件无法生成。这里的“../”表示上级目录,这里的命令也就表示,为build的上级目录下的文件生成makefile文件。
命令执行以后,可以看到许多输出:
结束以后,我们的build中就多了许多文件:
这里需要注意的是,如果你终端输出了一些乱码的字符或者有error字样,都代表生成makefile这一步出错了。建议检查CUDA的版本,大部分的错误都是CUDA版本不符引起的。实在不行,就去掉“-DGGML_CUDA=ON”参数,编译CPU版的llama.cpp。
在makefile生成以后我们就可以开始编译了,这里我们直接使用下面的命令进行编译:
cmake --build . --config Release -j20
这里的-j20表示使用20个线程进行编译,大家根据自己CPU情况自行修改。
编译时,可能会出现警告(不用在意),并且CPU占用非常高:
出现下面的提示,就表示编译已经完成了:
编译生成的文件都被放到了“bin\Release”文件夹下:
图中所示文件夹中的那些exe文件就是我们通过编译得到的可执行文件了。后面会教大家如何使用这些文件。至此,我们llama.cpp的编译就完成了。
2.使用预编译的llama.cpp
现在来教大家如何使用预编译的llama.cpp。使用预编译的llama.cpp也分为有NVIDIA的GPU和没有两种情况。llama.cpp的官方编译了一套CUDA版的llama.cpp。并且支持到了CUDA12.4。下面就来教大家如何下载llama.cpp的预编译文件,我们首先通过下面的链接来到llama.cpp的开源主页:
llama.cpp开源主页:ggerganov/llama.cpp: LLM inference in C/C++
因为是GitHub可能加载会比较慢甚至加载失败,大家可以选择更换网络环境或者使用一些正向代理手段。进入llama.cpp的开源主页以后,我们直接点击右边的Releases下面发布的应用:
进来以后,就可以看到许多llama.cpp的预编译版本了:
这里我们主要看windows平台并且架构为X64的,这也是最常见的情况,如下图被我框起来的:
这里首先我们来看第一个名字:
llama-b4713-bin-win-avx-x64.zip
这里的llama很好理解,就指的是llama.cpp嘛,后面的“b4173”表示版本号,后面的“win”就表示windows系统。再往后就是"avx"这是英特尔推出的一种指令集扩展,下面的也同理,avx2表示256位,avx512表示512位。如果你只有CPU的话,就使用预编译的avx版本,这里下载512即可。
然后我们再看看下面的名字:
llama-b4713-bin-win-cuda-cu11.7-x64.zip
这里前面的部分就不说了,就说说后面的“cuda”部分,这里的cuda表示这个预编译包是在cuda之上构建的,这也意味着,你需要自己的cuda满足要求才能运行。后面的“cu11.7”就表示,这个包是基于cuda11.7构建的,你要运行的话,显卡的CUDA版本就必须大于11.7,使用下面的命令可以直接查看显卡支持的CUDA版本:
nvidia-smi.exe
这里大家根据输出的内容就可以确定自己的CUDA版本了。在确定了CUDA版本以后需要安装CUDA软件才能调用CUDA核心。CUDA的安装步骤我们在pytouch的安装教程中讲过,大家可以自行前往:
pytouch安装教程:[python]如何正确的安装pytorch?(详细)_pytorch安装-CSDN博客
这里大家需要确定,你下载的llama.cpp的预编译包的CUDA版本没有大于你自己的CUDA版本。假如你下载的预编译包支持12.4的CUDA,但是你显卡最高就只能支持到CUDA11.8那么这个包很可能就无法运行。
下面我们继续看文件名字:
llama-b4713-bin-win-hip-x64-gfx1030.zip
这是一个支持AMD显卡的包,“hip”是AMD显卡特殊的调用接口类似于N卡的CUDA,后面的“gfx1030”表示这个包支持的版本。这里我对AMD的显卡不是很了解,就不多说了。有能力的小伙伴自己研究吧!
大家选择好适配自己硬件的包以后,点击包,浏览器就会开始下载了,这里建议新建一个文件夹将其放在文件夹中,我这里就放在桌面的文件夹中了:
我们这里直接右键解压即可,解压得到下面的文件:
这些文件都是可执行文件,和我们编译时得到的是一样的。这样我们预编译的llama.cpp就已经部署好了。后面我会教大家如何使用。
四、使用llama.cpp转换模型格式为GGUF
现在来教大家,如何将不同格式的模型转换为GGUF格式,首先我们看看模型大致分为几种。目前,模型站中常见的模型,有safetensors为后缀的模型,如下图:
我们可以看到,模型文件夹中有两个非常大的以safetensors结尾的文件,这就是模型权重文件。其它还有一些用JSON写的配置文件。这是第一种常见的模型格式。还有一种就是以bin结尾的,如下图:
我们可以看到这里有一个名为“pytouch_model.bin”的文件。从大小来看,很明显,这也是一个模型权重文件。
以上说的两种都是常见的模型权重格式,我们可以使用llama.cpp将其转换为GGUF格式的模型。下面就让我们开始吧!
1.Conda的安装
在开始之前,我们需要准备一些环境,因为在llama.cpp中,处理模型格式转换的是一个python的脚本。所以我们这里需要安装一个Conda来管理python和python的一些依赖,这一步请确保自己有一定的python基础。Conda的安装可以查看我以前的Conda安装教程:
Miniconda安装:[python]我们应该如何安装Miniconda虚拟环境?(详细)_miniconda创建虚拟环境-CSDN博客
如果你对Conda不够了解也可以从上面的教程中学习。
安装好以后,启动conda的终端,输入conda就可以获得下面的输出:
至此,Conda的安装就完成了。
2.llama.cpp项目拉取
这里考虑到可能会有新手,不会使用git命令,这里我们就使用简单的办法下载llama.cpp的项目源码。这里大家先点击下方的链接前往llama.cpp的主页:
llama.cpp项目主页:
ggerganov/llama.cpp: LLM inference in C/C++
因为是github链接,可能会出现有的小伙伴打不开的情况。这里可以尝试更换网络环境或者使用一些正向代理手段。
进入llama.cpp的主页以后,我们点击右边的code:
随后再点击“Download”:
点击以后,过一会浏览器就会弹出下载了:
将下载下来的压缩包直接解压以后,就得到了下面的文件,这些文件和拉取的是一样的:
至此,我们llama.cpp的的项目文件就算是拉取过来了。
3.安装依赖
这里因为我们要运行的是一个python脚本,我们就需要安装相关的依赖文件。这里首先在Conda的终端中使用下面的命令创建一个虚拟环境:
conda create --name llamacpp python=3.10
创建好以后,使用下面的命令进入虚拟环境:
conda activate llamacpp
然后,这里需要将终端的路径切换到llama.cpp的项目目录下,注意,这里一定要切换到llama.cpp的项目目录下:
切换到项目目录下以后,我们开始安装环境。这里首先需要安装pytouch,大家可以看下面的pytouch安装教程:
pytouch安装教程:[python]如何正确的安装pytorch?(详细)_pytorch安装-CSDN博客
当然,如果你是小白,不清楚pytouch的GPU与CPU版,也可以跳过此步。直接在下面使用安装命令安装CPU版的touch。
我们可以在llama.cpp的项目目录下执行下面的命令安装依赖:
pip install -r .\requirements.txt
安装完成,没有错误的话,llama.cpp的相关依赖就安装完成了:
至此,llama.cpp的相关依赖就安装完成了。
4.模型的下载
模型的下载之前在部署DeepSeek的教程中已经讲得很详细了,如果你还不知道如何下载模型,可以去看上一篇教程:
DeepSeek部署:[AI]从零开始的DeepSeek本地部署及本地API调用教程-CSDN博客
这里模型下载同样使用hf-mirror,地址如下:HF-Mirror
这里主要教大家如何拉取非GGUF格式的模型。GGUF格式的模型只有一个文件,直接下载即可,但是我们之前介绍了两种特殊模型权重文件还附带了一堆的配置文件,我们需要将这些配置文件也下载下来,假如下面是一个我想下载的模型:
这里就可以直接点击如图所示的三个点:
在出现的选项中选择第一个,这表示要克隆这个模型:
随后使用中间的git命令进行克隆即可:
如果这里没安装git需要自行安装一下,安装过程并不复杂,大家自行安装即可。安装完git就可以使用git命令了。如果git拉取大文件比较慢,可以直接复制大文件的链接然后直接下载。
当我们克隆完成一个模型,就能得到这样一个模型文件夹:
这个文件夹中,就包含了模型的权重文件以及配置文件:
至此,模型的下载就已经完成了。
5.使用llama.cpp进行模型转换
当我们准备好上面的环境以后,就可以进行模型转换了。首先需要将我们拉取的模型文件夹复制到llama.cpp的“models”文件夹下,这里我就用我已经下载好的“DeepSeek-R1-Distill-Qwen-7B”模型举例:
这里要注意是将整个模型文件夹都复制过来,并且注意路径不要弄错了。
然后我们这里进入虚拟环境,然后在llama.cpp的项目目录下执行下面的命令,模型格式的转换就开始了:
python convert_hf_to_gguf.py models/DeepSeek-R1-Distill-Qwen-7B
这里的“convert_hf_to_gguf.py”表示调用的python脚本。这个脚本就放在了llama.cpp的项目根目录下。然后“models/DeepSeek-R1-Distill-Qwen-7B”表示我模型存放的路径,这里的路径要根据你文件夹的名字来定,不一定和我一样。
输入命令回车以后,模型转换就开始了,如果你回车以后,被提示缺少xxx库,那就说明环境没有装好,可以尝试重新安装依赖:
模型转换完成以后,我们就可以看到,这里转换后的模型已经被输出到了模型文件夹下:
去到模型文件夹下,就可以看到这个GGUF格式的模型了:
至此,我们的模型转换就完成了。这里生成出来的GGUF格式的模型在Ollama,LM Studio中同样适用。
五、使用llama.cpp量化模型
现在我们就可以对GGUF格式的模型进行量化了。这里首先你需要确定自己已经部署好了llama.cpp。现在我们开始吧!
这里就使用我刚才已经输出的GGUF模型进行演示,我的模型路径为“models\DeepSeek-R1-Distill-Qwen-7B\DeepSeek-R1-Distill-Qwen-7B-F16.gguf”。
这里我们要量化模型需要去到llama.cpp可执行文件的目录。不管是自己编译的llama.cpp还是下载的预编译版的llama.cpp。都需要去到可执行文件的目录,其实就是有一堆exe文件的目录,如图:
在可执行文件目录下,打开终端,使用下面的命令就可以进行模型的量化了。注意,你用我的命令不一定可以直接运行,需要一些修改,请看下面我对命令的说明:
.\llama-quantize.exe e://openproject/llama.cpp/models/DeepSeek-R1-Distill-Qwen-7B\DeepSeek-R1-Distill-Qwen-7B-F16.gguf e://openproject/llama.cpp/models/DeepSeek-R1-Distill-Qwen-7B\DeepSeek-R1-Distill-Qwen-7B-Q4.gguf Q4_K_S
这里的“.\llama-quantize.exe”表示使用当前目录下的“llama-quantize.exe”程序,因为我们就在可执行目录下,所以直接写“.\”。“e://openproject/llama.cpp/models/DeepSeek-R1-Distill-Qwen-7B\DeepSeek-R1-Distill-Qwen-7B-F16.gguf”表示模型的路径,我的模型放在了这个路径下,所以命令是这样,你可以根据自己的模型路径来写命令。“e://openproject/llama.cpp/models/DeepSeek-R1-Distill-Qwen-7B\DeepSeek-R1-Distill-Qwen-7B-Q4.gguf”表示输出模型的路径,可以在输出这里修改被量化后模型的名字,这里将模型后面的F16改为了Q4,表示这个模型使用了Q4的量化算法。最后面的“Q4_K_S”表示量化算法。
如果你不知道有哪些量化算法可用,在终端中直接执行下面的命令就可以看到所有的量化算法了:
.\llama-quantize.exe
综上所示,模型量化命令的大致格式为:
.\llama-quantize.exe 输入模型的路径 输出模型的路径 量化算法
输入命令回车以后,量化就开始了:
量化结束以后,被量化过的模型,就被输出到了我们指定的目录下:
至此,我们使用llama.cpp进行模型量化就已经完成了。
六、使用llama.cpp运行GGUF格式模型
llama.cpp本身也是可以运行模型的,这里同样的我们前往可执行文件目录:
在可执行目录下,输入下面的命令就可以运行相关的模型了:
.\llama-cli.exe -m e://openproject/llama.cpp/models/DeepSeek-R1-Distill-Qwen-7B/DeepSeek-R1-Distill-Qwen-7B-Q4.gguf -n 2048
这里的“.\llama-cli.exe”同样表示当前目录下的可执行文件。后面的“-m”表示指定模型的路径,再后面的“e://openproject/llama.cpp/models/DeepSeek-R1-Distill-Qwen-7B/DeepSeek-R1-Distill-Qwen-7B-Q4.gguf”就是我们模型的路径了,大家替换成自己GGUF文件所在的路径即可。后面的-n表示上下文最大的token数,这里我们这里指定的是2048。回车以后,模型就开始运行了:
随后,我们就可以和模型进行对话了:
这样,我们使用llama.cpp运行GGUF格式的模型就已经完成了。
七、结语
本次教程,教了大家如何部署llama.cpp以及如何使用llama.cpp运行,转换,量化模型。当然llama.cpp的强大远不止这些,剩下的,就留给大家自己探索吧,那么最后,感谢大家的观看!