当前位置:AIGC资讯 > AIGC > 正文

大模型使用llama.cpp转换gguf格式并量化 | 新手炼丹记录(2)

系列回顾

        llama factory LoRA微调qwen大模型 | 新手炼丹记录(1)-CSDN博客

        大模型使用llama.cpp转换gguf格式并量化 | 新手炼丹记录(2)-CSDN博客

        ollama本地部署qwen微调大模型 | 新手炼丹记录(3)-CSDN博客

        上一次我们详细介绍了大模型微调过程,但是微调完后的模型对于我们本地的电脑来说可能还是太大了,这个时候我们就需要对模型进行量化。当然为了方便我们将模型使用ollama部署在本地,我们还需要将原来safetensors格式的模型文件转化为gguf格式。

        下面让我们来看一下具体应该怎么做:

一、llama.cpp的下载与编译

        llama.cpp可以帮助我们转化模型为gguf格式、对模型进行量化以及进行模型推理等功能。

llama.cpp Github仓库:https://github.com/ggerganov/llama.cpp

1、下载llama.cpp

我们回到root目录下,再执行下载命令

cd ~
git clone https://github.com/ggerganov/llama.cpp.git

下载完成:

2、安装Python依赖

由于在llama.cpp项目中需要使用python脚本进行模型转换,我们需要提前配置好。这里我们再创建一个新的conda环境安装llama需要的依赖库(!!当然如果你觉得麻烦可以先往下看!)具体操作如下:

#创建虚拟环境
conda create -n llama python=3.10

#进入虚拟环境
conda activate llama

#进入工程目录
cd llama.cpp

#安装环境依赖
pip install -e .

当然也可以不重新配置环境,我实测之前llama_factory下载过的python环境可以直接运行llama.cpp的python脚本。所以可以直接进入llama_factory的虚拟环境。

conda activate llama_factory

3、编译安装

进入llama.cpp项目目录下,对于不同的平台需要执行不同编译指令,具体如下:

Linux:

#Linux编译指令

#直接进入工程目录make即可
make

#CUDA加速版编译
make GGML_CUDA=1

Windows:

#Windows编译指令

#Windows平台需要安装cmake和gcc,如果有没有安装的请自行百度安装
mkdir build
cd build
cmake ..
cmake --build . --config Release

#CUDA加速版编译
mkdir build
cd build
cmake .. -DLLAMA_CUBLAS=ON
cmake --build . --config Release

编译安装可能需要一段时间,这是正常的。编译完以后如下:

编译完后我是使用ls命令主要检查一下有没有存在llama-cli与llama-quantize两个可执行文件,我们后面会使用到,如果没有可能是在编译的时候出现了问题,可以使用“make clean”指令清除编译结果然后“make”重新编译。

编译完以后下面我们就可以使用llama.cpp进行模型的格式转换以及量化操作了。

二、llama.cpp的使用

!!注意:由于网上许多教程版本过低,许多原来的命令现在已经无法使用。通过查阅官方GitHub仓库说明,2024年6月官方对许多指令进行了重命名,多数在原命令前加上了“llama-”前缀,我们常用的就是llama-quantize与llama-cli。部分变动如下:

1、gguf格式转换

        转换safetensors格式到gguf格式,我们主要使用的是llama.cpp提供的python脚本convert-hf-to-gguf.py。使用方式如下:

注意:指令均需要在llama.cpp项目文件夹下执行

python convert_hf_to_gguf.py --outfile <要导出的文件地址.gguf> <微调后的模型来源目录>

这里我选择在autodl-tmp目录下新建一个ggufs文件夹(绝对路径:/root/autodl-tmp/ggufs)保存转换以及量化后的gguf模型文件。

我的转换指令参考如下:

python convert_hf_to_gguf.py --outfile /root/autodl-tmp/ggufs/qwen7b_lora.gguf /root/autodl-tmp/exports

转换好后,我们就可以在刚才填入得文件夹中找到gguf格式得模型文件:

我们可以看到最终合并完后得模型文件还有15个G左右。

2、模型量化

         将模型转化为gguf格式格式后,我们可以看到7b的模型大约还是有15~16GB左右,对于我们本地的电脑还是一笔不小的开销。那么我们就可以使用编译后得llama-quantize可执行文件来对模型进行进一步量化处理。量化可以帮助我们减少模型的大小,但是代价是损失了模型精度,也就是模型回答的能力可能有所下降。权衡以后我们可以选择合适的量化参数,保证模型的最大效益。

llama-quantize <原模型目录> <转换后的模型保存路径> <量化位数>

量化位数:

        量化位数使用q表示,它代表存储权重(精度)的位数。q2、q3、q4… 表示模型的量化位数。例如,q2表示2位量化,q3表示3位量化,以此类推。量化位数越高,模型的精度损失就越小,模型的磁盘占用和计算需求也会越大。

         我们使用llama-quantize量化模型,它提供各种量化位数的模型:Q2、Q3、Q4、Q5、Q6、Q8、F16。量化模型的命名方法遵循: Q + 量化比特位 + 变种。具体的量化参数可以在llama.cpp目录下使用./llama-quantize查看。部分示例如下:

对于7b的模型,下面我对其做一个q4量化,参考指令如下:

./llama-quantize /root/autodl-tmp/ggufs/qwen7b_lora.gguf /root/autodl-tmp/ggufs/qwen7b_lora_q4.gguf q4_0

量化完后,我们可以明显看到模型文件的大小小了许多,从原来的大约15GB缩小到了4GB左右,缩小了3倍。因此我们的量化作用还是很显著的。

三、模型下载

经过微调、转化以及量化后,我们就得到一个可以部署再ollama中使用的模型源文件。为了在本地部署我们的大模型,我们还需要将上面训练好的模型文件下载到本地。下面主要有两种下载方式:

1、网页直接下载

这种方法虽然简单,但是不是很推荐,因为我们的模型文件一是比较大,很容易传到一半会莫名失败,二是容易受到网络波动的影响,也很容易失败。

下面是操作流程:

2、使用FileZilla连接服务器下载

这种方式比较稳定,基本都能下载成功。首先需要我们下载FileZilla客户端,我们找到Windows64位的绿色版,直接下载后解压缩即可使用:

打开后我们点击“文件”,在“文件”中点击站点管理器:

点击“新站点”,接下来我们要依次配置AutoDL服务器连接:

我们新建一个文本文件用于记录我们的SSH连接信息,然后回到我们的AutoDL实例控制台:

这里涉及一些隐私我就做了个浅码。我们按照这个信息去配置我们FileZilla中的连接:

然后我们还需要设置一下本地下载的路径地址:

最后点击“连接“,如果出现下图的提示直接信任、确认即可:

确认以后我们就可以看到已经成功连接上了远程的主机:

接着我们在右侧服务器文件栏找到我们训练好的gguf模型文件,右键下载即可:

这样等待文件下载完毕,我们就可以在本地看到gguf模型文件了:

 四、结束

        到这里我们对模型的格式转换以及量化也都已成完成了,并且还成功的使用FileZilla将gguf文件传输到了我们的本地。如果大家还有疑问,可以在下方评论区留言。或者有哪里写的不对的也可以在评论区指出。下一期我将介绍如何将gguf文件使用Ollama部署到本地。

总结

### 文章总结
本文是一篇关于使用`llama.cpp`工具对大型模型进行格式转换与量化的指南,主要分为几个关键步骤进行详细介绍:
#### 1. llama.cpp的下载与编译
- **下载**:从GitHub仓库`https://github.com/ggerganov/llama.cpp.git`下载源码。
- **Python依赖安装**:通过conda创建新环境后(或使用已有环境),在项目目录内运行`pip install -e .`安装Python依赖。
- **编译**:根据不同的操作系统(Linux/Windows),使用不同的编译指令来构建`llama.cpp`。编译完成后,需要检查是否生成了`llama-cli`和`llama-quantize`等可执行文件。
#### 2. 使用llama.cpp进行模型处理
- **格式转换**:使用`convert_hf_to_gguf.py`脚本将`safetensors`格式的模型文件转换为`gguf`格式,并保存到指定位置。
- 示例命令:`python convert_hf_to_gguf.py --outfile /目标路径/模型名称.gguf /原模型路径`
- **模型量化**:使用`llama-quantize`工具对转换后的模型进行量化操作,以减小模型大小,并根据需要选择合适的量化位数(如q4)。
- 示例命令:`./llama-quantize /原gguf模型路径/原gguf模型名.gguf /保存路径/量化后gguf模型名_q4.gguf q4_0`
#### 3. 模型下载
- **推荐使用FileZilla进行模型下载**,因为相较于直接网页下载,FileZilla提供了更稳定的SSH连接方式和更高的下载成功率。
- 通过记录SSH连接信息,在FileZilla中配置远程连接,并设置本地下载路径,即可方便地将远程模型文件下载到本地。
#### 4. 结论与展望
- 总结整个模型格式转换、量化及下载到本地的过程,并预告下一期将介绍如何使用Ollama在本地部署gguf模型文件。
这篇文章为刚接触大模型微调和部署的新手提供了一份详细的操作指南,通过逐步解释和示例代码,帮助读者完成模型的优化和部署准备工作。

更新时间 2024-09-09