hqq

GitHub
925 90 中等 1 次阅读 昨天Apache-2.0开发框架语言模型
AI 解读 由 AI 自动生成,仅供参考

hqq 是半二次量化(Half-Quadratic Quantization)技术的官方实现,专为高效压缩大型人工智能模型而设计。它核心解决了传统量化方法依赖校准数据、耗时较长且兼容性有限的痛点,让用户无需任何校准样本,即可在几分钟内完成对超大语言模型或视觉模型的量化处理。

这款工具非常适合需要部署大模型的开发者、研究人员以及希望降低显存占用的工程团队。hqq 支持从 8 位到极端的 1 位等多种精度选择,并兼容 PyTorch 生态中的 PEFT 微调训练与 torch.compile 加速。其独特的技术亮点在于反量化过程仅为线性运算,这意味着它能无缝对接各类优化的 CUDA/Triton 内核,显著提升推理速度。此外,进阶版本 HQQ+ 还引入了可训练的低秩适配器,进一步提升了低比特下的模型表现。对于追求速度与精度平衡的用户,推荐尝试 4 位精度配合特定分组设置,既能大幅节省显存,又能保持优异的模型质量。

使用场景

某初创团队试图在单张消费级显卡(如 RTX 3090)上部署参数量巨大的多模态大模型,以构建实时的智能客服系统。

没有 hqq 时

  • 显存严重不足:原始模型权重过大,直接加载即导致显存溢出(OOM),无法启动服务。
  • 校准数据缺失:传统量化方法依赖大量代表性校准数据集,团队缺乏此类数据且收集清洗耗时数周。
  • 量化过程缓慢:现有工具对超大模型进行量化往往需要数小时甚至更久,严重拖慢迭代节奏。
  • 精度损失不可控:强行降低位宽(如 4-bit)后,模型在复杂对话中的逻辑推理能力显著下降,回答质量堪忧。

使用 hqq 后

  • 极速低显存部署:hqq 支持无需校准数据的 4-bit 量化,几分钟内即可将模型压缩至单卡显存范围内并成功运行。
  • 零数据依赖:完全跳过校准步骤,直接对任意架构模型(LLM 或视觉模型)进行量化,立即投入使用。
  • 推理速度提升:配合 axis=1 设置与优化的 CUDA 内核,量化后的模型在保持高精度的同时,实现了流畅的实时响应。
  • 灵活精度平衡:通过调整 nbitsgroup_size 参数,团队在不增加显存负担的前提下,微调出了兼顾速度与智能度的最佳配置。

hqq 通过无校准的快速量化技术,让资源受限的团队也能低成本、高效率地落地超大规模 AI 模型。

运行环境要求

操作系统
  • Linux
GPU
  • 必需 NVIDIA GPU
  • 安装需匹配 CUDA 版本(具体版本未说明,需自行对照 PyTorch 2.x 要求)
  • 优化推理后端(如 GemLite)仅支持 axis=1 配置
  • 示例中提到在 RTX 4090 上运行 Llama3-8B 4-bit 模型
内存

未说明

依赖
notes1. 必须安装与当前 CUDA 版本匹配的 PyTorch 2.x 版本。 2. 默认使用 PyTorch 后端,若需禁用 CUDA 内核构建可设置环境变量 DISABLE_CUDA=1。 3. ATEN 后端仅支持 axis=0 配置,而优化的推理后端(GemLite, TorchAO)仅支持 axis=1 配置。 4. 支持 1/2/3/4/8 bit 量化,推荐初始设置为 nbits=4, group_size=64, axis=1。 5. 若使用 vLLM 集成,需预先安装 GemLite 库。 6. 支持 PEFT/LoRA 微调训练。
python未说明
torch>=2.0
transformers
peft
vllm (可选)
gemlite (可选,用于加速)
hqq hero image

快速开始

半二次量化 (HQQ)

本仓库包含我们在以下文章中提出的半二次量化的官方实现:

什么是HQQ?

HQQ 是一种快速且精确的模型量化工具,无需校准数据即可使用。您可以在短短几分钟内对最大规模的模型进行量化,完全不需要校准数据 🚀。

常见问题解答 为什么我应该选择HQQ而不是其他量化方法?
  • HQQ 量化模型的速度非常快。
  • 它支持 8、4、3、2、1 位量化。
  • 您可以将其应用于任何模型(如大语言模型、视觉模型等)。
  • 反量化步骤是一个线性操作,这意味着 HQQ 可以与各种优化的 CUDA/Triton 内核兼容。
  • HQQ 与 PEFT 训练兼容。
  • 我们正在努力使 HQQ 完全兼容 `torch.compile`,以加速推理和训练。

量化后的模型质量如何?
我们针对语言和视觉模型进行了详细的基准测试。请参阅我们的博客文章:HQQHQQ+

量化后的模型运行速度如何?
使用 axis=1 的 4 位模型可以利用优化的融合推理内核。此外,我们正致力于让 HQQ 完全兼容 torch.compile,从而加速训练和推理。更多细节请参阅下方的后端部分。

我应该使用哪些量化设置?
建议从 nbits=4, group_size=64, axis=1 开始。这些设置在质量、显存占用和速度之间提供了良好的平衡。如果您希望在相同显存占用下获得更好的效果,可以切换到 axis=0 并使用 ATEN 后端,但该设置目前不支持快速推理。

axis 参数是什么意思?
axis 参数指定了分组操作沿哪个维度进行。通常情况下,axis=0axis=1 效果更好,尤其是在低比特量化时。然而,目前优化的推理运行时仅支持 axis=1

HQQ 和 HQQ+ 有什么区别?
HQQ+ 是在 HQQ 的基础上加入了可训练的低秩适配器,以提升低比特量化下的模型质量。

安装

首先,请确保您安装的 PyTorch 2 版本与您的 CUDA 版本匹配:https://pytorch.org/

您可以通过以下方式安装 hqq:

# 最新稳定版
pip install hqq;

# 最新更新 - 推荐
pip install git+https://github.com/dropbox/hqq.git;

# 禁用构建 ATEN 后端的 CUDA 内核
DISABLE_CUDA=1 pip install ...

或者,您可以克隆仓库,并在此目录下运行 pip install .

基本用法

要使用 HQQ 进行量化,只需将线性层(torch.nn.Linear)替换为如下代码:

from hqq.core.quantize import *
# 量化配置
quant_config = BaseQuantizeConfig(nbits=4, group_size=64)

# 替换您的线性层
hqq_layer = HQQLinear(your_linear_layer, # torch.nn.Linear 或 None
                      quant_config=quant_config, # 量化配置
                      compute_dtype=torch.float16, # 计算数据类型
                      device='cuda', # CUDA 设备
                      initialize=True, # 使用 False 可稍后再量化
                      del_orig=True # 如果为 True,则删除原始层
                      )

W_r = hqq_layer.dequantize() # 反量化
W_q = hqq_layer.unpack(dtype=torch.uint8) # 解包
y   = hqq_layer(x) # 前向传播

量化参数的设置如下:

  • nbits(整数):支持 8、4、3、2、1 位。
  • group_size(整数):只要 weight.numel() 能被 group_size 整除即可,无限制。
  • view_as_float(布尔值):如果为 True,则将量化后的参数视为浮点数,而非整数类型。

与模型结合使用

Transformers 🤗

关于与 Hugging Face Transformers 结合使用的说明,请参阅 文档中的示例:

from transformers import AutoModelForCausalLM, HqqConfig

# 所有线性层将使用相同的量化配置
quant_config = HqqConfig(nbits=4, group_size=64)

# 加载并量化
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    torch_dtype=torch.float16,
    device_map="cuda",
    quantization_config=quant_config
)

您可以像普通 Transformers 模型一样使用 save_pretrainedfrom_pretrained 来保存和加载量化后的模型。

HQQ 库

您也可以使用 HQQ 库来量化 Transformers 模型:

# 在 CPU 上加载模型
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype=compute_dtype)

# 量化
from hqq.models.hf.base import AutoHQQHFModel
quant_config = BaseQuantizeConfig(nbits=4, group_size=64)
AutoHQQHFModel.quantize_model(model, quant_config=quant_config, compute_dtype=compute_dtype, device=device)

您可以按照以下方式保存和加载量化后的模型:

from hqq.models.hf.base import AutoHQQHFModel

# 保存:务必在任何补丁之前保存模型
AutoHQQHFModel.save_quantized(model, save_dir)

# 以 safetensors 格式保存(可通过 Transformers 或 VLLM 加载)
AutoHQQHFModel.save_to_safetensors(model, save_dir)

# 加载
model = AutoHQQHFModel.from_quantized(save_dir)

❗ 请注意,通过 HQQ 库保存的模型与 .from_pretrained() 不兼容。

后端

原生后端

HQQLinear 模块可以使用以下原生反量化后端:

HQQLinear.set_backend(HQQBackend.PYTORCH)          # PyTorch 后端 - 默认
HQQLinear.set_backend(HQQBackend.PYTORCH_COMPILE)  # 编译后的 PyTorch
HQQLinear.set_backend(HQQBackend.ATEN)             # Aten/CUDA 后端 - 仅支持 axis=0

❗ 注意,HQQBackend.ATEN 仅支持 axis=0

优化推理

我们支持外部后端以实现更快的推理,并采用融合内核。在模型完成量化后,您可以按如下方式启用其中一个后端:

from hqq.utils.patching import prepare_for_inference

# PyTorch 后端,使模型与 fullgraph torch.compile 兼容:适用于任何设置
# prepare_for_inference(model)

# Gemlite 后端:nbits=4/2/1,compute_dtype=float16,axis=1
prepare_for_inference(model, backend="gemlite") 

# Torchao 的 tiny_gemm 后端(batch-size<4 时速度快):nbits=4,compute_dtype=bfloat16,axis=1
# prepare_for_inference(model, backend="torchao_int4")

请注意,这些后端仅适用于 axis=1。此外,根据不同的后端,还存在关于组大小值的额外限制。在 RTX 4090 上,使用 Llama3-8B 的 4 位量化模型时,预计每秒可处理约 158 个 token。

当指定的推理后端不支持某个量化配置时,hqq 将回退到原生后端。

自定义量化配置 ⚙️

您可以通过为每个层名称指定设置,为不同层配置各种量化方案:

Transformers 🤗

# 具有相同标签的每个线性层将使用专用的量化配置
q4_config = {'nbits':4, 'group_size':64}
q3_config = {'nbits':3, 'group_size':32}

quant_config  = HqqConfig(dynamic_config={
  'self_attn.q_proj':q4_config,
  'self_attn.k_proj':q4_config,
  'self_attn.v_proj':q4_config,
  'self_attn.o_proj':q4_config,

  'mlp.gate_proj':q3_config,
  'mlp.up_proj'  :q3_config,
  'mlp.down_proj':q3_config,
})

HQQ 库

from hqq.core.quantize import *
q4_config    = BaseQuantizeConfig(nbits=4, group_size=64) 
q3_config    = BaseQuantizeConfig(nbits=3, group_size=32)

quant_config = {'self_attn.q_proj':q4_config,
  'self_attn.k_proj':q4_config,
  'self_attn.v_proj':q4_config,
  'self_attn.o_proj':q4_config,

  'mlp.gate_proj':q3_config,
  'mlp.up_proj'  :q3_config,
  'mlp.down_proj':q3_config,
}

VLLM

您可以在 vllm 中使用 HQQ。请确保在使用该后端之前安装 GemLite

# 或者您也可以进行在线量化
from hqq.utils.vllm import set_vllm_onthefly_hqq_quant
skip_modules = ['lm_head', 'visual', 'vision']

# 选择以下模式之一:

# INT/FP 格式
set_vllm_onthefly_hqq_quant(weight_bits=8, group_size=None, quant_mode='int8_weightonly', skip_modules=skip_modules) #A16W8 - 仅 INT8 权重
set_vllm_onthefly_hqq_quant(weight_bits=4, group_size=128, quant_mode='int4_weightonly', skip_modules=skip_modules) #A16W4 - 仅 HQQ 权重
set_vllm_onthefly_hqq_quant(weight_bits=8, quant_mode='int8_dynamic', skip_modules=skip_modules) #A8W8 - 动态 INT8 x INT8
set_vllm_onthefly_hqq_quant(weight_bits=8, quant_mode='fp8_dynamic', skip_modules=skip_modules) #A8W8 - 动态 FP8 x FP8

# MXFP 格式
set_vllm_onthefly_hqq_quant(weight_bits=8, group_size=None, quant_mode='mxfp8_dynamic', skip_modules=skip_modules) #A8W8 - MXFP8 x MXPF8 - post_scale=True
set_vllm_onthefly_hqq_quant(weight_bits=8, group_size=32, quant_mode='mxfp8_dynamic', skip_modules=skip_modules) #A8W8 - MXFP8 x MXPF8 - post_scale=False
set_vllm_onthefly_hqq_quant(weight_bits=4, quant_mode='mxfp4_weightonly', skip_modules=skip_modules) #A16W4 - 仅 MXFP4 权重
set_vllm_onthefly_hqq_quant(weight_bits=4, quant_mode='mxfp8_dynamic', skip_modules=skip_modules) #A8W4 - 动态 MXFP8 x MXFP4
set_vllm_onthefly_hqq_quant(weight_bits=4, quant_mode='mxfp4_dynamic', skip_modules=skip_modules) #A4W4 - 动态 MXPF4 x MXPF4
set_vllm_onthefly_hqq_quant(weight_bits=4, quant_mode='nvfp4_dynamic', skip_modules=skip_modules) #A4W4 - 动态 NVFP4 x NVFP4


llm = LLM(model="meta-llama/Llama-3.2-3B-Instruct", max_model_len=4096, gpu_memory_utilization=0.80, dtype=torch.float16)

Peft 训练

Peft 训练在 HuggingFace 的 peft 库中得到直接支持。如果您仍想使用 hqq-lib 的 peft 工具,操作方法如下:

# 首先,量化或加载一个已量化的 HQQ 模型
from hqq.core.peft import PeftUtils

base_lora_params = {'lora_type':'default', 'r':32, 'lora_alpha':64, 'dropout':0.05, 'train_dtype':torch.float32}
lora_params      = {'self_attn.q_proj': base_lora_params,
                    'self_attn.k_proj': base_lora_params,
                    'self_attn.v_proj': base_lora_params,
                    'self_attn.o_proj': base_lora_params,
                    'mlp.gate_proj'   : None,
                    'mlp.up_proj'     : None,
                    'mlp.down_proj'   : None}


# 将 LoRA 添加到线性/HQQ 模块
PeftUtils.add_lora(model, lora_params)

# 可选:设置您的后端
HQQLinear.set_backend(HQQBackend.ATEN if axis==0 else HQQBackend.PYTORCH_COMPILE)

# 开始训练....

# 将 LoRA 权重转换为与模型相同的数据类型,以加快推理速度
model.eval()
PeftUtils.cast_lora_weights(model, dtype=compute_dtype)

# 保存 LoRA 权重
PeftUtils.save_lora_weights(model, filename)

# 加载 LoRA 权重:会自动调用 add_lora
PeftUtils.load_lora_weights(model, filename)

我们提供了一个完整的示例,展示如何使用 HQQ/LoRA 训练模型,您可以在 examples/hqq_plus.py 中找到该示例。

如果您希望通过 FSDP 进行多 GPU 训练,请查看 Answer.AI 提供的优秀仓库:https://github.com/AnswerDotAI/fsdp_qlora

示例

我们在 examples 目录中提供了多种示例,展示了在不同后端上对模型进行量化的过程。

引用 📜

@misc{badri2023hqq,
title  = {大型机器学习模型的半二次量化},
url    = {https://dropbox.github.io/hqq_blog/},
author = {Hicham Badri 和 Appu Shaji},
month  = {十一月},
year   = {2023}

版本历史

v0.2.8.post12025/10/20
v0.2.82025/08/18
0.2.7.post12025/06/12
0.2.72025/06/02
0.2.62025/05/13
v0.2.52025/03/17
0.2.3.post12025/02/20
0.2.32025/02/17
0.2.22024/09/12
0.2.12024/08/29
0.2.02024/08/28
v0.1.82024/07/11
v0.1.7.post32024/05/28
0.1.7.post22024/05/06
0.1.72024/04/24
0.1.6.post22024/03/19
0.1.6.post12024/03/19
0.1.62024/03/19
0.1.52024/03/01
0.1.42024/02/28

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|昨天
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|2天前
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

143.9k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.9k|★★☆☆☆|昨天
开发框架图像Agent

markitdown

MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器

93.4k|★★☆☆☆|昨天
插件开发框架

LLMs-from-scratch

LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备

90.1k|★★★☆☆|昨天
语言模型图像Agent