Hub 文档
GGUF
加入 Hugging Face 社区
并获得增强的文档体验
开始使用
GGUF
Hugging Face Hub 支持所有文件格式,但对 GGUF 格式 提供了内置功能。GGUF 是一种二进制格式,针对模型的快速加载和保存进行了优化,使其在推理任务中非常高效。GGUF 设计用于 GGML 和其他执行器。GGUF 由 @ggerganov 开发,他同时也是流行的 C/C++ LLM 推理框架 llama.cpp 的开发者。最初在 PyTorch 等框架中开发的模型可以转换为 GGUF 格式,以便在这些引擎中使用。

从下图可以看出,与纯张量文件格式(如 safetensors,这也是 Hub 推荐的模型格式)不同,GGUF 同时编码了张量和一组标准化的元数据。
查找 GGUF 文件
你可以通过筛选 GGUF 标签来浏览所有包含 GGUF 文件的模型:hf.co/models?library=gguf。此外,你可以使用 ggml-org/gguf-my-repo 工具将你的模型权重转换/量化为 GGUF 权重。


例如,你可以查看 TheBloke/Mixtral-8x7B-Instruct-v0.1-GGUF 来了解 GGUF 文件的实际应用。


元数据和张量信息查看器
Hub 提供了一个 GGUF 文件查看器,允许用户查看元数据和张量信息(名称、形状、精度)。该查看器可在模型页面(示例)和文件页面(示例)上找到。


与开源工具配合使用
使用 @huggingface/gguf 解析元数据
我们还创建了一个 Javascript GGUF 解析器,它可以处理远程托管的文件(例如 Hugging Face Hub 上的文件)。
npm install @huggingface/gguf
import { gguf } from "@huggingface/gguf";
// remote GGUF file from https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGUF
const URL_LLAMA = "https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGUF/resolve/191239b/llama-2-7b-chat.Q2_K.gguf";
const { metadata, tensorInfos } = await gguf(URL_LLAMA);
在此处查找更多信息:此处。
量化类型
类型 | 来源 | 描述 |
---|---|---|
F64 | 维基百科 | 64 位标准 IEEE 754 双精度浮点数。 |
I64 | GH | 64 位定宽整数。 |
F32 | 维基百科 | 32 位标准 IEEE 754 单精度浮点数。 |
I32 | GH | 32 位定宽整数。 |
F16 | 维基百科 | 16 位标准 IEEE 754 半精度浮点数。 |
BF16 | 维基百科 | 32 位 IEEE 754 单精度浮点数的 16 位缩短版。 |
I16 | GH | 16 位定宽整数。 |
Q8_0 | GH | 8 位最近舍入量化 (q )。每个块有 32 个权重。权重公式:w = q * block_scale 。旧版量化方法(目前已不常用)。 |
Q8_1 | GH | 8 位最近舍入量化 (q )。每个块有 32 个权重。权重公式:w = q * block_scale + block_minimum 。旧版量化方法(目前已不常用)。 |
Q8_K | GH | 8 位量化 (q )。每个块有 256 个权重。仅用于量化中间结果。所有 2-6 位点积都为此量化类型实现。权重公式:w = q * block_scale 。 |
I8 | GH | 8 位定宽整数。 |
Q6_K | GH | 6 位量化 (q )。超块包含 16 个块,每个块有 16 个权重。权重公式:w = q * block_scale(8-bit) ,结果为每权重 6.5625 位。 |
Q5_0 | GH | 5 位最近舍入量化 (q )。每个块有 32 个权重。权重公式:w = q * block_scale 。旧版量化方法(目前已不常用)。 |
Q5_1 | GH | 5 位最近舍入量化 (q )。每个块有 32 个权重。权重公式:w = q * block_scale + block_minimum 。旧版量化方法(目前已不常用)。 |
Q5_K | GH | 5 位量化 (q )。超块包含 8 个块,每个块有 32 个权重。权重公式:w = q * block_scale(6-bit) + block_min(6-bit) ,结果为每权重 5.5 位。 |
Q4_0 | GH | 4 位最近舍入量化 (q )。每个块有 32 个权重。权重公式:w = q * block_scale 。旧版量化方法(目前已不常用)。 |
Q4_1 | GH | 4 位最近舍入量化 (q )。每个块有 32 个权重。权重公式:w = q * block_scale + block_minimum 。旧版量化方法(目前已不常用)。 |
Q4_K | GH | 4 位量化 (q )。超块包含 8 个块,每个块有 32 个权重。权重公式:w = q * block_scale(6-bit) + block_min(6-bit) ,结果为每权重 4.5 位。 |
Q3_K | GH | 3 位量化 (q )。超块包含 16 个块,每个块有 16 个权重。权重公式:w = q * block_scale(6-bit) ,结果为每权重 3.4375 位。 |
Q2_K | GH | 2 位量化 (q )。超块包含 16 个块,每个块有 16 个权重。权重公式:w = q * block_scale(4-bit) + block_min(4-bit) ,结果为每权重 2.625 位。 |
IQ4_NL | GH | 4 位量化 (q )。超块包含 256 个权重。权重 w 通过 super_block_scale 和 importance matrix 获得。 |
IQ4_XS | HF | 4 位量化 (q )。超块包含 256 个权重。权重 w 通过 super_block_scale 和 importance matrix 获得,结果为每权重 4.25 位。 |
IQ3_S | HF | 3 位量化 (q )。超块包含 256 个权重。权重 w 通过 super_block_scale 和 importance matrix 获得,结果为每权重 3.44 位。 |
IQ3_XXS | HF | 3 位量化 (q )。超块包含 256 个权重。权重 w 通过 super_block_scale 和 importance matrix 获得,结果为每权重 3.06 位。 |
IQ2_XXS | HF | 2 位量化 (q )。超块包含 256 个权重。权重 w 通过 super_block_scale 和 importance matrix 获得,结果为每权重 2.06 位。 |
IQ2_S | HF | 2 位量化 (q )。超块包含 256 个权重。权重 w 通过 super_block_scale 和 importance matrix 获得,结果为每权重 2.5 位。 |
IQ2_XS | HF | 2 位量化 (q )。超块包含 256 个权重。权重 w 通过 super_block_scale 和 importance matrix 获得,结果为每权重 2.31 位。 |
IQ1_S | HF | 1 位量化 (q )。超块包含 256 个权重。权重 w 通过 super_block_scale 和 importance matrix 获得,结果为每权重 1.56 位。 |
IQ1_M | GH | 1 位量化 (q )。超块包含 256 个权重。权重 w 通过 super_block_scale 和 importance matrix 获得,结果为每权重 1.75 位。 |
如果上表有任何不准确之处,请在此文件上发起一个 PR。
< > 在 GitHub 上更新