Hub 文档

GGUF

Hugging Face's logo
加入 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_scaleimportance matrix 获得。
IQ4_XS HF 4 位量化 (q)。超块包含 256 个权重。权重 w 通过 super_block_scaleimportance matrix 获得,结果为每权重 4.25 位。
IQ3_S HF 3 位量化 (q)。超块包含 256 个权重。权重 w 通过 super_block_scaleimportance matrix 获得,结果为每权重 3.44 位。
IQ3_XXS HF 3 位量化 (q)。超块包含 256 个权重。权重 w 通过 super_block_scaleimportance matrix 获得,结果为每权重 3.06 位。
IQ2_XXS HF 2 位量化 (q)。超块包含 256 个权重。权重 w 通过 super_block_scaleimportance matrix 获得,结果为每权重 2.06 位。
IQ2_S HF 2 位量化 (q)。超块包含 256 个权重。权重 w 通过 super_block_scaleimportance matrix 获得,结果为每权重 2.5 位。
IQ2_XS HF 2 位量化 (q)。超块包含 256 个权重。权重 w 通过 super_block_scaleimportance matrix 获得,结果为每权重 2.31 位。
IQ1_S HF 1 位量化 (q)。超块包含 256 个权重。权重 w 通过 super_block_scaleimportance matrix 获得,结果为每权重 1.56 位。
IQ1_M GH 1 位量化 (q)。超块包含 256 个权重。权重 w 通过 super_block_scaleimportance matrix 获得,结果为每权重 1.75 位。

如果上表有任何不准确之处,请在此文件上发起一个 PR。

< > 在 GitHub 上更新