目录
1. 什么是GGUF
GGUF 格式的全名为(GPT-Generated Unified Format),提到 GGUF 就不得不提到它的前身
GGML(GPT-Generated Model Language)。
GGML 是专门为了机器学习设计的张量库,最早可 以追溯到 2022/10。其目的是为了有一个单文件共享的格式,并 且易于在不同架构的 GPU 和 CPU 上进行推理。但在后续的开发 中,遇到了灵活性不足、相容性及难以维护的问题。
2. 为什么要转成GGUF格式
在传统的 Deep Learning Model 开发中大多使用 PyTorch 来进行开发,但因为在部署时会面临相依 Lirbrary
太多、版本管理的问题于才有了 GGML、GGMF、GGJT 等格式,而在开源社群不停的迭代后 GGUF 就诞生了。
GGUF 实际上是基于 GGJT 的格式进行优化的,并解决了 GGML 当初面临的问题,包括:
- 1)可扩展性:轻松为 GGML 架构下的工具添加新功能,或者向 GGUF 模型添加新 Feature,不会破坏与现有模型的兼容性。
- 2)对 mmap(内存映射)的兼容性:该模型可以使用 mmap 进行加载(原理解析可见参考),实现快速载入和存储。(从 GGJT 开
始导入,可参考 GitHub) - 3)易于使用:模型可以使用少量代码轻松加载和存储,无需依赖的 Library,同时对于不同编程语言支持程度也高。
- 4)模型信息完整:加载模型所需的所有信息都包含在模型文件中,不需要额外编写设置文件。
- 5)有利于模型量化:GGUF 支持模型量化(4 位、8 位、F16),在 GPU 变得越来越昂贵的情况下,节省 vRAM 成本也非常重要。
3. 安装及使用
3.1 自动安装
git clone https://github.com/ggerganov/llama.cpp.git
pip install -r llama.cpp/requirements.txt
3.2 网络不加的手动安装
-
- 上传到linux服务器解压
- 上传到linux服务器解压
- 3.安装
# 进入到llama.cpp-master目录执行
pip install -r requirements.txt
3.3 执行转换
- 进入到llama.cpp目录
# 如果不量化,保留模型的效果
python convert_hf_to_gguf.py ./Meta-Llama-3-8B-Instruct --outtype f16
--verbose --outfile Meta-Llama-3-8B-Instruct-gguf.gguf
# 如果需要量化(加速并有损效果),直接执行下面脚本就可以
python convert_hf_to_gguf.py ./Meta-Llama-3-8B-Instruct --outtype
q8_0 --verbose --outfile Meta-Llama-3-8B-Instruct-gguf_q8_0.gguf
- 这里–outtype是输出类型,代表含义:
q2_k:特定张量(Tensor)采用较高的精度设置,而其他的则保持基础级别。
q3_k_l、q3_k_m、q3_k_s:这些变体在不同张量上使用不同级别的精度,从而达到性能和效率的平衡。
q4_0:这是最初的量化方案,使用 4 位精度。
q4_1 和q4_k_m、q4_k_s:这些提供了不同程度的准确性和推理速度,适合需要平衡资源使用的场景。
q5_0、q5_1、q5_k_m、q5_k_s:这些版本在保证更高准确度的同时,会使用更多的资源并且推理速度较 慢。
q6_k 和 q8_0:这些提供了最高的精度,但是因为高资源消耗和慢速度,可能不适合所有用户。
fp16 和 f32: 不量化,保留原始精度。