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);

在此处查找更多信息 here

量化类型

类型 来源 描述
F64 维基百科 64 位标准 IEEE 754 双精度浮点数。
I64 GH 64 位固定宽度整数。
F32 维基百科 32 位标准 IEEE 754 单精度浮点数。
I32 GH 32 位固定宽度整数。
F16 维基百科 16 位标准 IEEE 754 半精度浮点数。
BF16 维基百科 16 位缩短版本的 32 位 IEEE 754 单精度浮点数。
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 上更新