------->更多内容,请移步“鲁班秘笈”!!<-------
GGUF
GGUF(GPT-Generated Unified Format)是一种高效存储和交换大模型预训练结果的二进制格式,由llama.cpp创始人Georgi Gerganov定义。目前HuggingFace陆续的支持包括模型检索过滤、预览GGUF元数据和提供工具支持网站显示平台GGUF格式模型信息,最近开始支持GGUF的微调能力。
它的前身是GGML,GGML是张量库,也是LLM文件格式发展的早期迭代。这些早期版本现在大多只与老系统兼容,仅仅是因为开发人员为保持向前兼容。
在最近的使用中,尤其是llama.cpp版本中,GGML的相关性已经减弱。主要原因是与GGUF相比,它的处理能力较慢且缺乏高级功能。llama.cpp不再提供GGML支持。后续遭遇模型下载,还是选择GGUF版本为妙。
GGUF格式是一种通用设计,与GGML相反。GGUF扩展了与非llama架构模型(如 Falcon、Bloom、Phi、Mistral 等)的兼容性。
如上图所示GGUF将所有元数据、数据和超参数保存在一个文件中,就像GGML一样。然而,GGUF被设计为更具可扩展性和灵活性,允许在不破坏任何东西的情况下添加新功能。
特色优点
GGUF有很多很棒的功能,自2023年8月以来,GGUF已在开发者社区中得到广泛认可。GGUF 格式在模型文件中包含所有必要的元数据,无需其他文件,例如tokenizer_config.json。
这种格式具有增强的标记化、对特殊标记的支持以及更好的元数据处理。它旨在加快模型加载速度、易用性和对未来变化的适应性。同时模型加载需要最少的代码,因此不需要外部库。其内置数据存储简化了以前手动管理的参数的处理。
-
单文件部署:确保在不依赖外部文件的情况下轻松分发和加载。
-
可扩展性:它允许向基于 GML 的执行器添加新功能,向 GGUF 模型添加信息,保持与现有模型的兼容性。
-
mmap兼容性:可以使用内存映射加载模型,以提高加载和保存速度。
-
用户友好型设计:简化模型加载和保存过程,无需外部库。
-
全面的信息存储:GGUF 文件包含加载模型所需的所有数据,不需要用户的额外输入。
-
量化兼容性:GGUF支持量化。模型权重(通常存储为 16 位浮点数)被缩小(例如,缩小到 4 位整数),以节省计算资源,而不会显着影响模型的能力。这对于减少对昂贵的GPU内存需求特别有用。
GGUF 的一个重要变化是采用超参数的键值结构,现在称为元数据。这种转变允许在不影响与现有模型的兼容性的情况下添加新的元数据,轻松集成新信息。
支持的量化类型
Hugging Face上可以浏览所有带有GGUF文件的模型,按GGUF标签进行筛选:hf.co/models?library=gguf。此外可以使用ggml-org/gguf-my-repo 工具将模型权重转换/量化为GGUF权重。
下面为Hugging Face上GGUF支持的量化类型,部分来自llama.cpp,部分来自Hugging Face自身。
此外在推理方面还可以使用Ollama,GPT4All或者Llama.cpp,GPT4All是Nomic开发的开源LLM应用程序。版本2.7.2引入了一个全新的实验性功能,Model Discovery 。它提供从Hub搜索和下载GGUF模型的内置方法。
Llama.cpp更是可以直接允许下载并在GGUF上运行推理,只需提供 Hugging Face存储库路径和文件名的路径即可。
./main \
--hf-repo lmstudio-community/Meta-Llama-3-8B-Instruct-GGUF \
-m Meta-Llama-3-8B-Instruct-Q8_0.gguf \
-p "I believe the meaning of life is " -n 128