GGUF 与 Transformers 的交互
GGUF文件格式用于存储模型,以便与GGML及其依赖的其他库进行推理,例如非常流行的llama.cpp或whisper.cpp。
它是一种文件格式,由Hugging Face Hub支持,具有允许快速检查文件中的张量和元数据的功能。
此文件格式设计为“单文件格式”,其中单个文件通常包含配置属性、分词器词汇表和其他属性,以及要加载到模型中的所有张量。这些文件根据文件的量化类型有不同的格式。我们简要介绍其中一些这里。
Transformers 中的支持
我们增加了在transformers
中加载gguf
文件的能力,以便为gguf模型提供进一步的训练/微调能力,然后再将这些模型转换回gguf
以在ggml
生态系统中使用。在加载模型时,我们首先将其反量化为fp32,然后再加载权重以在PyTorch中使用。
[!注意] 支持仍然非常探索性,我们欢迎贡献以巩固其在量化类型和模型架构中的应用。
目前,以下是支持的模型架构和量化类型:
支持的量化类型
初始支持的量化类型是根据在Hub上共享的流行量化文件决定的。
- F32
- F16
- BF16
- Q4_0
- 第四季度_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
- Bloom
- 猎鹰
- StableLM
- GPT2
- Starcoder2
- T5
- 曼巴
- Nemotron
示例用法
为了在transformers
中加载gguf
文件,你应该为分词器和模型的from_pretrained
方法指定gguf_file
参数。以下是如何加载分词器和模型的方法,它们可以从完全相同的文件中加载:
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}