GGUF
Hugging Face Hub 支持所有文件格式,但内置了对 GGUF 格式 的支持,该格式是二进制格式,针对模型的快速加载和保存进行了优化,使其在推理方面非常高效。GGUF 被设计用于与 GGML 和其他执行器一起使用。GGUF 由 @ggerganov 开发,他也是 llama.cpp 的开发者,这是一个流行的 C/C++ LLM 推理框架。最初在 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);
在此处查找更多信息 here.
量化类型
类型 | 来源 | 描述 |
---|---|---|
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.5625 位。 |
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 和 重要性矩阵 获得的,导致每个权重 3.44 位。 |
IQ3_XXS | HF | 3 位量化 (q )。超块包含 256 个权重。权重 w 是使用 super_block_scale 和 重要性矩阵 获得的,导致每个权重 3.06 位。 |
IQ2_XXS | HF | 2 位量化 (q )。超块包含 256 个权重。权重 w 是使用 super_block_scale 和 重要性矩阵 获得的,导致每个权重 2.06 位。 |
IQ2_S | HF | 2 位量化 (q )。超块包含 256 个权重。权重 w 是使用 super_block_scale 和 重要性矩阵 获得的,导致每个权重 2.5 位。 |
IQ2_XS | HF | 2 位量化 (q )。超块包含 256 个权重。权重 w 是使用 super_block_scale 和 重要性矩阵 获得的,导致每个权重 2.31 位。 |
IQ1_S | HF | 1 位量化 (q )。超块包含 256 个权重。权重 w 是使用 super_block_scale 和 重要性矩阵 获得的,导致每个权重 1.56 位。 |
IQ1_M | GH | 1 位量化 (q )。超块包含 256 个权重。权重 w 是使用 super_block_scale 和 重要性矩阵 获得的,导致每个权重 1.75 位。 |
如果上述表格存在任何不准确之处,请在 此文件 上打开一个 PR。
< > 在 GitHub 上更新