Skip to content

Releases: AppMana/forks-flash-mla-int

flash_mla v2.0.0

Choose a tag to compare

@github-actions github-actions released this 27 Jul 23:12
aarch64 wheel: narrow the gencode matrix, serialize nvcc

The job was OOM-killed ~50 minutes in -- 'The hosted runner lost communication
with the server', no logs uploaded, which is the signature of a terminated
runner rather than a failed compile. The hosted ubuntu-24.04-arm runner is
4 cores / 16 GB and the full 7-gencode matrix with parallel nvcc does not fit.

No aarch64 NVIDIA host ships an sm_80/86/89/120 GPU, so this wheel only needs
Grace-class parts: sm_90 (GH200), sm_100 (GB200), sm_121 (GB10/DGX Spark). The
x86_64 wheels keep the full matrix. MAX_JOBS and NVCC_THREADS drop to 1.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014PzQ5tQQaJazSBhiMuR6KL

Nightly 20260721-052127 (8465684)

Pre-release

Choose a tag to compare

nightly-84656849d05681ae3457bfceb3b0f4354bf60eca

test: bound int8 prefill peak memory by the selection, not the pool

Nightly 20260718-151414 (fdba9cd)

Pre-release

Choose a tag to compare

nightly-fdba9cdf39590f260d531305863c543f8f1b5b82

Remove pre-harmonization kernel name aliases; breaking rename

Nightly 20260718-151211 (b9f8478)

Pre-release

Choose a tag to compare

nightly-b9f847847be56202bd5638d5d141d00173b3cfb5

Harmonize kernel names to appmana roles: sparse_mla_prefill/decode_fp…

Nightly 20260718-151627 (8ec3de6)

Pre-release

Choose a tag to compare

nightly-8ec3de601c18205a146d5496af2a8a1338bd56f7

Bump version to 2.0.0 for the breaking kernel rename

Nightly 20260713-194816 (eb855ae)

Pre-release

Choose a tag to compare

nightly-eb855ae645b615aba4bbca726c6fe0787cbbbe4b

decode: native int8_ds_mla entry (fwd_sparse_int8_decode_mla) via the…

Nightly 20260713-192125 (de88e03)

Pre-release

Choose a tag to compare

nightly-de88e030ee0b30d2c77a0a86c90774cfe21de0cb

wheels: trigger on appmana/vllm-ampere (branch renamed)

Nightly 20260710-003535 (a9738dd)

Pre-release

Choose a tag to compare

Remove the legacy staged sparse-MLA prefill kernel

The staged two-kernel gather+attention prefill path was dead code: the fused
tensor-core kernel (csrc/flash_sparse_mla_prefill_fused_sm80.cu) had already
replaced it as the default, and no production caller reached the staged path
(the vLLM fork calls flash_sparse_mla_prefill without use_staged_prefill, which
always selected fused). It was reported to abort at runtime on torch 2.11 via a
stable-ABI torch_call_dispatcher "aten::new_empty" failure. It is also much
slower at the true 16k footprint, so it is removed outright.

Removed:
- csrc/flash_sparse_mla_prefill_staged_sm80.cu (888 lines) and its setup.py entry.
- The FLASH_MLA_PREFILL_FUSED=0 kill-switch and sparse_mla_prefill_fused_enabled();
  run_sparse_mla_prefill now always runs the fused kernel (fp8 and int8).
- The use_staged_prefill / staged_chunk_tokens kwargs and the Triton/decode
  fallbacks in flash_sparse_mla_prefill (signature otherwise unchanged; no caller
  passed the kwarg -- confirmed in the vLLM fork).
- benchmarks/profile_prefill_stages.py (staged-only) and the staged bench rows.

Renamed to drop the now-misleading "staged" from the prefill ABI:
  torch op  fwd_sparse_prefill_staged_mla       -> fwd_sparse_prefill_mla
  torch op  fwd_sparse_int8_prefill_staged_mla  -> fwd_sparse_int8_prefill_mla
  struct    Sparse_mla_prefill_staged_params    -> Sparse_mla_prefill_params
  python    flash_sparse_mla_prefill_native_staged -> (folded into flash_sparse_mla_prefill)
  python    sparse_int8_mla_prefill_native_staged  -> sparse_int8_mla_prefill

The decode kill-switch FLASH_MLA_DECODE_FUSED=0 is KEPT: the legacy decode kernel
runs correctly on torch 2.11 (tested), so it stays as a useful A/B. Only the
prefill staged path was broken/removed.

vLLM fork caller to update (not touched here): docker/Dockerfile.ampere-flashmla
imports sparse_int8_mla_prefill_native_staged -> sparse_int8_mla_prefill.

Test evidence (RTX A5000 sm_86, torch 2.11.0+cu130, CUDA_VISIBLE_DEVICES=1):
  before (pristine tag build):
    34 passed in 8.25s
  after (staged removed):
    30 passed in 6.52s
  Delta of 4 == the staged-only parametrizations deleted (use_staged True/False):
    test_prefill_adversarial_parity  -2, test_prefill_swa_only_parity -1,
    test_sparse_mla_prefill_two_stream_parity -1. All fused cases stay green.

Fused prefill unchanged at the true 16k footprint (T=1024, ctx 16384, H=64):
  fp8  width 512  : 2.998 ms (2.93 us/tok)
  fp8  width 1024 : 5.258 ms (5.13 us/tok)
  int8 width 1024 : 5.280 ms
Fused vs removed staged, head-to-head (this box):
  width 1024: fused 5.3 ms vs staged 22.2 ms (4.2x)
  width 2048: fused 9.9 ms vs staged 44.8 ms (4.5x)

Nightly 20260709-220002 (a2e2473)

Pre-release

Choose a tag to compare

nightly-a2e2473c230667669bb6786b909129118f55bd3d

decode H6: warp-wide combine -- mlse one-split-per-lane + branchless …

Nightly 20260709-211933 (3d34783)

Pre-release

Choose a tag to compare

nightly-3d347835d6f2301725077065f4689f086a6a82c6

docs: decode 16k-footprint sanity check — no microbench artifact, ALU…