Bump flashinfer version to 0.6.14 - #47669
Conversation
Signed-off-by: AmeenP <ameenp360@gmail.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 3bc28e653a
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
@AmeenP, can you check the latest from flashinfer-ai/flashinfer#3808 and see how the flashinfer-cubin wheel's index should be updated to correctly download the FlashInfer 0.6.14 cubin wheel? |
Claude Test Result: validated on Hopper (H100) and Blackwell (GB300)Ran vLLM integration + sampler-kernel validation for the 0.6.13 -> 0.6.14 bump on both Hopper — 1x H100, vLLM main @
Blackwell — 1x GB300 NVL72 (SM103, aarch64), torch 2.11.0+cu130
Greedy output is bitwise-identical across 0.6.13 -> 0.6.14 on both architectures, so the bump All three 0.6.14 wheels ( |
|
@mgoin, @pavanimajety can I get this one marked ready |
flashinfer-cubin 0.6.14 is not published to PyPI (per flashinfer maintainers, PyPI is no longer the distribution channel for the cubin package). The requirements/cuda.txt install resolves against PyPI + the PyTorch index only, so pinning flashinfer-cubin==0.6.14 breaks the image build with 'No matching distribution found for flashinfer-cubin==0.6.14'. Add the flashinfer wheel index so cubin resolves for both Docker build stages and plain 'pip install -r requirements/cuda.txt'. Uses the same inline --extra-index-url pattern already present in xpu.txt / build requirements. Signed-off-by: AmeenP <ameen@primeintellect.ai>
The --extra-index-url line in requirements/cuda.txt only fixes the Docker build: setup.py strips option lines when building install_requires, so the published wheel still declares flashinfer-cubin==0.6.14, which is not on PyPI. Source installs, nightly wheels, and the next release would all fail to resolve it. Drop the pin from requirements (flashinfer falls back to fetching cubins at runtime, see vllm/utils/flashinfer.py) and install flashinfer-cubin explicitly from https://flashinfer.ai/whl in the Dockerfile, like flashinfer-jit-cache. A single global FLASHINFER_VERSION ARG drives both stages that previously got cubin from requirements/cuda.txt. Signed-off-by: AmeenP <ameen@primeintellect.ai>
|
Followed the 0.6.14 release-notes install instructions from flashinfer-ai/flashinfer#3808 in b1aac62:
Verified |
| # FlashInfer should be updated together with the Dockerfile | ||
| flashinfer-python==0.6.13 | ||
| flashinfer-cubin==0.6.13 | ||
| # flashinfer-cubin is not on PyPI since 0.6.14; installed in docker/Dockerfile | ||
| flashinfer-python==0.6.14 |
There was a problem hiding this comment.
Can we add the index url for https://flashinfer.ai/whl here for flashinfer-cubin in the requirements file directly?
There was a problem hiding this comment.
Done flashinfer-cubin==0.6.14 is pinned here with `--extra-index-url https://flashinfer.ai/whl/
I think this is cleaner overall, still requires excluding it from setup.py
One addition to make this shape safe: setup.py now excludes
flashinfer-cubinfrominstall_requires(same pattern as the existingvllm-flash-attnskip). setup.py drops--option lines when reading requirements, so without the exclusion the published wheel would pin a package that no longer exists on PyPI (flashinfer is off PyPI for cubin permanently per flashinfer-ai/flashinfer#3808 — project size limit), breakingpip install vllm/pip install -e .while Docker CI stays green. Without the cubin package installed, flashinfer falls back to fetching cubins at runtime (vllm/utils/flashinfer.py::has_flashinfer_cubin).
Per review, pin flashinfer-cubin in requirements/cuda.txt with the flashinfer index instead of installing it in the Dockerfile, and revert the Dockerfile cubin installs. setup.py strips option lines when building install_requires, so the pin alone would ship a wheel depending on a package that is not on PyPI (cubin is served only from https://flashinfer.ai/whl since 0.6.14). Exclude flashinfer-cubin from install_requires, mirroring the existing vllm-flash-attn skip; flashinfer falls back to fetching cubins at runtime when the package is absent. Signed-off-by: AmeenP <ameen@primeintellect.ai>
Claude Test Result: lm-eval-large-models-8xh200 failures are not this PR (reproduced on both flashinfer 0.6.13 and 0.6.14)The DeepSeek-R1-TP / DeepSeek-V3.2-TP GSM8K 0.0000 failures in build 76930 reproduce outside CI and are independent of the flashinfer version. Repro on an idle 8xH200 node using this PR's exact CI test image (
Corroborating points:
So the failing job is a main-side MTP/spec-decode regression that this branch inherited via merges; likely-suspect area is the spec-decode/MTP changes merged 07-06/07-07. Happy to file a separate issue with full logs if useful. |
|
@mgoin Anything else blocking on getting this one in? |
|
Hi @AmeenP, the pre-commit checks have failed. Please run: uv pip install pre-commit>=4.5.1
pre-commit install
pre-commit run --all-filesThen, commit the changes and push to your branch. For future commits, |
flashinfer >= 0.6.14 compiles its GDN CuTeDSL kernels via cute.compile[compile_options](...). The JIT monitor replaced cute.compile (a subscriptable CompileCallable) with a plain wrapper function, so the first GDN prefill on SM90 raised TypeError: 'function' object is not subscriptable and killed the engine (lm-eval-humming-*-h100 and lm-eval-kv-offload-2xh100 in build 77741). Wrap with a delegating class that preserves subscripting and still logs each compilation. Co-authored-by: Claude <noreply@anthropic.com> Signed-off-by: AmeenP <ameen@primeintellect.ai>
+1 — and one correction to the Test PlanA second, independent reason to land this. Beyond the radix top-k sampler wedge: on sm_120 the Repro'd serving GLM-5.2 ( Correction:
|
|
Post-merge heads-up: FlashInfer 0.6.14 has a separate SM103/GB300 NVFP4 MoE hang reported in sglang#30919 and isolated in flashinfer#3971 to the This affects a path vLLM can auto-select for Blackwell NVFP4 MoE. A replacement artifact merged in flashinfer#3973, and the FlashInfer team is targeting a 0.6.15 release for Thursday/Friday. Rather than reverting to 0.6.13, which restores the sampler hang fixed here, we should update to 0.6.15 as soon as it is published and validate the affected GB300 path. |
Purpose
Pick up flashinfer-ai/flashinfer#3615, which fixes the multi-CTA radix top-k sampler stream hang (flashinfer-ai/flashinfer#3610): the kernel's epilogue resets the software barrier's arrival counter with no sync against peer CTAs still polling it, so a peer can spin forever and permanently wedge the stream (GPU pinned at 100% util / low power, no Xid, engine frozen). 0.6.14 is the first release containing the fix; current pin (0.6.13) is affected.
Originally reported on SM120/SM121 (#43885, worked around by #44405), but it is not Blackwell-specific — we hit it in production on H100 serving Qwen models (top_k+top_p are Qwen's defaults, so every request launches this kernel) and can reproduce on Hopper: a
__nanosleepwidening thewait_gepoll gap wedges 0.6.11.post2/0.6.13-era kernels on the first launch, while a #3615 backport survives 50k launches under the same perturbation. See #43885 (comment).With this in, the SM120/121 default-off from #44405 can be revisited.
Test Plan
Version bump only (same file set as #46683). Wheels verified available:
flashinfer-python/flashinfer-cubin0.6.14 on PyPI,flashinfer-jit-cache0.6.14+cu130 on https://flashinfer.ai/whl.Fix validated at the kernel level on H100: stock kernel + widened barrier-poll window = deterministic wedge on first launch; 0.6.14's reset scheme under identical conditions = 50k launches clean with bit-identical top-k masks.
Test Result
See above.