大模型使用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部署到本地。

<think>好的,用户现在问的是关于DeepSeek 1.5b模型的不同GGUF文件之间的区别。之前他们遇到了Ollama报错不支持`from`关键字的问题,现在转向模型权重文件的问题,可能他们在尝试加载或转换模型时遇到了问题,或者在选择合适的GGUF文件时感到困惑。 首先,我需要回忆GGUF是什么。GGUF是GGML团队推出的新格式,替代了之前的GGML,支持更好的扩展性和元数据。用户可能知道GGUF用于在CPU上高效推理,尤其是在资源有限的环境下。 接下来,用户提到的DeepSeek 1.5b模型,我需要确认这个模型是否存在不同的GGUF变体。通常,同一个模型会有不同量化级别的GGUF文件,比如Q4_K_M、Q5_K_S等。不同量化影响模型大小和推理速度、内存需求以及精度。 需要解释每个量化级别的含义,比如Q4、Q5中的数字代表位数,后缀如K_M或K_S代表不同的量化方法。例如,Q4_K_M可能比Q5_K_S更小但精度更低。同时,可能需要提到不同量化对硬件的要求,比如低量化需要更多内存但更快,而高量化可能更慢但更精确。 另外,用户可能想知道如何选择适合自己需求的GGUF文件。需要根据他们的硬件配置(如RAM大小、是否使用GPU)和需求(速度vs精度)来推荐。比如,如果内存有限,Q4可能更合适;如果追求质量,Q5或Q6更好。 还要考虑是否有其他因素影响GGUF文件的不同,比如是否包含或不包含某些层的优化,或者是否针对特定指令集编译。例如,AVX2或CUDA加速的支持,这可能影响文件的选择。 可能需要提醒用户查看模型的文档或来源(如Hugging Face),确认不同GGUF文件的具体信息,因为命名可能因发布者而异。此外,建议用户测试不同量化版本,观察性能和效果的平衡。 最后,用户可能在使用Ollama时遇到问题,之前的问题是关于Modelfile的,现在可能在尝试加载不同的GGUF文件时遇到问题,所以需要确保他们正确配置了Ollama的Modelfile,引用了正确的GGUF文件路径,使用了适当的参数。 总结回答的结构:先介绍GGUF格式,然后解释量化级别及其影响,再具体到DeepSeek 1.5b的不同GGUF文件,最后给出选择建议和注意事项。</think>看到 **DeepSeek-1.5B** 模型的不同 **GGUF** 文件(如 `Q4_K_M`、`Q5_K_S` 等)时,这些文件的主要区别在于 **量化方法** 和 **精度级别**。量化是为了在保持模型性能的同时,减少模型体积和内存占用,使其能在 CPU 或低显存 GPU 上高效运行。 以下是不同 GGUF 文件的常见区别: --- ### **1. 量化方法(Quantization Method)** GGUF 文件通常以 `Q{X}_{Y}` 格式命名(例如 `Q4_K_M`、`Q5_K_S`),其中: - **`Q{X}`**:表示量化的比特位数,数值越小,模型体积越小,但精度损失越大。 - **`_{Y}`**:表示量化法的变体(如 `K_M`、`K_S`),不同变体在精度和速度之间权衡不同。 #### **常见量化级别** | 量化级别 | 比特数 | 典型体积 | 适用场景 | |--|----------| | `Q2_K` | 2-bit | 最小 | 超低内存设备,但精度损失明显 | | `Q3_K` | 3-bit | 较小 | 内存紧张,可接受一定误差 | | `Q4_K` | 4-bit | 中等 | 平衡体积与精度(推荐大多数场景) | | `Q5_K` | 5-bit | 较大 | 接近原始 FP16 精度,需要更多内存 | | `Q6_K` | 6-bit | 最大 | 几乎无损,适合高质量生成 | #### **量化变体** - **`K_S`(K-Small)**:更小的体积,但精度稍低。 - **`K_M`(K-Medium)**:平衡体积与精度。 - **`K_L`(K-Large)**:更大体积,更高精度。 --- ### **2. DeepSeek-1.5B 的 GGUF 文件区别** 以常见的 DeepSeek-1.5B GGUF 文件为例: - **`deepseek-1.5b-Q4_K_M.gguf`** 使用 4-bit 量化,中等体积和精度,适合大多数 CPU 推理场景。 - **`deepseek-1.5b-Q5_K_S.gguf`** 5-bit 量化,体积略大但精度更高,适合需要更高质量输出的场景。 - **`deepseek-1.5b-Q6_K.gguf`** 6-bit 接近无损量化,体积最大,适合对生成质量要求极高的任务。 -- ### **3. 如何选择?** - **低内存/轻量化需求**:选 `Q4_K_M` 或 `Q3_K_M`。 - **平衡性能与质量**:选 `Q5_K_M`。 - **追求最高质量**:选 `Q5_K_S` 或 `Q6_K`(需确保内存足够)。 - **嵌入式设备/边缘计**:选 `Q2_K`。 --- ### **4. 实际影响** - **推理速度**:量化级别越低(如 Q2),计速度通常越快。 - **内存占用**:量化级别越低,内存占用越少(例如 Q4 比 Q6 节省约 30% 内存)。 - **生成质量**:低量化可能导致输出重复、逻辑错误或细节丢失(尤其在复杂任务中)。 --- ### **5. 使用建议** 1. **测试对比**:如果资源允许,尝试不同量化版本,观察生成质量是否符合需求。 2. **硬件匹配**: - 内存 < 8GB:优先选 Q4 或更低。 - 内存 ≥ 16GB:可尝试 Q5/Q6。 3. **任务类型**: - 简单问答/摘要:Q4 足够。 - 代码生成/逻辑推理:建议 Q5 或更高。 -- ### **附:GGUF 文件命名示例** ``` deepseek-1.5b-Q4_K_M.gguf # 4-bit 中等量化 deepseek-1.5b-Q5_K_S.gguf # 5-bit 小体积量化 deepseek-1.5b-f16.gguf # 原始 FP16 未量化(需高性能 GPU) ``` 如果需要下载或转换 GGUF 文件,可以参考 [llama.cpp](https://github.com/ggerganov/llama.cpp) 或 [Hugging Face 社区模型库](https://huggingface.co/models)
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值