跳到正文
北京时间
原文
蚂蚁 inclusionAI:GitHub 新仓库· inclusionAI·· 2026-02-11精选AI 评分61

inclusionAI 发布高性能量化推理 GEMM 内核库 Humming

inclusionAI/humming

AI 导读

inclusionAI 开源了 Humming,这是一个专为量化推理设计的高性能、轻量级即时编译 GEMM 内核库。它支持在 FP16、BF16、FP8 等多种激活数据类型下进行 8 比特以下任意权重类型的推理,兼容多种量化策略与缩放类型,并同时支持稠密 GEMM 和混合专家 GEMM 运算。该库兼容 SM75+ 及以上的所有 NVIDIA GPU,在多种计算场景下能提供业界领先的吞吐量和效率。其依赖极简,仅需 PyTorch 和 NVCC,软件包大小仅约 100 KB,便于超轻量化部署。

推荐理由

蚂蚁 inclusionAI 开源了一个 100KB 级的量化 GEMM 库,支持从 INT1 到 FP8 全家桶,SM75+ 全覆盖,做推理部署的工程师值得花半小时跑一下 benchmark,看看能不能替换掉现有的 Marlin 方案。

正文 · AI 翻译

Humming 是一个高性能、轻量且高度灵活的 JIT(即时)编译 GEMM 内核库,专为量化推理而设计。

核心特性

  • High Flexibility
    • 支持在 FP16 / BF16 / FP8 / FP4 / INT8 / INT4 激活值下对任何 8 位以下的权重类型进行推理(前提是激活值的动态范围覆盖该权重类型)。
    • 支持多种量化策略。
    • 支持多种 scale 类型(BF16、FP16、E4M3、E5M2 和 UE8M0)。
    • 同时支持 Dense GEMM 和 MoE GEMM。
  • 高兼容性:支持从 SM75+(Turing 架构)及以上的所有 NVIDIA GPU。
  • High Performance
    • 在广泛的计算场景中提供 SOTA(State-of-the-Art)级别的吞吐量和效率。
  • Ultra-Lightweight
    • 极少的依赖:仅需 PyTorch 和 NVCC。
    • 紧凑的体积:包大小仅为 100+KB。

支持矩阵

激活类型 支持的设备 支持的权重类型
FP16(e5m10) SM75+ • 对称 INT1-8
• 带动态零点的 INT1-8
• 任意有符号 FP(kBits ≤ 8,kExp ≤ 5)
BF16(e8m7) SM80+ • 对称 INT1-8
• 带动态零点的 INT1-8
• 任意有符号 FP(kBits ≤ 8)
FP8(e4m3) SM89+ • 对称 INT1-5
• 带动态零点的 INT1-4
• 任意有符号 FP(kExp ≤ 4,kMan ≤ 3)
FP8(e5m2) SM89+ • 对称 INT1-4
• 带动态零点的 INT1-3
• 任意有符号 FP(kExp ≤ 5,kMan ≤ 2)
FP4(e2m1) SM120+ • 对称 INT1-3
• 带动态零点的 INT1-2
• 任意有符号 FP(kExp ≤ 2,kMan ≤ 1)
INT8 SM75+ • 对称 INT1-8
• 带动态零点的 INT1-7
INT4 SM80+ • 对称 INT1-4
• 带动态零点的 INT1-3

快速开始

安装

pip install git+https://github.com/inclusionAI/humming.git

使用示例

import torch
from humming.layer import HummingLayer

layer = HummingLayer(
    shape_n=8192,
    shape_k=8192,
    weight_config={"dtype": "int6"},
    torch_dtype=torch.float16,
).cuda()

weight = torch.randn((8192, 8192), dtype=torch.float16, device="cuda:0")
inputs = torch.randn((128, 8192), dtype=torch.float16, device="cuda:0")

# Load unquantized weight and quantize to layer quantization format
layer.load_from_unquantized(weight)
# Transform weight to humming format and prepare default kernels
layer.transform()

# Run quantized GEMM (tuning_config is optional, auto-selected by default)
output = layer(inputs)

print("Quantized GEMM Output:")
print(output)
print("\nReference Output:")
print(inputs.matmul(weight.T))

致谢

本项目深受以下项目的启发

来源:蚂蚁 inclusionAI:GitHub 新仓库 · github.com