[Dependency] Flashinfer 0.6.8post1 -> 0.6.11 (#24452)

Co-authored-by: b8zhong <b8zhong@users.noreply.github.com>
This commit is contained in:
Brayden Zhong
2026-05-12 14:38:32 -07:00
committed by GitHub
co-authored by b8zhong
parent 48fc26a814
commit d5f3254ed1
7 changed files with 34 additions and 33 deletions
+1 -1
View File
@@ -20,7 +20,7 @@ ARG PIP_DEFAULT_INDEX
ARG UBUNTU_MIRROR ARG UBUNTU_MIRROR
ARG GITHUB_ARTIFACTORY=github.com ARG GITHUB_ARTIFACTORY=github.com
ARG INSTALL_FLASHINFER_JIT_CACHE=0 ARG INSTALL_FLASHINFER_JIT_CACHE=0
ARG FLASHINFER_VERSION=0.6.8.post1 ARG FLASHINFER_VERSION=0.6.11
ARG MOONCAKE_VERSION=0.3.10.post2 ARG MOONCAKE_VERSION=0.3.10.post2
#if need other arg please add in MOONCAKE_COMPILE_ARG #if need other arg please add in MOONCAKE_COMPILE_ARG
ARG MOONCAKE_COMPILE_ARG="-DUSE_HTTP=ON -DUSE_MNNVL=ON -DUSE_CUDA=ON -DWITH_EP=ON" ARG MOONCAKE_COMPILE_ARG="-DUSE_HTTP=ON -DUSE_MNNVL=ON -DUSE_CUDA=ON -DWITH_EP=ON"
+4 -4
View File
@@ -27,8 +27,8 @@ dependencies = [
"datasets", "datasets",
"einops", "einops",
"fastapi", "fastapi",
"flashinfer_python==0.6.8.post1", # keep it aligned with jit-cache version in Dockerfile "flashinfer_python==0.6.11", # keep it aligned with jit-cache version in Dockerfile
"flashinfer_cubin==0.6.8.post1", "flashinfer_cubin==0.6.11",
"gguf", "gguf",
"interegular", "interegular",
"llguidance>=0.7.11,<0.8.0", "llguidance>=0.7.11,<0.8.0",
@@ -37,7 +37,7 @@ dependencies = [
"ninja", "ninja",
"easydict", # Required by remote model code (e.g. DeepSeek-OCR) loaded via trust_remote_code; validated by transformers 5.4+ check_imports "easydict", # Required by remote model code (e.g. DeepSeek-OCR) loaded via trust_remote_code; validated by transformers 5.4+ check_imports
"numpy", "numpy",
"nvidia-cutlass-dsl==4.4.2", "nvidia-cutlass-dsl==4.5.0",
"nvidia-ml-py", "nvidia-ml-py",
"openai-harmony==0.0.4", "openai-harmony==0.0.4",
"openai==2.6.1", "openai==2.6.1",
@@ -53,7 +53,7 @@ dependencies = [
"pydantic", "pydantic",
"python-multipart", "python-multipart",
"pyzmq>=25.1.2", "pyzmq>=25.1.2",
"quack-kernels>=0.3.0", "quack-kernels>=0.4.1",
"requests", "requests",
"scipy", "scipy",
"sentencepiece", "sentencepiece",
+1 -1
View File
@@ -1200,7 +1200,7 @@ def _set_envs_and_config(server_args: ServerArgs):
if server_args.attention_backend == "flashinfer": if server_args.attention_backend == "flashinfer":
assert_pkg_version( assert_pkg_version(
"flashinfer_python", "flashinfer_python",
"0.6.8.post1", "0.6.11",
"Please uninstall the old version and " "Please uninstall the old version and "
"reinstall the latest version by following the instructions " "reinstall the latest version by following the instructions "
"at https://docs.flashinfer.ai/installation.html.", "at https://docs.flashinfer.ai/installation.html.",
@@ -383,6 +383,11 @@ class FlashInferWorkspaceManager:
hidden_dim=hidden_dim, hidden_dim=hidden_dim,
dtype=dtype, dtype=dtype,
force_oneshot_support=bool(use_oneshot), force_oneshot_support=bool(use_oneshot),
# Pin the symmetric-memory rendezvous to the actual
# subgroup. Without this, flashinfer >=0.6.10 falls back
# to WORLD and TP/EP/CP subgroup peers get addressed
# incorrectly (kernel hangs in cuda-graph warmup).
group=device_group,
) )
if ( if (
_TorchDistBackend is not None _TorchDistBackend is not None
@@ -515,8 +520,6 @@ def ensure_workspace_initialized(
if not is_flashinfer_available() or _flashinfer_comm is None: if not is_flashinfer_available() or _flashinfer_comm is None:
return False return False
tp_coordinator = get_tp_group()
if use_attn_tp_group: if use_attn_tp_group:
world_size = get_attn_tensor_model_parallel_world_size() world_size = get_attn_tensor_model_parallel_world_size()
rank = get_attn_tensor_model_parallel_rank() rank = get_attn_tensor_model_parallel_rank()
@@ -531,15 +534,10 @@ def ensure_workspace_initialized(
rank = get_moe_tensor_parallel_rank() rank = get_moe_tensor_parallel_rank()
coordinator = get_moe_tp_group() coordinator = get_moe_tp_group()
# When the sub-group IS the full TP group, pass None so the workspace # Always pass the coordinator's groups: flashinfer >=0.6.10 reads the
# uses the default process group directly (no TorchDistBackend needed). # rendezvous group from `group=...` (falling back to WORLD when None),
# For true sub-groups, use NCCL device_group for GPU/device mapping and # so leaving it None silently rendezvouses on WORLD and the kernel ends
# GLOO cpu_group for metadata broadcasts (avoids NCCL collectives that # up addressing the wrong peers in TP/EP/CP subgroup setups.
# interfere with CUDA graph capture).
if coordinator.device_group is tp_coordinator.device_group:
device_group = None
cpu_group = None
else:
device_group = coordinator.device_group device_group = coordinator.device_group
cpu_group = coordinator.cpu_group cpu_group = coordinator.cpu_group
@@ -34,13 +34,13 @@ try:
enable_pdl: Optional[bool] = None, enable_pdl: Optional[bool] = None,
) -> tuple[torch.Tensor, torch.Tensor]: ) -> tuple[torch.Tensor, torch.Tensor]:
return _flashinfer_fp4_quantize( return _flashinfer_fp4_quantize(
input, input=input,
global_scale, global_scale=global_scale,
sf_vec_size, sf_vec_size=sf_vec_size,
sf_use_ue8m0, sf_use_ue8m0=sf_use_ue8m0,
is_sf_swizzled_layout, is_sf_swizzled_layout=is_sf_swizzled_layout,
is_sf_8x4_layout, is_sf_8x4_layout=is_sf_8x4_layout,
enable_pdl, enable_pdl=enable_pdl,
backend=_flashinfer_fp4_quantize_backend, backend=_flashinfer_fp4_quantize_backend,
) )
+1 -1
View File
@@ -1077,7 +1077,7 @@ def check_pkg_version_at_least(pkg: str, min_version: str) -> bool:
Args: Args:
pkg: Package name (distribution name, e.g., "flashinfer-python") pkg: Package name (distribution name, e.g., "flashinfer-python")
min_version: Minimum version required (e.g., "0.6.8.post1") min_version: Minimum version required (e.g., "0.6.10.post1")
Returns: Returns:
True if package is installed and version >= min_version, False otherwise True if package is installed and version >= min_version, False otherwise
+9 -6
View File
@@ -899,13 +899,14 @@ class TestCuteDslV1(unittest.TestCase):
masked_m.to(hidden_states.device), masked_m.to(hidden_states.device),
) )
a_global_scale = input_global_scale[:1]
a_fp4, a_scale_interleaved = fp4_quantize( a_fp4, a_scale_interleaved = fp4_quantize(
hidden_states, input_global_scale hidden_states, a_global_scale
) )
a_in_dtype = dequantize_nvfp4_to_dtype( a_in_dtype = dequantize_nvfp4_to_dtype(
a_fp4, a_fp4,
a_scale_interleaved, a_scale_interleaved,
input_global_scale, a_global_scale,
dtype=hidden_states.dtype, dtype=hidden_states.dtype,
device=hidden_states.device, device=hidden_states.device,
block_size=16, block_size=16,
@@ -1077,11 +1078,12 @@ class TestCuteDslV1(unittest.TestCase):
masked_m.to(device), masked_m.to(device),
) )
a_fp4, a_scale_interleaved = fp4_quantize(hidden_states, input_global_scale) a_global_scale = input_global_scale[:1]
a_fp4, a_scale_interleaved = fp4_quantize(hidden_states, a_global_scale)
a_in_dtype = dequantize_nvfp4_to_dtype( a_in_dtype = dequantize_nvfp4_to_dtype(
a_fp4, a_fp4,
a_scale_interleaved, a_scale_interleaved,
input_global_scale, a_global_scale,
dtype=hidden_states.dtype, dtype=hidden_states.dtype,
device=device, device=device,
block_size=16, block_size=16,
@@ -1251,11 +1253,12 @@ class TestCuteDslV1(unittest.TestCase):
) )
# PyTorch reference (same as the bf16 input test) # PyTorch reference (same as the bf16 input test)
a_fp4, a_scale = fp4_quantize(hidden_states, input_gs) a_gs = input_gs[:1]
a_fp4, a_scale = fp4_quantize(hidden_states, a_gs)
a_deq = dequantize_nvfp4_to_dtype( a_deq = dequantize_nvfp4_to_dtype(
a_fp4, a_fp4,
a_scale, a_scale,
input_gs, a_gs,
dtype=torch.bfloat16, dtype=torch.bfloat16,
device=device, device=device,
block_size=16, block_size=16,