#ggml #gguf #llama-cpp

ggml-quants

GGml defined quantized data types and their quant/dequant algorithm

2 unstable releases

Uses new Rust 2024

0.1.0 Jun 3, 2025
0.0.0 Nov 25, 2024

#536 in Algorithms

Download history 2281/week @ 2025-06-02 2561/week @ 2025-06-09 1449/week @ 2025-06-16 1917/week @ 2025-06-23 2077/week @ 2025-06-30 2580/week @ 2025-07-07 2564/week @ 2025-07-14 2577/week @ 2025-07-21 2937/week @ 2025-07-28 2529/week @ 2025-08-04 2380/week @ 2025-08-11 2749/week @ 2025-08-18 2731/week @ 2025-08-25 2827/week @ 2025-09-01 2706/week @ 2025-09-08 3856/week @ 2025-09-15

12,226 downloads per month
Used in 3 crates (via ggus)

MIT license

44KB
1K SLoC

ggml-quants

CI Latest version Documentation license

GitHub Issues GitHub Pull Requests GitHub repo size GitHub code size in bytes GitHub contributors GitHub commit activity

ggml-quants 是一个 Rust 库,用于实现 ggml 定义的量化数据类型及其对应的量化和反量化算法。

项目简介

ggml-quants 提供了一组高效的量化工具,用于将浮点数数据压缩为更小的量化格式(如 Q4_0, Q8_1 等),并支持从量化数据还原为浮点数。

该库的核心功能包括:

  • 定义各种量化格式数据结构;
  • 提供通用的量化和反量化接口;
  • 基于 rayon 并行加速正反量化计算;

使用示例

use ggml_quants::{Quantize, Q8_1};

// 原始浮点数数据
let data: [f32; 32] = [
    0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8,
    0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6,
    1.7, 1.8, 1.9, 2.0, 2.1, 2.2, 2.3, 2.4,
    2.5, 2.6, 2.7, 2.8, 2.9, 3.0, 3.1, 3.2,
];

// 量化数据
let quantized = Q8_1::quantize(&data);

// 反量化数据
let dequantized: [f32; 32] = quantized.dequantize();

应用场景

gguf 项目中,模型权重通常以浮点数形式存储(如 f32f16),这会占用大量内存,成为限制性能的主要因素。通过使用 ggml-quants 提供的量化工具,可以在能够容忍的精度损失下,将权重从 f32 压缩为更小的格式(如 Q4_0Q8_1),从而:

  • 减少存储空间:降低模型部署对硬件内存的需求;
  • 加快加载速度:量化后的权重文件更小,加载时间显著减少;
  • 提升推理效率:在支持量化计算的硬件(如 GPU 或专用加速器)上,推理速度可以显著提升;

Dependencies

~1.5MB
~30K SLoC