GGUF 和 Transformers 的交互
GGUF 文件格式用于存储模型,以便使用 GGML 及其依赖的其他库(例如非常流行的 llama.cpp 或 whisper.cpp)进行推理。
这是一种 Hugging Face Hub 支持 的文件格式,其功能允许快速检查文件中的张量和元数据。
此文件格式设计为“单文件格式”,其中单个文件通常包含配置属性、标记器词汇表和其他属性,以及模型中要加载的所有张量。这些文件根据文件的量化类型采用不同的格式。我们在这里 简要介绍其中一些格式。
Transformers 中的支持
我们在 transformers
中添加了加载 gguf
文件的功能,以便在将模型转换回 gguf
以在 ggml
生态系统中使用之前,为 gguf 模型提供进一步的训练/微调功能。加载模型时,我们首先将其从量化转换为 fp32,然后加载要在 PyTorch 中使用的权重。
[!注意] 该支持仍处于探索阶段,我们欢迎贡献以巩固跨量化类型和模型架构的支持。
目前,以下是支持的模型架构和量化类型
支持的量化类型
初始支持的量化类型是根据 Hub 上共享的流行量化文件决定的。
- F32
- F16
- BF16
- Q4_0
- Q4_1
- Q5_0
- Q5_1
- Q8_0
- Q2_K
- Q3_K
- Q4_K
- Q5_K
- Q6_K
- IQ1_S
- IQ1_M
- IQ2_XXS
- IQ2_XS
- IQ2_S
- IQ3_XXS
- IQ3_S
- IQ4_XS
- IQ4_NL
[!注意] 要支持 gguf 反量化,需要安装
gguf>=0.10.0
。
支持的模型架构
目前,支持的模型架构是 Hub 上非常流行的架构,即
- LLaMa
- Mistral
- Qwen2
- Qwen2Moe
- Phi3
使用示例
为了在 transformers
中加载 gguf
文件,您应该将 gguf_file
参数指定给标记器和模型的 from_pretrained
方法。以下是如何加载标记器和模型的方法,它们可以从同一个文件加载
from transformers import AutoTokenizer, AutoModelForCausalLM
model_id = "TheBloke/TinyLlama-1.1B-Chat-v1.0-GGUF"
filename = "tinyllama-1.1b-chat-v1.0.Q6_K.gguf"
tokenizer = AutoTokenizer.from_pretrained(model_id, gguf_file=filename)
model = AutoModelForCausalLM.from_pretrained(model_id, gguf_file=filename)
现在,您可以访问 PyTorch 生态系统中模型的完整非量化版本,您可以在其中将其与大量其他工具结合使用。
为了转换回 gguf
文件,我们建议使用 llama.cpp 中的 convert-hf-to-gguf.py
文件。
以下是如何完成上述脚本以保存模型并将其导出回 gguf
的方法
tokenizer.save_pretrained('directory')
model.save_pretrained('directory')
!python ${path_to_llama_cpp}/convert-hf-to-gguf.py ${directory}