蚂蚁 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))
致谢
本项目深受以下项目的启发
- DeepGEMM
- Marlin Kernel 和 vLLM Marlin Kernel
- lmdeploy GEMM kernel
- CUTLASS
来源:蚂蚁 inclusionAI:GitHub 新仓库 · github.com