Hugging Face's logo
加入 Hugging Face 社区

并获取增强型文档体验

开始使用

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_scaleimportance matrix 获得。
IQ4_XS HF 4 位量化 (q)。超级块包含 256 个权重。权重 w 使用 super_block_scaleimportance 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 上更新