Header Ad Placement

Humming Kernel Architecture: JIT-Compiled Quantized GEMMs, One Component Framework for WnA16 Through W4A4, and the End of Per-Format CUDA Silos

GPU KERNELS & INFERENCE SYSTEMS

A systems architecture dissection of Humming, the quantized-inference kernel library open-sourced by Ant Group and the vLLM community on October 21, 2026 and bundled into vLLM 0.29.0: a three-configuration JIT design that compiles specialized kernels from shared components in under two seconds, a unified numeric path spanning INT1 through MXFP4, and community-reported gains of 2x-5x over Marlin, DeepGEMM, and FlashInfer baselines. This analysis decomposes the component architecture, the dequantization-path strategy per device, and what the reported benchmarks actually establish.

By Ossam Hashim - Analysis based on the vLLM project's Humming announcement and the project's public repository.

KEY FINDINGS

What Humming Is and Why It Matters

  • A kernel library, not a kernel: Humming, released by Ant Group and the vLLM community on October 21, 2026, is a general-purpose quantized-GEMM library organized as composable components - numeric processing, memory and compute backends, task scheduling - JIT-compiled per workload instead of shipped as fixed per-format kernels. It ships as a ~500 KB wheel and is a default dependency of vLLM 0.29.0 CUDA installs.
  • Three configurations replace the kernel zoo: a Layer Config (shapes, dtypes, quantization parameters, target architecture), a Compute Config (GEMM type, batch invariance, scale layout), and a Tuning Config (tiles, pipeline stages, warp specialization, MMA instructions, TMA per tensor) describe every kernel; NVRTC or NVCC compiles exactly the needed specialization and caches it.
  • JIT speed is a design feature: in the project's single-kernel W4A16 test on H200 with CUDA 13.4, compilation dropped from 23.35 seconds for CUTLASS with NVCC to 1.82 seconds with Humming, and compiling all M-size variants for one layer's GEMM takes 2-4 seconds during model warmup.
  • Device-matched dequantization: pre-Blackwell GPUs without native MXFP4 Tensor Cores get a fast MXFP4-to-INT8/FP8 in-kernel conversion path, so H200-class hardware runs W4A8-MXFP4 with 4-bit storage benefits; Humming also supports two community-discovered Blackwell Tensor Core formats (float4e0m3, float8e3m4) absent from the PTX type system - and notes Rubin does not support them.
  • Reported performance is substantial but community-run: per the announcement's microbenchmarks and end-to-end tests, Humming reaches roughly 2x Marlin on large-batch W4A16 H200 workloads, about 4.2-4.5x DeepGEMM on W4A8 at small-to-medium batches, and +14-43% end-to-end throughput with -25-32% TTFT serving DeepSeek-V4.1-Flash on eight H20 GPUs. All figures are vendor/community-reported; no independent benchmarking was performed for this analysis.

The Problem: Quantized Inference Outgrew the Handwritten Kernel

Every quantized deployment is a combinatorial commitment: weight format (INT4, MXFP4, NVFP4, FP8), activation precision, GPU architecture, dense versus MoE scheduling, batch regime. The incumbent answer was a library per slice of that space - Marlin for W4A16, DeepGEMM for FP8 MoE, FlashInfer paths for newer formats - each hand-tuned, each aging at its own pace, each carrying its own assumptions about pipelines and scaling. The costs compound twice. Operationally, the best format for a model is often unavailable or slow on the hardware you own. Organizationally, an improvement to a data-movement strategy in one library never reaches the others. Humming's wager is that the combinatorial explosion is a compilation problem, not a handwriting problem: factor the kernel into components, describe each workload with three configurations, and let the compiler assemble the specialization.

Inside the Three-Configuration JIT

The configuration split maps cleanly onto where variation actually lives. Layer Config owns what the model dictates: tensor shapes, data types, quantization parameters, and target architecture. Compute Config owns what the workload dictates: GEMM type (dense, MoE Indexed or Grouped), batch invariance, and input scale layout. Tuning Config owns what the device dictates: tile shapes, pipeline stage counts, warp specialization, memory access patterns, MMA instruction selection, CTA concurrency, and per-tensor TMA use. Device-specific heuristics pick tuning defaults, and Humming can prepare different configurations per input-size range and dispatch at runtime. The batch-size example in the announcement is instructive: at small batches a multistage pipeline around asynchronous copies (cp.async) and MMA can beat a TMA/UMMA pipeline, while at large batches TMA and UMMA win. A fixed kernel must pick one; Humming carries both execution paths in the same component framework and selects per workload. Our FlashAttention-3 warp-specialization dissection covered what those pipeline choices cost and buy at the hardware level - Humming's move is making the choice a configuration instead of a rewrite. At the CUDA level, components divide by source of variation: numeric processing absorbs quantization formats (bit width, integer versus float, scales, zero points) with dequantization fused into the compute loop; memory and compute backends absorb GPU architecture (async copies, TMA, multicast where available); task mapping absorbs dense versus MoE scheduling, with scaling and bias fused into the output stage. JIT compilation then eliminates unused branches, so the specialization cost is paid once, at warmup, in seconds - and an improvement to a shared component propagates to every compatible configuration. This is the same componentization logic our MoE kernel architecture analysis traced inside fused grouped GEMMs, raised to library scope.

The Numeric Path: Where the Cleverness Lives

Two details deserve attention beyond the headline formats. First, the MXFP4 bridge for pre-Blackwell hardware: architectures before Blackwell lack native MXFP4 Tensor Core support, so conventional W4A8-MXFP4 kernels drown in dequantization overhead as M grows. Humming converts MXFP4 weights to a supported INT8/FP8 compute format inside the kernel, which the project reports substantially outperforms conventional W4A8 at small M and approaches W8A8 at large M - 4-bit storage with near-8-bit execution cost on H200-class parts. Second, the zero-exponent trick: Humming supports a floating-point format with zero exponent bits (float8e0m7), whose values match symmetric integers at the same bit width, and automatically converts eligible symmetric integer weights into it for faster dequantization. The announcement also documents two community-uncovered Blackwell Tensor Core formats, float4e0m3 and float8e3m4, that NVIDIA never exposed in PTX - supported across SM100/SM103 and SM120/SM121, with the explicit caveat that Rubin drops them. For format background, our OCP microscaling formats analysis covered the MXFP8/MXFP4 encodings themselves; Humming is where those encodings meet execution.

Reported Benchmarks, Read Carefully

All numbers below come from the vLLM community's announcement benchmarks: GEMM microbenchmarks sweeping M from 1 to 8192 with warmed kernels and cold L2, plus one end-to-end serving test. They are self-reported; treat them as directional.

  • Dense W4A16: roughly 3-4x cuBLAS at small batches on several devices; about 2x Marlin on large-batch H200 workloads; more than 3x Marlin in some B300 cases.
  • MoE W4A16/MXFP4: around 2x Marlin at medium-to-large batches on H20/H200; the Grouped path reaches about 5x on B300 with MXINT4/NVFP4.
  • W4A8 on Hopper: approximately 4.2x DeepGEMM Contiguous on H20 and 4.5x on H200 at small-to-medium batches, converting reduced weight traffic into lower GEMM latency. The announcement notes FlashInfer's CUTLASS W4A8 implementation follows Humming's approach, with Humming ahead in its own benchmarks.
  • Blackwell SM103 MX formats: W8A8, W4A8, W4A4 at roughly 1.25x, 1.6x, and 1.4x DeepGEMM baselines at small-to-medium batches; SM121 gains of about 19% (W4A8) and 9% (W4A4) over FlashInfer CUTLASS at small batches.
  • End to end: serving DeepSeek-V4.1-Flash on eight H20 GPUs with TP=8, switching MoE execution from Marlin W4A16 to Humming W4A8 with unchanged MXFP4 weights yielded +14-43% throughput and -25-32% mean TTFT; at concurrency 64, output throughput rose from 442.37 to 633.94 tokens/s.

The pattern matters more than any single multiplier: the largest gains sit exactly where weight traffic dominates (small-to-medium batches, 4-bit weights), which is where memory-bound inference lives. That is consistent with first principles - our BitNet analysis covered the extreme of this curve - and it is also where independent reproduction is most feasible, since the library is one pip install away.

Architectural Decision Record (ADR): JIT-Composed Kernel Libraries vs Fixed Per-Format Libraries

Decision Context: An inference platform team must choose how to serve quantized models across mixed GPU generations: adopt fixed per-format kernel libraries (Marlin, DeepGEMM, FlashInfer paths) matched case by case, or standardize on a JIT-composed library that generates specializations from shared components. Selection Criteria: Coverage of the format-device matrix your models and hardware actually span, warmup and upgrade cost, the maintenance surface as formats evolve, peak performance per workload, and integration friction with the serving stack. Recommendation: Standardize on the JIT-composed approach when the fleet spans multiple GPU generations or the roadmap includes emerging low-bit formats - Humming's three-configuration design converts each new format-device pairing from a kernel project into a component extension, and its bundling into vLLM 0.29.0 removes integration friction (the --linear-backend and --moe-backend flags select it). Keep a fixed library for a narrow, stable hot path where its specific tuning still wins in your own measurements - the announcement itself shows baseline wins in some large-batch regions. Whichever route, validate on your models and hardware: the reported figures are the authors' benchmarks, on their shapes, with their warmup and cache protocol.

Assumptions and limitations: formats are modeled as raw weight bits plus one 2-byte scale per 128-weight group; zero points, metadata, activation traffic, cache effects, and compute-bound regimes are ignored. Realized speedup depends on pipeline overlap and device bandwidth, so output is a memory-traffic lower bound, not a measured runtime, and is not evidence about Humming's implementation.

Worked Example: Weight-Traffic Ceiling for a 4-Bit GEMM

The Python 3.11+ script below is an illustrative estimator for the mechanism behind Humming's W4A8 gains: at small M a decode GEMM is dominated by weight bytes read, so halving effective weight traffic roughly halves the memory-bound floor. It compares bytes-per-parameter across formats (including a scale-overhead allowance) and prints the implied traffic ratio - a reasoning aid for format selection, not a reproduction of Humming's kernels.

def bytes_per_param(weight_bits, group=128,
                    scale_bytes=2):
    w = weight_bits / 8.0
    s = scale_bytes / group  # per weight
    return w + s

def traffic_ratio(params_b=671.0):
    for bits in (16, 8, 4):
        bpp = bytes_per_param(bits)
        gb = params_b * 1e9 * bpp / 1e9
        print(f"W{bits:<3} {bpp:.3f} B/p"
              f"  {gb:6.1f} GB")
    r = (bytes_per_param(4) /
         bytes_per_param(16))
    print(f"W4/W16 traffic = {r:.2%}")

traffic_ratio()

Assumptions and limitations: formats are modeled as raw weight bits plus one 2-byte scale per 128-weight group; zero points, metadata, activation traffic, cache effects, and compute-bound regimes are ignored. Realized speedup depends on pipeline overlap and device bandwidth, so output is a memory-traffic lower bound, not a measured runtime, and is not evidence about Humming's implementation.

Sources & Provenance

All performance figures are self-reported by the project's announcement benchmarks; no independent benchmarking was performed for this analysis.

Comments

Kernel Engineering Under Physical Non-Idealities: Floorsweeping, Wave-Equalized Launches, and the DVFS Confounder Behind H100 Clustering Gains

GPU SYSTEMS An NUS team shows the H100 you programmed is not the H100 you have: fabrication binning quietly removes whole SMs from cluster reach, and power limits rewrite the speedup math. Accounting for both recovers up to 5.30% on FlashAttention 4. By Ossam Hashim KEY FINDINGS Floorsweeping, the binning step that disables defective silicon to salvage a die, is invisible to the ISA but visible to cluster placement: on the H100 SXM5 it removes GPC-level clustered execution capacity, cutting SMs reachable by clusters from 132 to 124 (paper's measurement). Cluster placement also drifts at runtime: the paper's microbenchmark records only 120 unique SM IDs per kernel iteration but 124 across iterations, so the effective SM budget oscillates launch to launch. Fewer usable SMs can add a full execution wave: a launch that needs one wave at 132 SMs can need two at 120, erasing the data-movement savings DSMEM clustering was supposed to buy. The fix is arithmetic,...

Editorial Governance & Pages