From 83aea2147fdeb0e203228fbce394b2769bbd4871 Mon Sep 17 00:00:00 2001 From: liuzhenwei Date: Thu, 9 Apr 2026 09:38:16 +0800 Subject: [PATCH 001/199] [XPU][UT] update UTs in CI (#39296) Signed-off-by: zhenwei-intel Signed-off-by: Kunshang Ji Signed-off-by: Kunshang Ji Co-authored-by: Kunshang Ji Co-authored-by: Kunshang Ji --- .buildkite/intel_jobs/test-intel.yaml | 2 +- .buildkite/scripts/hardware_ci/run-xpu-test.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.buildkite/intel_jobs/test-intel.yaml b/.buildkite/intel_jobs/test-intel.yaml index 295840440ad..a05712fd975 100644 --- a/.buildkite/intel_jobs/test-intel.yaml +++ b/.buildkite/intel_jobs/test-intel.yaml @@ -61,4 +61,4 @@ steps: pytest -v -s v1/structured_output && pytest -v -s v1/test_serial_utils.py && pytest -v -s v1/spec_decode --ignore=v1/spec_decode/test_max_len.py --ignore=v1/spec_decode/test_tree_attention.py --ignore=v1/spec_decode/test_speculators_eagle3.py --ignore=v1/spec_decode/test_acceptance_length.py && - pytest -v -s v1/kv_connector/unit --ignore=v1/kv_connector/unit/test_multi_connector.py --ignore=v1/kv_connector/unit/test_nixl_connector.py --ignore=v1/kv_connector/unit/test_example_connector.py --ignore=v1/kv_connector/unit/test_lmcache_integration.py' + pytest -v -s v1/kv_connector/unit --ignore=v1/kv_connector/unit/test_multi_connector.py --ignore=v1/kv_connector/unit/test_example_connector.py --ignore=v1/kv_connector/unit/test_lmcache_integration.py --ignore=v1/kv_connector/unit/test_hf3fs_client.py --ignore=v1/kv_connector/unit/test_hf3fs_connector.py --ignore=v1/kv_connector/unit/test_hf3fs_metadata_server.py' diff --git a/.buildkite/scripts/hardware_ci/run-xpu-test.sh b/.buildkite/scripts/hardware_ci/run-xpu-test.sh index 0467da7c230..6579810e982 100644 --- a/.buildkite/scripts/hardware_ci/run-xpu-test.sh +++ b/.buildkite/scripts/hardware_ci/run-xpu-test.sh @@ -50,6 +50,6 @@ docker run \ pytest -v -s v1/worker --ignore=v1/worker/test_gpu_model_runner.py --ignore=v1/worker/test_worker_memory_snapshot.py pytest -v -s v1/structured_output pytest -v -s v1/spec_decode --ignore=v1/spec_decode/test_max_len.py --ignore=v1/spec_decode/test_tree_attention.py --ignore=v1/spec_decode/test_speculators_eagle3.py --ignore=v1/spec_decode/test_acceptance_length.py - pytest -v -s v1/kv_connector/unit --ignore=v1/kv_connector/unit/test_multi_connector.py --ignore=v1/kv_connector/unit/test_nixl_connector.py --ignore=v1/kv_connector/unit/test_example_connector.py --ignore=v1/kv_connector/unit/test_lmcache_integration.py -k "not (test_register_kv_caches and FLASH_ATTN and True)" + pytest -v -s v1/kv_connector/unit --ignore=v1/kv_connector/unit/test_multi_connector.py --ignore=v1/kv_connector/unit/test_example_connector.py --ignore=v1/kv_connector/unit/test_lmcache_integration.py --ignore=v1/kv_connector/unit/test_hf3fs_client.py --ignore=v1/kv_connector/unit/test_hf3fs_connector.py --ignore=v1/kv_connector/unit/test_hf3fs_metadata_server.py pytest -v -s v1/test_serial_utils.py ' From eb4205fee52dce68f916e1793faec1fa557a014d Mon Sep 17 00:00:00 2001 From: Michael Goin Date: Thu, 9 Apr 2026 03:56:32 +0200 Subject: [PATCH 002/199] [UX] Integrate DeepGEMM into vLLM wheel via CMake (#37980) Signed-off-by: mgoin Signed-off-by: Michael Goin Co-authored-by: Claude --- .gitignore | 3 + CMakeLists.txt | 1 + cmake/external_projects/deepgemm.cmake | 151 ++++++++++++++++++ docker/Dockerfile | 27 +--- docker/versions.json | 3 - .../dockerfile-stages-dependency.png | Bin 332565 -> 322215 bytes setup.py | 29 ++++ .../moe/test_silu_mul_fp8_quant_deep_gemm.py | 8 +- tools/install_deepgemm.sh | 1 + vllm/utils/deep_gemm.py | 54 ++++++- vllm/utils/import_utils.py | 9 +- vllm/v1/worker/gpu_ubatch_wrapper.py | 5 +- 12 files changed, 251 insertions(+), 40 deletions(-) create mode 100644 cmake/external_projects/deepgemm.cmake diff --git a/.gitignore b/.gitignore index 7b822165d3e..2fba003c0b4 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,9 @@ vllm/third_party/triton_kernels/* # FlashMLA interface copied from source vllm/third_party/flashmla/flash_mla_interface.py +# DeepGEMM vendored package built from source +vllm/third_party/deep_gemm/ + # triton jit .triton diff --git a/CMakeLists.txt b/CMakeLists.txt index 2d3b76d2f04..346f13d1459 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1222,6 +1222,7 @@ endif() # For CUDA we also build and ship some external projects. if (VLLM_GPU_LANG STREQUAL "CUDA") + include(cmake/external_projects/deepgemm.cmake) include(cmake/external_projects/flashmla.cmake) include(cmake/external_projects/qutlass.cmake) diff --git a/cmake/external_projects/deepgemm.cmake b/cmake/external_projects/deepgemm.cmake new file mode 100644 index 00000000000..c3a48a64fc7 --- /dev/null +++ b/cmake/external_projects/deepgemm.cmake @@ -0,0 +1,151 @@ +include(FetchContent) + +# If DEEPGEMM_SRC_DIR is set, DeepGEMM is built from that directory +# instead of downloading. +# It can be set as an environment variable or passed as a cmake argument. +# The environment variable takes precedence. +if (DEFINED ENV{DEEPGEMM_SRC_DIR}) + set(DEEPGEMM_SRC_DIR $ENV{DEEPGEMM_SRC_DIR}) +endif() + +if(DEEPGEMM_SRC_DIR) + FetchContent_Declare( + deepgemm + SOURCE_DIR ${DEEPGEMM_SRC_DIR} + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + ) +else() + # This ref should be kept in sync with tools/install_deepgemm.sh + FetchContent_Declare( + deepgemm + GIT_REPOSITORY https://github.com/deepseek-ai/DeepGEMM.git + GIT_TAG 477618cd51baffca09c4b0b87e97c03fe827ef03 + GIT_SUBMODULES "third-party/cutlass" "third-party/fmt" + GIT_PROGRESS TRUE + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + ) +endif() + +# Use FetchContent_Populate (not MakeAvailable) to avoid processing +# DeepGEMM's own CMakeLists.txt which has incompatible find_package calls. +FetchContent_GetProperties(deepgemm) +if(NOT deepgemm_POPULATED) + FetchContent_Populate(deepgemm) +endif() +message(STATUS "DeepGEMM is available at ${deepgemm_SOURCE_DIR}") + +# DeepGEMM requires CUDA 12.3+ for SM90, 12.9+ for SM100 +set(DEEPGEMM_SUPPORT_ARCHS) +if(${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER_EQUAL 12.3) + list(APPEND DEEPGEMM_SUPPORT_ARCHS "9.0a") +endif() +if(${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER_EQUAL 12.9) + list(APPEND DEEPGEMM_SUPPORT_ARCHS "10.0f") +elseif(${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER_EQUAL 12.8) + list(APPEND DEEPGEMM_SUPPORT_ARCHS "10.0a") +endif() + +cuda_archs_loose_intersection(DEEPGEMM_ARCHS + "${DEEPGEMM_SUPPORT_ARCHS}" "${CUDA_ARCHS}") + +if(DEEPGEMM_ARCHS) + message(STATUS "DeepGEMM CUDA architectures: ${DEEPGEMM_ARCHS}") + + find_package(CUDAToolkit REQUIRED) + + # + # Build the _C pybind11 extension from DeepGEMM's C++ source. + # This is a CXX-only module — CUDA kernels are JIT-compiled at runtime. + # + Python_add_library(_deep_gemm_C MODULE WITH_SOABI + "${deepgemm_SOURCE_DIR}/csrc/python_api.cpp") + + # The pybind11 module name must be _C to match DeepGEMM's Python imports. + set_target_properties(_deep_gemm_C PROPERTIES OUTPUT_NAME "_C") + + target_compile_definitions(_deep_gemm_C PRIVATE + "-DTORCH_EXTENSION_NAME=_C") + + target_include_directories(_deep_gemm_C PRIVATE + "${deepgemm_SOURCE_DIR}/csrc" + "${deepgemm_SOURCE_DIR}/deep_gemm/include" + "${deepgemm_SOURCE_DIR}/third-party/cutlass/include" + "${deepgemm_SOURCE_DIR}/third-party/cutlass/tools/util/include" + "${deepgemm_SOURCE_DIR}/third-party/fmt/include") + + target_compile_options(_deep_gemm_C PRIVATE + $<$:-std=c++17> + $<$:-O3> + $<$:-Wno-psabi> + $<$:-Wno-deprecated-declarations>) + + # torch_python is required because DeepGEMM uses pybind11 type casters + # for at::Tensor (via PYBIND11_MODULE), unlike vLLM's own extensions which + # use torch::Library custom ops. + find_library(TORCH_PYTHON_LIBRARY torch_python + PATHS "${TORCH_INSTALL_PREFIX}/lib" + REQUIRED) + + target_link_libraries(_deep_gemm_C PRIVATE + torch ${TORCH_LIBRARIES} "${TORCH_PYTHON_LIBRARY}" + CUDA::cudart CUDA::nvrtc) + + # Install the shared library into the vendored package directory + install(TARGETS _deep_gemm_C + LIBRARY DESTINATION vllm/third_party/deep_gemm + COMPONENT _deep_gemm_C) + + # + # Vendor DeepGEMM Python package files + # + install(FILES + "${deepgemm_SOURCE_DIR}/deep_gemm/__init__.py" + DESTINATION vllm/third_party/deep_gemm + COMPONENT _deep_gemm_C) + + install(DIRECTORY "${deepgemm_SOURCE_DIR}/deep_gemm/utils/" + DESTINATION vllm/third_party/deep_gemm/utils + COMPONENT _deep_gemm_C + FILES_MATCHING PATTERN "*.py") + + install(DIRECTORY "${deepgemm_SOURCE_DIR}/deep_gemm/testing/" + DESTINATION vllm/third_party/deep_gemm/testing + COMPONENT _deep_gemm_C + FILES_MATCHING PATTERN "*.py") + + install(DIRECTORY "${deepgemm_SOURCE_DIR}/deep_gemm/legacy/" + DESTINATION vllm/third_party/deep_gemm/legacy + COMPONENT _deep_gemm_C + FILES_MATCHING PATTERN "*.py") + + # Generate envs.py (normally generated by DeepGEMM's setup.py build step) + file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/deep_gemm_envs.py" + "# Pre-installed environment variables\npersistent_envs = dict()\n") + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/deep_gemm_envs.py" + DESTINATION vllm/third_party/deep_gemm + RENAME envs.py + COMPONENT _deep_gemm_C) + + # + # Install include files needed for JIT compilation at runtime. + # The JIT compiler finds these relative to the package directory. + # + + # DeepGEMM's own CUDA headers + install(DIRECTORY "${deepgemm_SOURCE_DIR}/deep_gemm/include/" + DESTINATION vllm/third_party/deep_gemm/include + COMPONENT _deep_gemm_C) + + # CUTLASS and CuTe headers (vendored for JIT, separate from vLLM's CUTLASS) + install(DIRECTORY "${deepgemm_SOURCE_DIR}/third-party/cutlass/include/" + DESTINATION vllm/third_party/deep_gemm/include + COMPONENT _deep_gemm_C) + +else() + message(STATUS "DeepGEMM will not compile: " + "unsupported CUDA architecture ${CUDA_ARCHS}") + # Create empty target so setup.py doesn't fail on unsupported systems + add_custom_target(_deep_gemm_C) +endif() diff --git a/docker/Dockerfile b/docker/Dockerfile index 6bbd34f9543..a0915f9a708 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -315,7 +315,7 @@ RUN --mount=type=cache,target=/root/.cache/ccache \ #################### CSRC BUILD IMAGE #################### #################### EXTENSIONS BUILD IMAGE #################### -# Build DeepGEMM, DeepEP - runs in PARALLEL with csrc-build +# Build DeepEP - runs in PARALLEL with csrc-build # This stage is independent and doesn't affect csrc cache FROM base AS extensions-build ARG CUDA_VERSION @@ -327,21 +327,6 @@ ENV UV_LINK_MODE=copy WORKDIR /workspace -# Build DeepGEMM wheel -# Default moved here from tools/install_deepgemm.sh for centralized version management -ARG DEEPGEMM_GIT_REF=477618cd51baffca09c4b0b87e97c03fe827ef03 -COPY tools/install_deepgemm.sh /tmp/install_deepgemm.sh -RUN --mount=type=cache,target=/root/.cache/uv \ - mkdir -p /tmp/deepgemm/dist && \ - VLLM_DOCKER_BUILD_CONTEXT=1 TORCH_CUDA_ARCH_LIST="9.0a 10.0a" /tmp/install_deepgemm.sh \ - --cuda-version "${CUDA_VERSION}" \ - ${DEEPGEMM_GIT_REF:+--ref "$DEEPGEMM_GIT_REF"} \ - --wheel-dir /tmp/deepgemm/dist || \ - echo "DeepGEMM build skipped (CUDA version requirement not met)" - -# Ensure the wheel dir exists so COPY won't fail when DeepGEMM is skipped -RUN mkdir -p /tmp/deepgemm/dist && touch /tmp/deepgemm/dist/.deepgemm_skipped - # Build DeepEP wheels COPY tools/ep_kernels/install_python_libraries.sh /tmp/install_python_libraries.sh # Defaults moved here from tools/ep_kernels/install_python_libraries.sh for centralized version management @@ -426,7 +411,6 @@ RUN --mount=type=cache,target=/root/.cache/uv \ python3 setup.py bdist_wheel --dist-dir=dist --py-limited-api=cp38 # Copy extension wheels from extensions-build stage for later use -COPY --from=extensions-build /tmp/deepgemm/dist /tmp/deepgemm/dist COPY --from=extensions-build /tmp/ep_kernels_workspace/dist /tmp/ep_kernels_workspace/dist # Check the size of the wheel if RUN_WHEEL_CHECK is true @@ -693,15 +677,6 @@ RUN --mount=type=cache,target=/root/.cache/uv \ . /etc/environment && \ uv pip list -# Install deepgemm wheel that has been built in the `build` stage -RUN --mount=type=cache,target=/root/.cache/uv \ - --mount=type=bind,from=build,source=/tmp/deepgemm/dist,target=/tmp/deepgemm/dist,ro \ - sh -c 'if ls /tmp/deepgemm/dist/*.whl >/dev/null 2>&1; then \ - uv pip install --system /tmp/deepgemm/dist/*.whl; \ - else \ - echo "No DeepGEMM wheels to install; skipping."; \ - fi' - # Pytorch now installs NVSHMEM, setting LD_LIBRARY_PATH ENV LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH diff --git a/docker/versions.json b/docker/versions.json index 71caab20b0c..625e363f64c 100644 --- a/docker/versions.json +++ b/docker/versions.json @@ -52,9 +52,6 @@ "vllm_target_device": { "default": "cuda" }, - "DEEPGEMM_GIT_REF": { - "default": "477618cd51baffca09c4b0b87e97c03fe827ef03" - }, "DEEPEP_COMMIT_HASH": { "default": "73b6ea4" }, diff --git a/docs/assets/contributing/dockerfile-stages-dependency.png b/docs/assets/contributing/dockerfile-stages-dependency.png index 5ea354f34a0306ff1f6d0fafad20e28e72b771bc..a6b0bf7b8fd472528a45679862947dcf4bf3104f 100644 GIT binary patch literal 322215 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 BwW1FRYcJ5!QD($x;pb;{R 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 L! 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

q?ST1NMAj_{BM>$ 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 aZR&~ro+*Eq{F2O`ptV?ABYdIJq5lU2Bbwg; literal 332565 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

=tOYlv&dR6!7CQOz7H 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%0D9Np17pD$W^binn&~)RR;>D~b=>+cnT>F9 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 z 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.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 Version("12.3") + ): + # DeepGEMM requires CUDA 12.3+ (SM90/SM100) + # Optional since it won't build on unsupported architectures + ext_modules.append(CMakeExtension(name="vllm._deep_gemm_C", optional=True)) if _is_cpu(): import platform @@ -1014,6 +1039,10 @@ package_data = { "entrypoints/serve/instrumentator/static/*.js", "entrypoints/serve/instrumentator/static/*.css", "distributed/kv_transfer/kv_connector/v1/hf3fs/utils/*.cpp", + # DeepGEMM JIT include headers (vendored via cmake) + "third_party/deep_gemm/include/**/*.cuh", + "third_party/deep_gemm/include/**/*.h", + "third_party/deep_gemm/include/**/*.hpp", ] } diff --git a/tests/kernels/moe/test_silu_mul_fp8_quant_deep_gemm.py b/tests/kernels/moe/test_silu_mul_fp8_quant_deep_gemm.py index ed58db62d6d..6a5fad8262c 100644 --- a/tests/kernels/moe/test_silu_mul_fp8_quant_deep_gemm.py +++ b/tests/kernels/moe/test_silu_mul_fp8_quant_deep_gemm.py @@ -14,7 +14,11 @@ from vllm.model_executor.layers.quantization.utils.quant_utils import ( get_fp8_min_max, ) from vllm.platforms import current_platform -from vllm.utils.deep_gemm import DeepGemmQuantScaleFMT, has_deep_gemm +from vllm.utils.deep_gemm import ( + DeepGemmQuantScaleFMT, + has_deep_gemm, + transform_sf_into_required_layout, +) from vllm.utils.math_utils import cdiv, round_up from vllm.utils.torch_utils import set_random_seed @@ -256,8 +260,6 @@ def test_silu_mul_fp8_quant_deep_gemm(E: int, T: int, H: int, fp8_type: torch.dt and current_platform.has_device_capability(100) and scale_fmt == DeepGemmQuantScaleFMT.UE8M0 ): - from deep_gemm import transform_sf_into_required_layout - _q, _s = ref_with_scale_fmt( E, T, diff --git a/tools/install_deepgemm.sh b/tools/install_deepgemm.sh index 0e1adda97b6..9d1edee0472 100755 --- a/tools/install_deepgemm.sh +++ b/tools/install_deepgemm.sh @@ -5,6 +5,7 @@ set -e # Default values +# Keep DEEPGEMM_GIT_REF in sync with cmake/external_projects/deepgemm.cmake DEEPGEMM_GIT_REPO="https://github.com/deepseek-ai/DeepGEMM.git" DEEPGEMM_GIT_REF="477618cd51baffca09c4b0b87e97c03fe827ef03" WHEEL_DIR="" diff --git a/vllm/utils/deep_gemm.py b/vllm/utils/deep_gemm.py index b6a6805a9d2..a2e10ea3951 100644 --- a/vllm/utils/deep_gemm.py +++ b/vllm/utils/deep_gemm.py @@ -138,6 +138,41 @@ _get_mk_alignment_for_contiguous_layout_impl: Callable[..., Any] | None = None _transform_sf_into_required_layout_impl: Callable[..., Any] | None = None +def _import_deep_gemm(): + """Import the deep_gemm module. + + Prefers an externally installed ``deep_gemm`` package (so users can + pin a specific version), then falls back to the vendored copy bundled + in the vLLM wheel. + + Returns ``None`` when neither source is usable. + """ + # 1. Try the external (pip-installed) package first. + try: + module = importlib.import_module("deep_gemm") + logger.debug_once("Imported deep_gemm module from site-packages") + return module + except ImportError: + logger.debug_once( + "deep_gemm not found in site-packages, " + "trying vendored vllm.third_party.deep_gemm" + ) + + # 2. Fall back to the vendored copy bundled in the vLLM wheel. + try: + module = importlib.import_module("vllm.third_party.deep_gemm") + logger.debug_once("Imported deep_gemm module from vllm.third_party.deep_gemm") + return module + except ImportError: + logger.debug_once("Vendored deep_gemm not found either") + except Exception as e: + # The vendored module may raise RuntimeError during _C.init() + # if JIT include files are missing (e.g. incomplete wheel). + logger.warning_once("Failed to import vendored deep_gemm: %s", e) + + return None + + def _lazy_init() -> None: """Import deep_gemm and resolve symbols on first use.""" global _fp8_gemm_nt_impl, _grouped_impl, _grouped_masked_impl @@ -169,7 +204,9 @@ def _lazy_init() -> None: envs.VLLM_CACHE_ROOT, "deep_gemm" ) - _dg = importlib.import_module("deep_gemm") + _dg = _import_deep_gemm() + if _dg is None: + return _fp8_gemm_nt_impl = getattr(_dg, "fp8_gemm_nt", None) _grouped_impl = getattr(_dg, "m_grouped_fp8_gemm_nt_contiguous", None) @@ -193,8 +230,18 @@ def _lazy_init() -> None: def get_num_sms() -> int: _lazy_init() - _dg = importlib.import_module("deep_gemm") - return int(_dg.get_num_sms()) + dg = _import_deep_gemm() + if dg is None: + raise RuntimeError("DeepGEMM is not available") + return int(dg.get_num_sms()) + + +def set_num_sms(num_sms: int) -> None: + _lazy_init() + dg = _import_deep_gemm() + if dg is None: + raise RuntimeError("DeepGEMM is not available") + dg.set_num_sms(num_sms) @functools.cache @@ -446,6 +493,7 @@ __all__ = [ "is_deep_gemm_e8m0_used", "is_deep_gemm_supported", "get_num_sms", + "set_num_sms", "should_use_deepgemm_for_fp8_linear", "get_col_major_tma_aligned_tensor", "get_mk_alignment_for_contiguous_layout", diff --git a/vllm/utils/import_utils.py b/vllm/utils/import_utils.py index b72108b4be6..31b63d1e6b4 100644 --- a/vllm/utils/import_utils.py +++ b/vllm/utils/import_utils.py @@ -408,8 +408,13 @@ def has_deep_ep() -> bool: def has_deep_gemm() -> bool: - """Whether the optional `deep_gemm` package is available.""" - return _has_module("deep_gemm") + """Whether the optional `deep_gemm` package is available. + + Prefers an externally installed ``deep_gemm`` package (so users can + override with a newer version), then falls back to the vendored copy + bundled in the vLLM wheel. + """ + return _has_module("deep_gemm") or _has_module("vllm.third_party.deep_gemm") def has_nixl_ep() -> bool: diff --git a/vllm/v1/worker/gpu_ubatch_wrapper.py b/vllm/v1/worker/gpu_ubatch_wrapper.py index 52faa2e8800..01f18a11948 100644 --- a/vllm/v1/worker/gpu_ubatch_wrapper.py +++ b/vllm/v1/worker/gpu_ubatch_wrapper.py @@ -23,6 +23,7 @@ from vllm.logger import init_logger from vllm.model_executor.offloader.base import get_offloader from vllm.platforms import current_platform from vllm.sequence import IntermediateTensors +from vllm.utils.deep_gemm import set_num_sms as deep_gemm_set_num_sms from vllm.utils.import_utils import has_deep_gemm from vllm.utils.platform_utils import num_compute_units from vllm.v1.worker.ubatching import UBatchContext, make_ubatch_contexts @@ -158,9 +159,7 @@ class UBatchWrapper: # TODO(lucas): support other kernels besides DeepGEMM set_compute_sms = lambda sms: None if has_deep_gemm() and comm_sms > 0: - import deep_gemm as dg - - set_compute_sms = lambda sms: dg.set_num_sms(sms) + set_compute_sms = lambda sms: deep_gemm_set_num_sms(sms) return SMControlContextManager( comm_sms=comm_sms, From 3aecdf08b4a896a92e2cbd11c3d5a83d3c09abc1 Mon Sep 17 00:00:00 2001 From: Dipika Sikka Date: Wed, 8 Apr 2026 21:57:53 -0400 Subject: [PATCH 003/199] [Gemma4] Support quantized MoE (#39045) Signed-off-by: Dipika Sikka --- vllm/model_executor/models/gemma4.py | 48 ++++++++++++++++++++-------- 1 file changed, 34 insertions(+), 14 deletions(-) diff --git a/vllm/model_executor/models/gemma4.py b/vllm/model_executor/models/gemma4.py index 2e9fc681903..c41c0de52b0 100644 --- a/vllm/model_executor/models/gemma4.py +++ b/vllm/model_executor/models/gemma4.py @@ -1248,21 +1248,27 @@ class Gemma4Model(nn.Module): ("gate_up_proj", "up_proj", 1), ] - # MoE expert weight mapping: checkpoint 3D packed tensors are - # exploded in _weight_iterator to per-expert 2D weights like: + # MoE expert weight mapping: checkpoint can have either: + # 1. 3D packed tensors (exploded in _weight_iterator to per-expert 2D) + # 2. Already per-expert 2D weights (if quantized) + # Map to FusedMoE parameters: # moe.experts.{id}.gate_proj → FusedMoE w1 (shard of w13) # moe.experts.{id}.up_proj → FusedMoE w3 (shard of w13) # moe.experts.{id}.down_proj → FusedMoE w2 - # We build the mapping directly since Gemma4 uses bare param - # names (no .weight suffix) unlike standard MoE checkpoints. + # + # Use prefix matching to handle both weights and + # quantization scale parameters. The param_name is a prefix ending + # in underscore, and weight_name ends with a dot, so that: + # "experts.0.gate_proj.weight_scale" -> "experts.w13_weight_scale" + # "experts.0.gate_proj.weight" -> "experts.w13_weight" num_experts = getattr(self.config, "num_experts", None) or 0 expert_params_mapping = [ # (param_name, weight_name, expert_id, shard_id) ( - "experts.w13_weight" + "experts.w13_" if proj_name in ["gate_proj", "up_proj"] - else "experts.w2_weight", - f"experts.{expert_id}.{proj_name}", + else "experts.w2_", + f"experts.{expert_id}.{proj_name}.", expert_id, shard_id, ) @@ -1322,9 +1328,21 @@ class Gemma4Model(nn.Module): expert_id, shard_id, ) in expert_params_mapping: - if weight_name not in name: + # Match both: + # - Bare weights: "experts.0.down_proj" (from 3D explosion) + # - With suffix: "experts.0.down_proj.weight_scale" (2D quantized) + # weight_name has trailing dot, so check with and without it + weight_name_base = weight_name.rstrip(".") + if weight_name in name: + # Has suffix (e.g., .weight_scale) + moe_name = name.replace(weight_name, param_name) + elif name.endswith(weight_name_base): + # Bare weight (no suffix) + moe_name = name.replace( + weight_name_base, param_name.rstrip("_") + "_weight" + ) + else: continue - moe_name = name.replace(weight_name, param_name) if moe_name not in params_dict: continue if is_pp_missing_parameter(moe_name, self): @@ -1334,15 +1352,12 @@ class Gemma4Model(nn.Module): # orientation for FusedMoE after _weight_iterator: # gate/up: [I, H] → w1/w3 expects [I, H] # down: [H, I] → w2 expects [H, I] - assert loaded_weight.dim() == 2, ( - f"Expected 2D expert weight for {weight_name}, " - f"got shape {loaded_weight.shape}" - ) + # Scales and other quantization params may be 1D or scalar. weight_loader = param.weight_loader weight_loader( param, loaded_weight, - weight_name + ".weight", + moe_name, # Pass mapped name (handles both weights and scales) shard_id=shard_id, expert_id=expert_id, ) @@ -1499,6 +1514,11 @@ class Gemma4ForCausalLM(nn.Module, SupportsLoRA, SupportsPP, MixtureOfExperts): ".moe.down_proj", ) + # Remap individual 2D expert weights: + # .experts.{id}.{proj} → .moe.experts.{id}.{proj} + # (This handles per-expert 2D quantized weights) + name = re.sub(r"\.experts\.(\d+)\.", r".moe.experts.\1.", name) + # MoE expert weights: checkpoint stores as 3D packed # tensors. Explode into per-expert 2D weights for # FusedMoE weight_loader. From 2f41d6c0631c75799d40199b1787831f999d2836 Mon Sep 17 00:00:00 2001 From: Ajay Anubolu <124525760+AjAnubolu@users.noreply.github.com> Date: Wed, 8 Apr 2026 19:42:16 -0700 Subject: [PATCH 004/199] [Bugfix] Fix cpu-offload-gb assertion with non-default block sizes (#36461) Signed-off-by: AjAnubolu Signed-off-by: Michael Goin Co-authored-by: Michael Goin --- vllm/v1/worker/gpu_model_runner.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/vllm/v1/worker/gpu_model_runner.py b/vllm/v1/worker/gpu_model_runner.py index a9a4497a3e6..0b85a67f8a0 100644 --- a/vllm/v1/worker/gpu_model_runner.py +++ b/vllm/v1/worker/gpu_model_runner.py @@ -6517,11 +6517,6 @@ class GPUModelRunner( block_sizes != self._init_block_sizes or kernel_block_sizes != self._init_kernel_block_sizes ): - assert self.offload_config.uva.cpu_offload_gb == 0, ( - "Cannot re-initialize the input batch when CPU weight " - "offloading is enabled. See https://github.com/vllm-project/vllm/pull/18298 " # noqa: E501 - "for more details." - ) self._init_block_sizes = block_sizes self._init_kernel_block_sizes = kernel_block_sizes self.input_batch = InputBatch( From 92fbec391b0ae9dff61ddd360ba486f8de5bc53d Mon Sep 17 00:00:00 2001 From: Wei Zhao <51183510+wzhao18@users.noreply.github.com> Date: Wed, 8 Apr 2026 22:42:43 -0400 Subject: [PATCH 005/199] [Bug] Fix routing bias dtype for trtllm per-block fp8 moe (#38989) Signed-off-by: wzhao18 Co-authored-by: Jee Jee Li --- .../layers/fused_moe/experts/trtllm_fp8_moe.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/vllm/model_executor/layers/fused_moe/experts/trtllm_fp8_moe.py b/vllm/model_executor/layers/fused_moe/experts/trtllm_fp8_moe.py index 6f490f00be1..1f0258fb657 100644 --- a/vllm/model_executor/layers/fused_moe/experts/trtllm_fp8_moe.py +++ b/vllm/model_executor/layers/fused_moe/experts/trtllm_fp8_moe.py @@ -358,6 +358,11 @@ class TrtLlmFp8ExpertsMonolithic(TrtLlmFp8ExpertsBase, mk.FusedMoEExpertsMonolit if self.routing_method_type == RoutingMethodType.DeepSeekV3: router_logits = router_logits.to(torch.float32) + # Currently FI requires bfloat16 routing bias. + # https://github.com/flashinfer-ai/flashinfer/issues/2909 + if e_score_correction_bias is not None: + e_score_correction_bias = e_score_correction_bias.to(torch.bfloat16) + is_mxfp8 = self.quant_config.block_shape == [1, 32] if is_mxfp8: fp8_quant_type = Fp8QuantizationType.MxFp8 From d37b378762e44c964ad6993c6e9612102388db4c Mon Sep 17 00:00:00 2001 From: Ilya Boytsov Date: Thu, 9 Apr 2026 04:48:51 +0200 Subject: [PATCH 006/199] [Model] Update ColModernVBERT to support latest HF checkpoint (#39307) Signed-off-by: Ilya Boytsov --- .../multimodal/pooling/test_colmodernvbert.py | 8 --- tests/models/registry.py | 1 - vllm/model_executor/models/colmodernvbert.py | 54 ++----------------- vllm/transformers_utils/config.py | 2 +- .../configs/colmodernvbert.py | 52 +++++++++--------- 5 files changed, 29 insertions(+), 88 deletions(-) diff --git a/tests/models/multimodal/pooling/test_colmodernvbert.py b/tests/models/multimodal/pooling/test_colmodernvbert.py index 6e9dce7ab2e..efeb3195b15 100644 --- a/tests/models/multimodal/pooling/test_colmodernvbert.py +++ b/tests/models/multimodal/pooling/test_colmodernvbert.py @@ -15,10 +15,6 @@ from vllm.entrypoints.pooling.scoring.utils import compute_maxsim_score MODEL_NAME = "ModernVBERT/colmodernvbert-merged" COLBERT_DIM = 128 DTYPE = "half" -# Fixme: -# Update colmodernvbert code to support the latest HF version -# and remove revision set. -REVISION = "4a0a9f3ac7a7992fec410bfa8e3d080ac9a5bcee" # ----------------------------------------------------------------------- @@ -30,7 +26,6 @@ def test_colmodernvbert_text_token_embed(vllm_runner): """Text query produces per-token embeddings with shape (seq_len, 128).""" with vllm_runner( MODEL_NAME, - revision=REVISION, runner="pooling", dtype=DTYPE, enforce_eager=True, @@ -54,7 +49,6 @@ def test_colmodernvbert_text_relevance_ordering(vllm_runner): with vllm_runner( MODEL_NAME, - revision=REVISION, runner="pooling", dtype=DTYPE, enforce_eager=True, @@ -72,7 +66,6 @@ def test_colmodernvbert_text_late_interaction(vllm_runner): with vllm_runner( MODEL_NAME, - revision=REVISION, runner="pooling", dtype=DTYPE, enforce_eager=True, @@ -99,7 +92,6 @@ def test_colmodernvbert_image_token_embed(vllm_runner, image_assets): """Image input produces per-token embeddings including vision tokens.""" with vllm_runner( MODEL_NAME, - revision=REVISION, runner="pooling", dtype=DTYPE, enforce_eager=True, diff --git a/tests/models/registry.py b/tests/models/registry.py index 61f8958d11b..9f2bf5f1a2a 100644 --- a/tests/models/registry.py +++ b/tests/models/registry.py @@ -648,7 +648,6 @@ _LATE_INTERACTION_EXAMPLE_MODELS = { # [Multimodal] "ColModernVBertForRetrieval": _HfExamplesInfo( "ModernVBERT/colmodernvbert-merged", - revision="4a0a9f3ac7a7992fec410bfa8e3d080ac9a5bcee", ), "ColPaliForRetrieval": _HfExamplesInfo("vidore/colpali-v1.3-hf"), "ColQwen3": _HfExamplesInfo( diff --git a/vllm/model_executor/models/colmodernvbert.py b/vllm/model_executor/models/colmodernvbert.py index 1e8477e120e..b16bb4e221d 100644 --- a/vllm/model_executor/models/colmodernvbert.py +++ b/vllm/model_executor/models/colmodernvbert.py @@ -18,7 +18,6 @@ from vllm.config import VllmConfig from vllm.config.multimodal import BaseDummyOptions from vllm.inputs import MultiModalDataDict from vllm.model_executor.layers.pooler.tokwise import pooler_for_token_embed -from vllm.model_executor.model_loader.weight_utils import default_weight_loader from vllm.multimodal import MULTIMODAL_REGISTRY from vllm.multimodal.inputs import ( MultiModalFieldConfig, @@ -358,70 +357,23 @@ class ColModernVBertForRetrieval( "model.text_model.layers.": "text_layers.", "model.text_model.embeddings.": "text_embeddings.", "model.text_model.final_norm.": "text_final_norm.", - "model.connector.modality_projection.": "connector.", + "model.connector.modality_projection.": "connector.proj.", "model.custom_text_proj.": "custom_text_proj.", - "model.vision_model.": "vision_model.vision_model.", + "model.vision_model.vision_model.": "vision_model.vision_model.", "model.": "", }, ) - # Checkpoint names for DecoupledEmbedding parts - _BASE_EMB = "model.text_model.embeddings.tok_embeddings.weight" - _EXTRA_EMB = ( - "model.text_model.embeddings.tok_embeddings.additional_embedding.weight" - ) - def load_weights( self, weights: Iterable[tuple[str, torch.Tensor]], ) -> set[str]: - # DecoupledEmbedding requires concatenating base + additional - # embedding tensors before loading, so we extract them first. - base_embedding_weight: torch.Tensor | None = None - additional_embedding_weight: torch.Tensor | None = None - remaining: list[tuple[str, torch.Tensor]] = [] - - for name, tensor in weights: - if name == self._BASE_EMB: - base_embedding_weight = tensor - elif name == self._EXTRA_EMB: - additional_embedding_weight = tensor - else: - remaining.append((name, tensor)) - - # Load all non-embedding weights via AutoWeightsLoader loader = AutoWeightsLoader(self) loaded_params = loader.load_weights( - remaining, + weights, mapper=self.hf_to_vllm_mapper, ) - # Concatenate and load DecoupledEmbedding weights - if base_embedding_weight is not None: - combined = base_embedding_weight - if additional_embedding_weight is not None: - combined = torch.cat( - [base_embedding_weight, additional_embedding_weight], - dim=0, - ) - param_name = "text_embeddings.tok_embeddings.weight" - params_dict = dict(self.named_parameters()) - if param_name in params_dict: - param = params_dict[param_name] - weight_loader = getattr( - param, - "weight_loader", - default_weight_loader, - ) - weight_loader(param, combined) - loaded_params.add(param_name) - elif additional_embedding_weight is not None: - raise ValueError( - "Found 'text_model.embeddings.tok_embeddings" - ".additional_embedding.weight' but not " - "'text_model.embeddings.tok_embeddings.weight'" - ) - # The pooler wraps ``custom_text_proj`` as its head projector. # Mark those params as loaded under the pooler path too. if hasattr(self, "pooler") and hasattr(self.pooler, "head"): diff --git a/vllm/transformers_utils/config.py b/vllm/transformers_utils/config.py index be031a83af7..68a0411dde2 100644 --- a/vllm/transformers_utils/config.py +++ b/vllm/transformers_utils/config.py @@ -82,7 +82,7 @@ _CONFIG_REGISTRY: dict[str, type[PretrainedConfig]] = LazyConfigDict( bagel="BagelConfig", umm="CheersConfig", chatglm="ChatGLMConfig", - colmodernvbert="ColModernVBertConfig", + modernvbert="ColModernVBertConfig", colpali="ColPaliConfig", colqwen3="ColQwen3Config", ops_colqwen3="OpsColQwen3Config", diff --git a/vllm/transformers_utils/configs/colmodernvbert.py b/vllm/transformers_utils/configs/colmodernvbert.py index 65698073968..17558aafcec 100644 --- a/vllm/transformers_utils/configs/colmodernvbert.py +++ b/vllm/transformers_utils/configs/colmodernvbert.py @@ -17,43 +17,41 @@ class ColModernVBertConfig(PretrainedConfig): def __init__( self, embedding_dim: int = 128, - vlm_config: dict | None = None, + image_token_id: int = 50407, + pixel_shuffle_factor: int = 4, + text_config: dict | None = None, + vision_config: dict | None = None, **kwargs, ): self.embedding_dim = embedding_dim + self.image_token_id = image_token_id + self.pixel_shuffle_factor = pixel_shuffle_factor - if vlm_config is None: - vlm_config = {} + text_config = text_config or {} + self.hidden_size = text_config.get("hidden_size", 768) - # Top-level VLM fields - self.image_token_id = vlm_config.get("image_token_id", 50407) - self.pixel_shuffle_factor = vlm_config.get("pixel_shuffle_factor", 4) - self.hidden_size = vlm_config.get("hidden_size", 768) - additional_vocab_size = vlm_config.get("additional_vocab_size", 40) - - # Text config (ModernBERT) - text_cfg = vlm_config.get("text_config", {}) - base_vocab = text_cfg.get("vocab_size", 50368) self.text_config = ModernBertConfig( - vocab_size=base_vocab + additional_vocab_size, - hidden_size=text_cfg.get("hidden_size", 768), - intermediate_size=text_cfg.get("intermediate_size", 1152), - num_hidden_layers=text_cfg.get("num_hidden_layers", 22), - num_attention_heads=text_cfg.get("num_attention_heads", 12), - mlp_bias=text_cfg.get("mlp_bias", False), - max_position_embeddings=vlm_config.get("max_position_embeddings", 8192), + vocab_size=text_config.get("vocab_size", 50408), + hidden_size=text_config.get("hidden_size", 768), + intermediate_size=text_config.get("intermediate_size", 1152), + num_hidden_layers=text_config.get("num_hidden_layers", 22), + num_attention_heads=text_config.get("num_attention_heads", 12), + mlp_bias=text_config.get("mlp_bias", False), + max_position_embeddings=text_config.get("max_position_embeddings", 8192), ) - # Vision config (SigLIP) - vis_cfg = vlm_config.get("vision_config", {}) + vision_config = vision_config or {} self.vision_config = SiglipVisionConfig( - hidden_size=vis_cfg.get("embed_dim", 768), - image_size=vis_cfg.get("image_size", 512), - patch_size=vis_cfg.get("patch_size", 16), - num_hidden_layers=vis_cfg.get("num_hidden_layers", 12), - intermediate_size=vis_cfg.get("intermediate_size", 3072), - num_attention_heads=vis_cfg.get("num_attention_heads", 12), + hidden_size=vision_config.get("hidden_size", 768), + image_size=vision_config.get("image_size", 512), + patch_size=vision_config.get("patch_size", 16), + num_hidden_layers=vision_config.get("num_hidden_layers", 12), + intermediate_size=vision_config.get("intermediate_size", 3072), + num_attention_heads=vision_config.get("num_attention_heads", 12), ) + + # Ensure architectures is set so vLLM routes to our model class + kwargs.setdefault("architectures", ["ColModernVBertForRetrieval"]) super().__init__(**kwargs) @property From 2a49284c8a24294463518c91b7a1ae402d1b51d1 Mon Sep 17 00:00:00 2001 From: noobHappylife <64898326+noobHappylife@users.noreply.github.com> Date: Thu, 9 Apr 2026 10:50:16 +0800 Subject: [PATCH 007/199] Fix Responses JSON schema alias serialization (#38519) Signed-off-by: noobhappylife Co-authored-by: OpenAI Codex --- .../openai/responses/test_harmony.py | 30 ++++---- .../openai/responses/test_mcp_tools.py | 12 ++-- .../responses/test_serving_responses.py | 72 ++++++++++++++++++- .../openai/responses/api_router.py | 18 +++-- vllm/entrypoints/openai/responses/protocol.py | 2 +- vllm/entrypoints/openai/responses/serving.py | 2 +- 6 files changed, 104 insertions(+), 32 deletions(-) diff --git a/tests/entrypoints/openai/responses/test_harmony.py b/tests/entrypoints/openai/responses/test_harmony.py index 74f3360df45..88dd2d38457 100644 --- a/tests/entrypoints/openai/responses/test_harmony.py +++ b/tests/entrypoints/openai/responses/test_harmony.py @@ -999,17 +999,21 @@ async def test_mcp_tool_multi_turn(client: OpenAI, model_name: str, server): (msg.get("recipient") or "").startswith("python") for msg in response1.output_messages ) + parsed_output_messages = [ + Message.from_dict(msg) for msg in response1.output_messages + ] tool_response_found = any( - msg.get("author", {}).get("role") == "tool" - and (msg.get("author", {}).get("name") or "").startswith("python") - for msg in response1.output_messages + (msg.author.role == "tool" and (msg.author.name or "").startswith("python")) + for msg in parsed_output_messages ) assert tool_call_found, "MCP tool call not found in output_messages" assert tool_response_found, "MCP tool response not found in output_messages" # No developer messages expected for elevated tools developer_msgs = [ - msg for msg in response1.input_messages if msg["author"]["role"] == "developer" + msg + for msg in (Message.from_dict(raw) for raw in response1.input_messages) + if msg.author.role == "developer" ] assert len(developer_msgs) == 0, "No developer message expected for elevated tools" @@ -1119,12 +1123,10 @@ async def test_function_call_with_previous_input_messages( num_system = 0 num_developer = 0 num_tool = 0 - for msg_dict in response_2.input_messages: - # input_messages use {"author": {"role": "..."}} format, - # not the top-level {"role": "..."} that Message.from_dict - # expects. - author = msg_dict.get("author", {}) - role = author.get("role") if isinstance(author, dict) else None + for message in ( + Message.from_dict(msg_dict) for msg_dict in response_2.input_messages + ): + role = message.author.role if role == "system": num_system += 1 elif role == "developer": @@ -1183,12 +1185,8 @@ async def test_system_prompt_override_no_duplication(client: OpenAI, model_name: assert response.output_text is not None num_system = 0 - for msg in response.input_messages: - # input_messages use {"author": {"role": "system"}} format, - # not the top-level {"role": "system"} that Message.from_dict expects. - author = msg.get("author", {}) - role = author.get("role") if isinstance(author, dict) else None - if role == "system": + for message in (Message.from_dict(msg) for msg in response.input_messages): + if message.author.role == "system": num_system += 1 assert num_system == 1, f"Expected 1 system message, got {num_system}" diff --git a/tests/entrypoints/openai/responses/test_mcp_tools.py b/tests/entrypoints/openai/responses/test_mcp_tools.py index 763e2b20855..330d4b9e4bc 100644 --- a/tests/entrypoints/openai/responses/test_mcp_tools.py +++ b/tests/entrypoints/openai/responses/test_mcp_tools.py @@ -7,7 +7,7 @@ from __future__ import annotations import pytest import pytest_asyncio from openai import OpenAI -from openai_harmony import ToolDescription, ToolNamespaceConfig +from openai_harmony import Message, ToolDescription, ToolNamespaceConfig from tests.utils import RemoteOpenAIServer from vllm.entrypoints.mcp.tool_server import MCPToolServer @@ -173,10 +173,10 @@ class TestMCPEnabled: if recipient and recipient.startswith("python"): tool_call_found = True assert message.get("channel") == "commentary" - author = message.get("author", {}) - if author.get("role") == "tool" and (author.get("name") or "").startswith( - "python" - ): + parsed_message = Message.from_dict(message) + if parsed_message.author.role == "tool" and ( + parsed_message.author.name or "" + ).startswith("python"): tool_response_found = True assert message.get("channel") == "commentary" @@ -188,7 +188,7 @@ class TestMCPEnabled: assert tool_response_found, "No Python tool response found" for message in response.input_messages: - assert message.get("author", {}).get("role") != "developer" + assert Message.from_dict(message).author.role != "developer" @pytest.mark.asyncio @pytest.mark.parametrize("model_name", [MODEL_NAME]) diff --git a/tests/entrypoints/openai/responses/test_serving_responses.py b/tests/entrypoints/openai/responses/test_serving_responses.py index 39429cb9bf9..9e2b9a7fcf9 100644 --- a/tests/entrypoints/openai/responses/test_serving_responses.py +++ b/tests/entrypoints/openai/responses/test_serving_responses.py @@ -11,8 +11,12 @@ from openai.types.responses import ( ResponseReasoningItem, ResponseReasoningTextDeltaEvent, ResponseReasoningTextDoneEvent, + ResponseTextConfig, ResponseTextDeltaEvent, ) +from openai.types.responses.response_format_text_json_schema_config import ( + ResponseFormatTextJSONSchemaConfig, +) from openai.types.responses.tool import ( CodeInterpreterContainerCodeInterpreterToolAuto, LocalShell, @@ -28,7 +32,13 @@ from vllm.entrypoints.openai.engine.protocol import ( RequestResponseMetadata, ) from vllm.entrypoints.openai.responses.context import ConversationContext, SimpleContext -from vllm.entrypoints.openai.responses.protocol import ResponsesRequest +from vllm.entrypoints.openai.responses.protocol import ( + ResponseCreatedEvent, + ResponseRawMessageAndToken, + ResponsesRequest, + ResponsesResponse, + serialize_message, +) from vllm.entrypoints.openai.responses.serving import ( OpenAIServingResponses, _extract_allowed_tools_from_mcp_requests, @@ -73,6 +83,16 @@ class MockConversationContext(ConversationContext): pass +def test_serialize_message_pydantic_model_returns_dict() -> None: + msg = ResponseRawMessageAndToken(message="hello", tokens=[1, 2, 3]) + + serialized = serialize_message(msg) + + assert isinstance(serialized, dict) + assert serialized["type"] == "raw_message_tokens" + assert serialized["message"] == "hello" + + @pytest.fixture def mock_serving_responses(): """Create a mock OpenAIServingResponses instance""" @@ -132,6 +152,56 @@ def test_extract_tool_types(monkeypatch: pytest.MonkeyPatch) -> None: } +@pytest.mark.skip_global_cleanup +def test_response_created_event_uses_public_json_schema_alias() -> None: + schema = { + "type": "object", + "properties": { + "event_name": {"type": "string"}, + "date": {"type": "string"}, + "participants": {"type": "array", "items": {"type": "string"}}, + }, + "required": ["event_name", "date", "participants"], + "additionalProperties": False, + } + text = ResponseTextConfig() + text.format = ResponseFormatTextJSONSchemaConfig( + type="json_schema", + name="calendar_event", + schema=schema, + description="A calendar event.", + strict=True, + ) + request = ResponsesRequest( + model="test-model", + input="Alice and Bob are going to a science fair on Friday.", + text=text, + ) + sampling_params = request.to_sampling_params(default_max_tokens=64) + initial_response = ResponsesResponse.from_request( + request=request, + sampling_params=sampling_params, + model_name="test-model", + created_time=0, + output=[], + status="in_progress", + usage=None, + ).model_dump(mode="json", by_alias=True) + + fmt = initial_response["text"]["format"] + assert fmt["schema"] == schema + assert "schema_" not in fmt + + event = ResponseCreatedEvent( + type="response.created", + sequence_number=0, + response=initial_response, + ) + assert event.response.text is not None + assert event.response.text.format is not None + assert event.response.text.format.model_dump(by_alias=True)["schema"] == schema + + class TestInitializeToolSessions: """Test class for _initialize_tool_sessions method""" diff --git a/vllm/entrypoints/openai/responses/api_router.py b/vllm/entrypoints/openai/responses/api_router.py index 88d82126094..61077f1a7c5 100644 --- a/vllm/entrypoints/openai/responses/api_router.py +++ b/vllm/entrypoints/openai/responses/api_router.py @@ -39,7 +39,8 @@ async def _convert_stream_to_sse_events( event_type = getattr(event, "type", "unknown") # https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#event_stream_format event_data = ( - f"event: {event_type}\ndata: {event.model_dump_json(indent=None)}\n\n" + f"event: {event_type}\ndata: " + f"{event.model_dump_json(indent=None, by_alias=True)}\n\n" ) yield event_data @@ -65,10 +66,11 @@ async def create_responses(request: ResponsesRequest, raw_request: Request): if isinstance(generator, ErrorResponse): return JSONResponse( - content=generator.model_dump(), status_code=generator.error.code + content=generator.model_dump(mode="json", by_alias=True), + status_code=generator.error.code, ) elif isinstance(generator, ResponsesResponse): - return JSONResponse(content=generator.model_dump()) + return JSONResponse(content=generator.model_dump(mode="json", by_alias=True)) return StreamingResponse( content=_convert_stream_to_sse_events(generator), media_type="text/event-stream" @@ -95,10 +97,11 @@ async def retrieve_responses( if isinstance(response, ErrorResponse): return JSONResponse( - content=response.model_dump(), status_code=response.error.code + content=response.model_dump(mode="json", by_alias=True), + status_code=response.error.code, ) elif isinstance(response, ResponsesResponse): - return JSONResponse(content=response.model_dump()) + return JSONResponse(content=response.model_dump(mode="json", by_alias=True)) return StreamingResponse( content=_convert_stream_to_sse_events(response), media_type="text/event-stream" ) @@ -115,9 +118,10 @@ async def cancel_responses(response_id: str, raw_request: Request): if isinstance(response, ErrorResponse): return JSONResponse( - content=response.model_dump(), status_code=response.error.code + content=response.model_dump(mode="json", by_alias=True), + status_code=response.error.code, ) - return JSONResponse(content=response.model_dump()) + return JSONResponse(content=response.model_dump(mode="json", by_alias=True)) def attach_router(app: FastAPI): diff --git a/vllm/entrypoints/openai/responses/protocol.py b/vllm/entrypoints/openai/responses/protocol.py index d34ba2d75bb..79f5894fb91 100644 --- a/vllm/entrypoints/openai/responses/protocol.py +++ b/vllm/entrypoints/openai/responses/protocol.py @@ -106,7 +106,7 @@ def serialize_message(msg): return msg.to_dict() else: # fallback to pydantic dump - return msg.model_dump_json(by_alias=True) + return msg.model_dump(mode="json", by_alias=True) def serialize_messages(msgs): diff --git a/vllm/entrypoints/openai/responses/serving.py b/vllm/entrypoints/openai/responses/serving.py index 7edeb8ab0cb..3241e491a6d 100644 --- a/vllm/entrypoints/openai/responses/serving.py +++ b/vllm/entrypoints/openai/responses/serving.py @@ -1909,7 +1909,7 @@ class OpenAIServingResponses(OpenAIServing): output=[], status="in_progress", usage=None, - ).model_dump() + ).model_dump(mode="json", by_alias=True) yield _increment_sequence_number_and_return( ResponseCreatedEvent( type="response.created", From aec18492d0c0d4144ab47b5b7cdbcbc10e6861a6 Mon Sep 17 00:00:00 2001 From: Wentao Ye <44945378+yewentao256@users.noreply.github.com> Date: Wed, 8 Apr 2026 23:06:34 -0400 Subject: [PATCH 008/199] [CI] Fix mypy for `vllm/v1/ops` (#39219) Signed-off-by: yewentao256 --- tools/pre_commit/mypy.py | 2 - vllm/v1/attention/ops/prefix_prefill.py | 4 +- .../v1/attention/ops/rocm_aiter_mla_sparse.py | 44 +++++++++---------- vllm/v1/attention/ops/vit_attn_wrappers.py | 3 ++ 4 files changed, 28 insertions(+), 25 deletions(-) diff --git a/tools/pre_commit/mypy.py b/tools/pre_commit/mypy.py index 1ba1f81564c..41c05efd201 100755 --- a/tools/pre_commit/mypy.py +++ b/tools/pre_commit/mypy.py @@ -36,8 +36,6 @@ SEPARATE_GROUPS = [ EXCLUDE = [ "vllm/model_executor/models", "vllm/model_executor/layers/fla/ops", - # Ignore triton kernels in ops. - "vllm/v1/attention/ops", # TODO: Remove these entries after fixing mypy errors. "vllm/benchmarks", ] diff --git a/vllm/v1/attention/ops/prefix_prefill.py b/vllm/v1/attention/ops/prefix_prefill.py index 13c82f586a3..afa5f517838 100644 --- a/vllm/v1/attention/ops/prefix_prefill.py +++ b/vllm/v1/attention/ops/prefix_prefill.py @@ -4,6 +4,8 @@ # The kernels in this file are adapted from LightLLM's context_attention_fwd: # https://github.com/ModelTC/lightllm/blob/main/lightllm/models/llama/triton_kernel/context_flashattention_nopad.py +from typing import Any + import torch from vllm.platforms import current_platform @@ -780,7 +782,7 @@ def context_attention_fwd( return max_seq_len = 0 if max_seq_len is None else max_seq_len - extra_kargs = {} + extra_kargs: dict[str, Any] = {} if current_platform.is_rocm(): extra_kargs = {} diff --git a/vllm/v1/attention/ops/rocm_aiter_mla_sparse.py b/vllm/v1/attention/ops/rocm_aiter_mla_sparse.py index 9d1da5b53be..886b9410c4b 100644 --- a/vllm/v1/attention/ops/rocm_aiter_mla_sparse.py +++ b/vllm/v1/attention/ops/rocm_aiter_mla_sparse.py @@ -2,6 +2,7 @@ # SPDX-FileCopyrightText: Copyright contributors to the vLLM project import functools import importlib +from importlib.util import find_spec import torch @@ -276,11 +277,9 @@ def fp8_paged_mqa_logits_torch( @functools.lru_cache def paged_mqa_logits_module(): paged_mqa_logits_module_path = None - if importlib.util.find_spec("aiter.ops.triton.pa_mqa_logits") is not None: + if find_spec("aiter.ops.triton.pa_mqa_logits") is not None: paged_mqa_logits_module_path = "aiter.ops.triton.pa_mqa_logits" - elif ( - importlib.util.find_spec("aiter.ops.triton.attention.pa_mqa_logits") is not None - ): + elif find_spec("aiter.ops.triton.attention.pa_mqa_logits") is not None: paged_mqa_logits_module_path = "aiter.ops.triton.attention.pa_mqa_logits" if paged_mqa_logits_module_path is not None: @@ -380,9 +379,9 @@ def fp8_mqa_logits_torch( Returns: Logits tensor of shape [M, N], dtype `torch.float32`. """ - kv, scale = kv - seq_len_kv = kv.shape[0] - k = kv.to(torch.bfloat16) + k_fp8, scale = kv + seq_len_kv = k_fp8.shape[0] + k = k_fp8.to(torch.bfloat16) q = q.to(torch.bfloat16) mask_lo = ( @@ -403,12 +402,9 @@ def fp8_mqa_logits_torch( @functools.lru_cache def mqa_logits_module(): mqa_logits_module_path = None - if importlib.util.find_spec("aiter.ops.triton.fp8_mqa_logits") is not None: + if find_spec("aiter.ops.triton.fp8_mqa_logits") is not None: mqa_logits_module_path = "aiter.ops.triton.fp8_mqa_logits" - elif ( - importlib.util.find_spec("aiter.ops.triton.attention.fp8_mqa_logits") - is not None - ): + elif find_spec("aiter.ops.triton.attention.fp8_mqa_logits") is not None: mqa_logits_module_path = "aiter.ops.triton.attention.fp8_mqa_logits" if mqa_logits_module_path is not None: @@ -455,8 +451,8 @@ def rocm_fp8_mqa_logits( if aiter_mqa_logits_module is not None: fp8_mqa_logits = aiter_mqa_logits_module.fp8_mqa_logits - kv, scale = kv - return fp8_mqa_logits(q, kv, scale, weights, cu_seqlen_ks, cu_seqlen_ke) + k_fp8, scale = kv + return fp8_mqa_logits(q, k_fp8, scale, weights, cu_seqlen_ks, cu_seqlen_ke) else: return fp8_mqa_logits_torch(q, kv, weights, cu_seqlen_ks, cu_seqlen_ke) @@ -523,12 +519,14 @@ def rocm_aiter_sparse_attn_indexer( total_seq_lens, topk_indices_buffer, ) - attn_metadata = attn_metadata[k_cache_prefix] - assert isinstance(attn_metadata, DeepseekV32IndexerMetadata) - slot_mapping = attn_metadata.slot_mapping - has_decode = attn_metadata.num_decodes > 0 - has_prefill = attn_metadata.num_prefills > 0 - num_decode_tokens = attn_metadata.num_decode_tokens + layer_attn_metadata = attn_metadata[k_cache_prefix] + assert isinstance(layer_attn_metadata, DeepseekV32IndexerMetadata) + assert topk_indices_buffer is not None + assert scale_fmt is not None + slot_mapping = layer_attn_metadata.slot_mapping + has_decode = layer_attn_metadata.num_decodes > 0 + has_prefill = layer_attn_metadata.num_prefills > 0 + num_decode_tokens = layer_attn_metadata.num_decode_tokens ops.indexer_k_quant_and_cache( k, @@ -540,7 +538,8 @@ def rocm_aiter_sparse_attn_indexer( topk_indices_buffer[: hidden_states.shape[0]] = -1 if has_prefill: - prefill_metadata = attn_metadata.prefill + prefill_metadata = layer_attn_metadata.prefill + assert prefill_metadata is not None for chunk in prefill_metadata.chunks: k_fp8 = torch.empty( [chunk.total_seq_lens, head_dim], @@ -585,7 +584,8 @@ def rocm_aiter_sparse_attn_indexer( ) if has_decode: - decode_metadata = attn_metadata.decode + decode_metadata = layer_attn_metadata.decode + assert decode_metadata is not None # kv_cache size requirement [num_block, block_size, n_head, head_dim], # we only have [num_block, block_size, head_dim], kv_cache = kv_cache.unsqueeze(-2) diff --git a/vllm/v1/attention/ops/vit_attn_wrappers.py b/vllm/v1/attention/ops/vit_attn_wrappers.py index 6ffe110adaa..2d3505f51b7 100644 --- a/vllm/v1/attention/ops/vit_attn_wrappers.py +++ b/vllm/v1/attention/ops/vit_attn_wrappers.py @@ -292,6 +292,9 @@ def flashinfer_wrapper( # RoPE has already made q and k contiguous. q, k = q.contiguous(), k.contiguous() + assert cu_seqlens is not None + assert max_seqlen is not None + assert sequence_lengths is not None assert len(cu_seqlens) % 2 == 0, "cu_seqlens must be divisible by 2" cu_seqlength = len(cu_seqlens) // 2 batch_offsets_qko = cu_seqlens[:cu_seqlength].view(-1, 1, 1, 1) From ef5a226819e02d0d4a931bcf42b80314076e3629 Mon Sep 17 00:00:00 2001 From: "Chendi.Xue" Date: Wed, 8 Apr 2026 22:19:07 -0500 Subject: [PATCH 009/199] [PD][HeteroArch]Fix accuracy issue with CPU_ATTN as Decoder and Flash_ATTN as prefiller (#38935) Signed-off-by: Chendi Xue --- .../kv_connector/unit/test_nixl_connector.py | 4 ++ .../kv_connector/v1/nixl_connector.py | 49 +++++++++++++++++++ vllm/platforms/cpu.py | 40 +++++++++++++++ 3 files changed, 93 insertions(+) diff --git a/tests/v1/kv_connector/unit/test_nixl_connector.py b/tests/v1/kv_connector/unit/test_nixl_connector.py index f39b78dd2b7..fc199f00602 100644 --- a/tests/v1/kv_connector/unit/test_nixl_connector.py +++ b/tests/v1/kv_connector/unit/test_nixl_connector.py @@ -523,6 +523,7 @@ class FakeNixlConnectorWorker(NixlConnectorWorker): kv_cache_layout="HND", block_size=self.block_size, ssm_sizes=(0, 0), + attn_backend_name=self.backend_name, ), remote_tp_rank=remote_tp_rank, remote_tp_size=remote_tp_size, @@ -972,6 +973,7 @@ class TestNixlHandshake: kv_cache_layout=mismatched_layout, block_size=worker.block_size, ssm_sizes=(0, 0), + attn_backend_name=worker.backend_name, ) with pytest.raises(RuntimeError): @@ -1028,6 +1030,7 @@ class TestNixlHandshake: kv_cache_layout="HND", block_size=worker.block_size, ssm_sizes=(0, 0), + attn_backend_name=worker.backend_name, ) # We don't check layout for homogeneous TP and MLA for now, as the @@ -2347,6 +2350,7 @@ def test_compatibility_hash_validation( kv_cache_layout="HND", block_size=prefill_block_size, ssm_sizes=(0, 0), + attn_backend_name=decode_worker.backend_name, ) handshake_payload = NixlHandshakePayload( compatibility_hash=remote_hash, diff --git a/vllm/distributed/kv_transfer/kv_connector/v1/nixl_connector.py b/vllm/distributed/kv_transfer/kv_connector/v1/nixl_connector.py index c575043fb34..54cf9805b74 100644 --- a/vllm/distributed/kv_transfer/kv_connector/v1/nixl_connector.py +++ b/vllm/distributed/kv_transfer/kv_connector/v1/nixl_connector.py @@ -173,6 +173,7 @@ class NixlAgentMetadata: kv_cache_layout: str block_size: int ssm_sizes: tuple[int, int] + attn_backend_name: str @dataclass @@ -1116,6 +1117,7 @@ class NixlConnectorWorker: self.num_blocks = kv_cache_config.num_blocks self.enable_permute_local_kv = False + self.enable_heterogeneous_attn_post_process = False # KV Caches and nixl tracking data. self.device_type = current_platform.device_type @@ -1776,6 +1778,7 @@ class NixlConnectorWorker: else self.host_buffer_kv_cache_layout, block_size=self.block_size, ssm_sizes=self._mamba_ssm_size, + attn_backend_name=self.backend_name, ) # Wrap metadata in payload with hash for defensive decoding assert self.compat_hash is not None @@ -2369,6 +2372,21 @@ class NixlConnectorWorker: "Or enable experimental feature to use HND to NHD support by " "setting 'enable_permute_local_kv'=True in --kv-transfer-config." ) + # if remote_agent used attn is not same as local, + # hint heterogenuous attn post process + if ( + nixl_agent_meta.attn_backend_name != self.backend_name + and self.backend_name in ["CPU_ATTN"] + ): + if self._is_hma_required: + raise RuntimeError( + "heterogeneous attn post process is not supported with HMA" + ) + logger.info( + "[Experimental] CPU_ATTN backend is used, " + "hint heterogeneous attn post process" + ) + self.enable_heterogeneous_attn_post_process = True # Heterogeneous TP requires head-splitting, which only works with # HND layout. MLA and replicated-KV cases don't split on heads. @@ -2542,6 +2560,28 @@ class NixlConnectorWorker: cache, indices, block_size_ratio ) + def post_process_device_kv_on_receive_heterogeneous_attn( + self, block_ids: list[int] + ): + """ + Post process device kv cache after receiving from remote + for heterogeneous attention. + """ + assert self.enable_heterogeneous_attn_post_process + + indices = torch.tensor(block_ids, device=self.device_type, dtype=torch.long) + + for _, cache_or_caches in self.device_kv_caches.items(): + blocks_to_update = cache_or_caches.index_select(1, indices) + current_platform.pack_kv_cache( + key=blocks_to_update[0], + value=blocks_to_update[1], + key_cache=cache_or_caches[0], + value_cache=cache_or_caches[1], + block_ids=block_ids, + indices=indices, + ) + def get_finished(self) -> tuple[set[str], set[str]]: """ Get requests that are done sending or recving on this specific worker. @@ -2566,6 +2606,7 @@ class NixlConnectorWorker: ) block_ids_for_blocksize_post_process = defaultdict(list) + block_ids_for_heterogeneous_attn_post_process = list[list[int]]() for req_id in done_recving: # clean up metadata for completed requests meta = self._recving_metadata.pop(req_id, None) @@ -2585,12 +2626,20 @@ class NixlConnectorWorker: block_ids_for_blocksize_post_process[block_size_ratio].append( meta.local_physical_block_ids[0] ) + # post processing for heterogeneous attention + if self.enable_heterogeneous_attn_post_process: + block_ids_for_heterogeneous_attn_post_process.append( + meta.local_physical_block_ids[0] + ) for ( block_size_ratio, block_ids_list, ) in block_ids_for_blocksize_post_process.items(): self.post_process_device_kv_on_receive(block_size_ratio, block_ids_list) + for block_ids in block_ids_for_heterogeneous_attn_post_process: + self.post_process_device_kv_on_receive_heterogeneous_attn(block_ids) + # Handle timeout to avoid stranding blocks on remote. now = time.perf_counter() while self._reqs_to_send: diff --git a/vllm/platforms/cpu.py b/vllm/platforms/cpu.py index cd6c093ce89..b181854722c 100644 --- a/vllm/platforms/cpu.py +++ b/vllm/platforms/cpu.py @@ -520,3 +520,43 @@ class CpuPlatform(Platform): import vllm._C # noqa: F401 except ImportError as e: logger.warning("Failed to import from vllm._C: %r", e) + + @classmethod + def pack_kv_cache( + cls, + key: torch.Tensor, + value: torch.Tensor, + key_cache: torch.Tensor, + value_cache: torch.Tensor, + block_ids: list[int], + indices: torch.Tensor, + ) -> None: + """ + Rewrite the kv cache shape for the current platform. + """ + # Import lazily: cpu_attn pulls in _custom_ops, which needs a fully + # initialized vllm.platforms (avoid circular import while CpuPlatform loads). + from vllm._custom_ops import cpu_attn_reshape_and_cache + from vllm.v1.attention.backends.cpu_attn import _get_attn_isa + + dtype = key.dtype + # For CPU_ATTN, the shape is [N, num_kv_heads, block_size, head_size] + _, _, block_size, head_size = key_cache.shape + key = key.permute(0, 2, 1, 3).flatten(0, 1) + value = value.permute(0, 2, 1, 3).flatten(0, 1) + + isa = _get_attn_isa(dtype, block_size, head_size) + block_offsets = torch.arange(block_size, device="cpu", dtype=torch.long) + num_blocks = len(block_ids) + slot_mapping = ( + block_offsets.reshape(1, block_size) + + indices.reshape(num_blocks, 1) * block_size + ).flatten() + cpu_attn_reshape_and_cache( + key, + value, + key_cache, + value_cache, + slot_mapping, + isa, + ) From 2e98406048798c45eb623360de2b46825ef74848 Mon Sep 17 00:00:00 2001 From: Yongye Zhu Date: Wed, 8 Apr 2026 23:49:15 -0400 Subject: [PATCH 010/199] [Refactor] Improve indexer decode path metadata preparation (#38865) --- csrc/sampler.cu | 33 ++- csrc/topk.cu | 6 +- .../layers/sparse_attn_indexer.py | 23 +- vllm/v1/attention/backends/mla/indexer.py | 202 +++++++++++------- 4 files changed, 162 insertions(+), 102 deletions(-) diff --git a/csrc/sampler.cu b/csrc/sampler.cu index 2e76873c8f1..c0cc03a08ad 100644 --- a/csrc/sampler.cu +++ b/csrc/sampler.cu @@ -564,8 +564,9 @@ template static __global__ __launch_bounds__(kNumThreadsPerBlock) void topKPerRowDecode( const float* logits, const int* seqLens, int* outIndices, int stride0, - int stride1, const int topK, int next_n, float* outLogits = nullptr, - const int numBlocksToMerge = 0, const int* indices = nullptr) { + int stride1, const int topK, int next_n, int seqLensIs2D = 0, + float* outLogits = nullptr, const int numBlocksToMerge = 0, + const int* indices = nullptr) { // The number of bins in the histogram. static constexpr int kNumBins = 2048; @@ -574,8 +575,16 @@ static __global__ __launch_bounds__(kNumThreadsPerBlock) void topKPerRowDecode( // The range of logits within the row. int rowStart = 0; - int seq_len = seqLens[rowIdx / next_n]; - int rowEnd = max(0, seq_len - next_n + (rowIdx % next_n) + 1); + int batch_idx = rowIdx / next_n; + int next_n_idx = rowIdx % next_n; + // seqLensIs2D=0: 1D seqLens — all rows in a batch share the same seq_len; + // kernel computes per-row effective length via offset. + // seqLensIs2D=1: 2D seqLens — each logit row has its own pre-computed + // effective length (flat index rowIdx = b*next_n + j maps + // directly to seqLens[b, j] in C-contiguous layout). + int seq_len = seqLensIs2D ? seqLens[rowIdx] : seqLens[batch_idx]; + int rowEnd = + seqLensIs2D ? max(0, seq_len) : max(0, seq_len - next_n + next_n_idx + 1); // Local pointers to this block if constexpr (!multipleBlocksPerRow && !mergeBlocks) { @@ -653,6 +662,11 @@ void top_k_per_row_decode(const torch::Tensor& logits, int64_t next_n, const cudaStream_t stream = at::cuda::getCurrentCUDAStream(); const auto numColumns = logits.size(1); + // True if seqLens is 2D (B, next_n): each logit row has its own pre-computed + // effective seq_len. False if seqLens is 1D (B,): all rows in a batch share + // the same seq_len and the kernel computes the per-row offset itself. + int seqLensIs2D = seqLens.dim() == 2 ? 1 : 0; + if (numColumns < kSortingAlgorithmThreshold) { // Use insertion sort vllm::topKPerRowDecode @@ -660,7 +674,7 @@ void top_k_per_row_decode(const torch::Tensor& logits, int64_t next_n, logits.data_ptr(), seqLens.data_ptr(), indices.data_ptr(), static_cast(stride0), static_cast(stride1), static_cast(topK), - static_cast(next_n)); + static_cast(next_n), seqLensIs2D); } else if (numColumns < kSplitWorkThreshold) { // From this threshold, use radix sort instead vllm::topKPerRowDecode @@ -668,7 +682,7 @@ void top_k_per_row_decode(const torch::Tensor& logits, int64_t next_n, logits.data_ptr(), seqLens.data_ptr(), indices.data_ptr(), static_cast(stride0), static_cast(stride1), static_cast(topK), - static_cast(next_n)); + static_cast(next_n), seqLensIs2D); } else { // Long sequences are run in two steps constexpr auto multipleBlocksPerRowConfig = 10; @@ -686,15 +700,16 @@ void top_k_per_row_decode(const torch::Tensor& logits, int64_t next_n, logits.data_ptr(), seqLens.data_ptr(), outIndicesAux.data_ptr(), static_cast(stride0), static_cast(stride1), static_cast(topK), - static_cast(next_n), outLogitsAux.data_ptr()); + static_cast(next_n), seqLensIs2D, + outLogitsAux.data_ptr()); constexpr int kNumThreadsPerBlockMerge = 1024; vllm::topKPerRowDecode <<>>( outLogitsAux.data_ptr(), seqLens.data_ptr(), indices.data_ptr(), multipleBlocksPerRowConfig * topK, 1, - static_cast(topK), static_cast(next_n), nullptr, - multipleBlocksPerRowConfig, outIndicesAux.data_ptr()); + static_cast(topK), static_cast(next_n), seqLensIs2D, + nullptr, multipleBlocksPerRowConfig, outIndicesAux.data_ptr()); } } diff --git a/csrc/topk.cu b/csrc/topk.cu index 402b64b027a..f48e7cbc4fc 100644 --- a/csrc/topk.cu +++ b/csrc/topk.cu @@ -21,13 +21,15 @@ void persistent_topk(const torch::Tensor& logits, const torch::Tensor& lengths, TORCH_CHECK(lengths.dtype() == torch::kInt32, "lengths must be int32"); TORCH_CHECK(output.dtype() == torch::kInt32, "output must be int32"); TORCH_CHECK(logits.dim() == 2, "logits must be 2D"); - TORCH_CHECK(lengths.dim() == 1, "lengths must be 1D"); + TORCH_CHECK(lengths.dim() == 1 || lengths.dim() == 2, + "lengths must be 1D or 2D"); + TORCH_CHECK(lengths.is_contiguous(), "lengths must be contiguous"); TORCH_CHECK(output.dim() == 2, "output must be 2D"); const int64_t num_rows = logits.size(0); const int64_t stride = logits.size(1); - TORCH_CHECK(lengths.size(0) == num_rows, "lengths size mismatch"); + TORCH_CHECK(lengths.numel() == num_rows, "lengths size mismatch"); TORCH_CHECK(output.size(0) == num_rows && output.size(1) == k, "output size mismatch"); namespace P = vllm::persistent; diff --git a/vllm/model_executor/layers/sparse_attn_indexer.py b/vllm/model_executor/layers/sparse_attn_indexer.py index 1844b75561e..9e1cd19a04e 100644 --- a/vllm/model_executor/layers/sparse_attn_indexer.py +++ b/vllm/model_executor/layers/sparse_attn_indexer.py @@ -183,13 +183,15 @@ def sparse_attn_indexer( # TODO: move and optimize below logic with triton kernels batch_size = padded_q_fp8_decode_tokens.shape[0] next_n = padded_q_fp8_decode_tokens.shape[1] - assert batch_size == decode_metadata.seq_lens.shape[0] num_padded_tokens = batch_size * next_n + seq_lens = decode_metadata.seq_lens[:batch_size] + # seq_lens is (B, next_n) for native spec decode, (B,) otherwise. + # fp8_paged_mqa_logits and all topk kernels accept both shapes. logits = fp8_paged_mqa_logits( padded_q_fp8_decode_tokens, kv_cache, weights[:num_padded_tokens], - decode_metadata.seq_lens, + seq_lens, decode_metadata.block_table, decode_metadata.schedule_metadata, max_model_len=max_model_len, @@ -198,17 +200,6 @@ def sparse_attn_indexer( num_rows = logits.shape[0] topk_indices = topk_indices_buffer[:num_padded_tokens, :topk_tokens] - if next_n == 1: - lengths = decode_metadata.seq_lens - else: - # (bs,) -> (bs, 1) + (next_n,) -> (bs, next_n) -> (bs * next_n,) - lengths = ( - decode_metadata.seq_lens.unsqueeze(1) - - next_n - + 1 - + decode_metadata.offsets - ).flatten() - if current_platform.is_cuda(): workspace_manager = current_workspace_manager() (topk_workspace,) = workspace_manager.get_simultaneous( @@ -216,7 +207,7 @@ def sparse_attn_indexer( ) torch.ops._C.persistent_topk( logits, - lengths, + decode_metadata.seq_lens, topk_indices, topk_workspace, topk_tokens, @@ -227,7 +218,7 @@ def sparse_attn_indexer( ops.top_k_per_row_decode( logits, next_n, - decode_metadata.seq_lens, + seq_lens, topk_indices, num_rows, logits.stride(0), @@ -238,7 +229,7 @@ def sparse_attn_indexer( torch.ops._C.top_k_per_row_decode( logits, next_n, - decode_metadata.seq_lens, + seq_lens, topk_indices, num_rows, logits.stride(0), diff --git a/vllm/v1/attention/backends/mla/indexer.py b/vllm/v1/attention/backends/mla/indexer.py index 5cb4b46a734..402dfc0c74f 100644 --- a/vllm/v1/attention/backends/mla/indexer.py +++ b/vllm/v1/attention/backends/mla/indexer.py @@ -141,11 +141,14 @@ class DeepseekV32IndexerPrefillMetadata: @dataclass class DeepSeekV32IndexerDecodeMetadata: block_table: torch.Tensor + # seq_lens: per-token effective context lengths. + # - flatten path / plain decode: 1D (batch_size,) + # - native MTP path: 2D (B, next_n) where [b,j] = L_b - next_n + j + 1 + # Both fp8_paged_mqa_logits and the topk kernels accept both shapes. seq_lens: torch.Tensor decode_lens: torch.Tensor requires_padding: bool schedule_metadata: torch.Tensor - offsets: torch.Tensor | None # Precomputed offsets for speculative decoding @dataclass @@ -283,21 +286,31 @@ class DeepseekV32IndexerMetadataBuilder(AttentionMetadataBuilder): sm_count = num_compute_units(self.device.index) self.num_sms = sm_count - self.decode_lens_buffer = torch.empty( - (scheduler_config.max_num_batched_tokens,), - dtype=torch.int32, - device=self.device, - ) self.offsets_buffer = torch.arange( next_n, device=self.device, dtype=torch.int32 ) - self.arange_buffer = torch.arange( - scheduler_config.max_num_seqs * next_n, + self.decode_lens_buffer = torch.zeros( + (scheduler_config.max_num_batched_tokens,), dtype=torch.int32, device=self.device, ) - self.expanded_seq_lens_buffer = torch.zeros( - (scheduler_config.max_num_batched_tokens,), + if not self.use_flattening and next_n > 1: + # Native MTP: 2D buffer for per-token seq_lens. + # Flattening path is never used, so no expanded_seq_lens_buffer. + self.decode_seq_lens_buffer = torch.zeros( + (scheduler_config.max_num_seqs, next_n), + dtype=torch.int32, + device=self.device, + ) + else: + # Flattening or no MTP: 1D buffer for expanded per-token seq_lens. + self.decode_seq_lens_buffer = torch.zeros( + (scheduler_config.max_num_batched_tokens,), + dtype=torch.int32, + device=self.device, + ) + self.arange_buffer = torch.arange( + scheduler_config.max_num_seqs * next_n, dtype=torch.int32, device=self.device, ) @@ -367,6 +380,96 @@ class DeepseekV32IndexerMetadataBuilder(AttentionMetadataBuilder): skip_kv_gather=skip_kv_gather, ) + def _prepare_decode_tensors( + self, + seq_lens: torch.Tensor, + block_table: torch.Tensor, + decode_lens: torch.Tensor, + decode_lens_cpu: torch.Tensor, + query_start_loc: torch.Tensor, + num_decodes: int, + num_decode_tokens: int, + use_native: bool, + next_n: int, + max_decode_len: int, + ) -> tuple[torch.Tensor, torch.Tensor, torch.Tensor, int, bool]: + """Expand seq_lens/block_table/decode_lens for the decode kernels. + + Flatten path (not use_native, max_decode_len > 1): + Each multi-token decode request is expanded into individual + single-token entries so the kernel always sees next_n=1. + + Native path (use_native or max_decode_len == 1): + Plain decode or spec-decode with 2D per-token context lengths. + + Returns (seq_lens, block_table, decode_lens, batch_size, requires_padding). + seq_lens is 1D (batch_size,) for flatten/plain, 2D (B, next_n) for native MTP. + """ + if not use_native and max_decode_len > 1: + assert self.decode_seq_lens_buffer.dim() == 1 + # Assume 4 requests with seq_lens [10, 7, 12, 0] (the final req is + # padding) and decode_lens [3, 1, 4, 0] in the below example comments. + # The context lengths are therefore + # [10-3, 7-1, 12-4, 0-0] = [7, 6, 8, 0]. + + # 3 + 1 + 4 + 0 = 8 + actual_expanded = int(decode_lens_cpu.sum().item()) + + # Fuse expanded_base and expanded_starts into a single repeat_interleave: + # seq_len_i = (context_start[b] - query_start_loc[b]) + arange[i] + 1 + # where context_start[b] = seq_lens[b] - decode_lens[b]. + # Example: offsets = [7-0, 6-3, 8-4, 0-8] = [7, 3, 4, -8] + # expanded_offsets = [7, 7, 7, 3, 4, 4, 4, 4] + # result = [8, 9, 10, 7, 9, 10, 11, 12] + expanded_offsets = torch.repeat_interleave( + seq_lens - decode_lens - query_start_loc, + decode_lens, + output_size=actual_expanded, + ) + + # [8, 9, 10, 7, 9, 10, 11, 12, ...] where ... is unused buffer space + self.decode_seq_lens_buffer[:actual_expanded] = ( + expanded_offsets + self.arange_buffer[:actual_expanded] + 1 + ) + self.decode_seq_lens_buffer[actual_expanded:] = 0 + seq_lens = self.decode_seq_lens_buffer[:num_decode_tokens] + + # Give each of the flattened entries the same block table row as the + # original request. + self.expanded_block_table_buffer[:actual_expanded] = ( + torch.repeat_interleave( + block_table, decode_lens, dim=0, output_size=actual_expanded + ) + ) + if actual_expanded < num_decode_tokens: + self.expanded_block_table_buffer[ + actual_expanded:num_decode_tokens, 0 + ] = 0 + block_table = self.expanded_block_table_buffer[:num_decode_tokens] + + # All reqs now have decode_len=1 + self.decode_lens_buffer[:num_decode_tokens] = 1 + decode_lens = self.decode_lens_buffer[:num_decode_tokens] + return seq_lens, block_table, decode_lens, num_decode_tokens, False + else: + # Native path: plain decode (next_n==1) or spec decode + # with 2D per-token context lengths (next_n > 1). + # + # When decode_lens are not truly uniform (e.g. some requests have + # decode_len < next_n due to padding or short prefills), the simple + # reshape in sparse_attn_indexer won't work. Use pack_seq_triton + # (requires_padding) instead. + min_decode_len = int(decode_lens_cpu.min().item()) + requires_padding = min_decode_len != max_decode_len + if use_native and next_n > 1: + assert self.decode_seq_lens_buffer.dim() == 2 + # (B, next_n): token j attends to L - next_n + j + 1 KV tokens + self.decode_seq_lens_buffer[:num_decodes] = ( + seq_lens.unsqueeze(1) - next_n + 1 + self.offsets_buffer + ) + seq_lens = self.decode_seq_lens_buffer[:num_decodes] + return seq_lens, block_table, decode_lens, num_decodes, requires_padding + def build( self, common_prefix_len: int, @@ -434,68 +537,20 @@ class DeepseekV32IndexerMetadataBuilder(AttentionMetadataBuilder): next_n = 1 + self.num_speculative_tokens use_native = not self.use_flattening and max_decode_len == next_n - if use_native and next_n > 1: - offsets = self.offsets_buffer - elif max_decode_len > 1: - # Flatten multi-token decode requests into single-token - # batch entries, expanding seq_lens and block tables so - # the kernel always sees next_n=1. - - # Also handles the edge case where use_flattening=False - # but max_decode_len != next_n (e.g. a batch containing some - # short prefills (q_len < next_n) and no true decodes). - - # Assume 4 requests with seq_lens [10, 7, 12, 0] (the final req is - # padding) and decode_lens [3, 1, 4, 0] in the below example comments. - # The context lengths are therefore - # [10-3, 7-1, 12-4, 0-0] = [7, 6, 8, 0]. - - # 3 + 1 + 4 + 0 = 8 - actual_expanded = int(decode_lens_cpu.sum().item()) - - # [7, 6, 8, 0] -> [7, 7, 7, 6, 8, 8, 8, 8] - expanded_base = torch.repeat_interleave( - seq_lens - decode_lens, decode_lens, output_size=actual_expanded + seq_lens, block_table, decode_lens, batch_size, requires_padding = ( + self._prepare_decode_tensors( + seq_lens=seq_lens, + block_table=block_table, + decode_lens=decode_lens, + decode_lens_cpu=decode_lens_cpu, + query_start_loc=common_attn_metadata.query_start_loc[:num_decodes], + num_decodes=num_decodes, + num_decode_tokens=num_decode_tokens, + use_native=use_native, + next_n=next_n, + max_decode_len=max_decode_len, ) - - # [0, 3, 4, 8] -> [0, 0, 0, 3, 4, 4, 4, 4] - expanded_starts = torch.repeat_interleave( - common_attn_metadata.query_start_loc[:num_decodes], - decode_lens, - output_size=actual_expanded, - ) - - # [0, 1, 2, 0, 0, 1, 2, 3] - positions_within = ( - self.arange_buffer[:actual_expanded] - expanded_starts - ) - - # [8, 9, 10, 7, 9, 10, 11, 12, ...] where ... is unused buffer space - self.expanded_seq_lens_buffer[:actual_expanded] = ( - expanded_base + positions_within + 1 - ) - self.expanded_seq_lens_buffer[actual_expanded:] = 0 - seq_lens = self.expanded_seq_lens_buffer[:num_decode_tokens] - - # Give each of the flattened entries the same block table row as the - # original request. - self.expanded_block_table_buffer[:actual_expanded] = ( - torch.repeat_interleave( - block_table, decode_lens, dim=0, output_size=actual_expanded - ) - ) - if actual_expanded < num_decode_tokens: - self.expanded_block_table_buffer[ - actual_expanded:num_decode_tokens, 0 - ] = 0 - block_table = self.expanded_block_table_buffer[:num_decode_tokens] - - # All reqs now have decode_len=1 - self.decode_lens_buffer[:num_decode_tokens] = 1 - decode_lens = self.decode_lens_buffer[:num_decode_tokens] - offsets = None - else: - offsets = None + ) # DeepGEMM is required for the paged MQA logits on CUDA devices if current_platform.is_cuda() and has_deep_gemm(): @@ -509,9 +564,8 @@ class DeepseekV32IndexerMetadataBuilder(AttentionMetadataBuilder): block_table=block_table, seq_lens=seq_lens, decode_lens=decode_lens, - requires_padding=False, + requires_padding=requires_padding, schedule_metadata=self.scheduler_metadata_buffer, - offsets=offsets, ) attn_metadata = DeepseekV32IndexerMetadata( @@ -531,6 +585,4 @@ class DeepseekV32IndexerMetadataBuilder(AttentionMetadataBuilder): decode=decode_metadata, ) - # if get_tensor_model_parallel_rank() == 0: - # logger.info(f"attn_metadata: {attn_metadata}") return attn_metadata From 490f17d0c7e21c3a4cd4c8e13b0e40840fc754c1 Mon Sep 17 00:00:00 2001 From: Khairul Kabir <250204754+khairulkabir1661@users.noreply.github.com> Date: Wed, 8 Apr 2026 21:40:37 -0700 Subject: [PATCH 011/199] [Multimodal] Fix nested_tensors_equal: add length check for lists and tuple support (#38388) Signed-off-by: khairulkabir1661 Co-authored-by: khairulkabir1661 --- vllm/multimodal/inputs.py | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/vllm/multimodal/inputs.py b/vllm/multimodal/inputs.py index 75089327234..12356b8727c 100644 --- a/vllm/multimodal/inputs.py +++ b/vllm/multimodal/inputs.py @@ -238,12 +238,29 @@ def nested_tensors_equal(a: NestedTensors, b: NestedTensors) -> bool: return isinstance(a, torch.Tensor) and torch.equal(b, a) if isinstance(a, list): - return isinstance(b, list) and all( - nested_tensors_equal(a_, b_) for a_, b_ in zip(a, b) + return ( + isinstance(b, list) + and len(a) == len(b) + and all(nested_tensors_equal(a_, b_) for a_, b_ in zip(a, b)) ) if isinstance(b, list): - return isinstance(a, list) and all( - nested_tensors_equal(b_, a_) for b_, a_ in zip(b, a) + return ( + isinstance(a, list) + and len(b) == len(a) + and all(nested_tensors_equal(b_, a_) for b_, a_ in zip(b, a)) + ) + + if isinstance(a, tuple): + return ( + isinstance(b, tuple) + and len(a) == len(b) + and all(nested_tensors_equal(a_, b_) for a_, b_ in zip(a, b)) + ) + if isinstance(b, tuple): + return ( + isinstance(a, tuple) + and len(b) == len(a) + and all(nested_tensors_equal(b_, a_) for b_, a_ in zip(b, a)) ) # Both a and b are scalars From e80e633927ab11570cc4d07a55e5420d05c7fe99 Mon Sep 17 00:00:00 2001 From: sihao_li <165983188+1643661061leo@users.noreply.github.com> Date: Thu, 9 Apr 2026 12:45:16 +0800 Subject: [PATCH 012/199] [XPU] Skip VLLM_BATCH_INVARIANT for XPU in EAGLE DP test (#39164) Signed-off-by: sihao.li Co-authored-by: Kunshang Ji --- tests/v1/distributed/test_eagle_dp.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/v1/distributed/test_eagle_dp.py b/tests/v1/distributed/test_eagle_dp.py index 8557fa0c61d..69ef1c491a7 100644 --- a/tests/v1/distributed/test_eagle_dp.py +++ b/tests/v1/distributed/test_eagle_dp.py @@ -37,7 +37,7 @@ else: strict=False, ) async def test_run_eagle_dp(monkeypatch: pytest.MonkeyPatch, attn_backend: str): - if not current_platform.is_rocm(): + if not current_platform.is_rocm() and not current_platform.is_xpu(): # This test checks that running a model with and without eagle # leads to identical tokens. # From 9e78555743c19207db796f432cc213d118873a08 Mon Sep 17 00:00:00 2001 From: Zhewen Li Date: Wed, 8 Apr 2026 22:21:37 -0700 Subject: [PATCH 013/199] [Docker] Add fastsafetensors to NVIDIA Dockerfile (#38950) --- docker/Dockerfile | 4 +++- docker/Dockerfile.rocm | 3 ++- requirements/cuda.txt | 3 +++ requirements/rocm-test.txt | 4 +++- requirements/rocm.txt | 4 +++- 5 files changed, 14 insertions(+), 4 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index a0915f9a708..a2fe0971dc3 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -538,7 +538,9 @@ RUN CUDA_VERSION_DASH=$(echo $CUDA_VERSION | cut -d. -f1,2 | tr '.' '-') && \ cuda-nvrtc-${CUDA_VERSION_DASH} \ cuda-cuobjdump-${CUDA_VERSION_DASH} \ libcurand-dev-${CUDA_VERSION_DASH} \ - libcublas-${CUDA_VERSION_DASH} && \ + libcublas-${CUDA_VERSION_DASH} \ + # Required by fastsafetensors (fixes #20384) + libnuma-dev && \ # Fixes nccl_allocator requiring nccl.h at runtime # https://github.com/vllm-project/vllm/blob/1336a1ea244fa8bfd7e72751cabbdb5b68a0c11a/vllm/distributed/device_communicators/pynccl_allocator.py#L22 # NCCL packages don't use the cuda-MAJOR-MINOR naming convention, diff --git a/docker/Dockerfile.rocm b/docker/Dockerfile.rocm index fad79af9cff..218356367b6 100644 --- a/docker/Dockerfile.rocm +++ b/docker/Dockerfile.rocm @@ -19,7 +19,8 @@ ENV PYTORCH_ROCM_ARCH=${ARG_PYTORCH_ROCM_ARCH:-${PYTORCH_ROCM_ARCH}} # Install some basic utilities RUN apt-get update -q -y && apt-get install -q -y \ sqlite3 libsqlite3-dev libfmt-dev libmsgpack-dev libsuitesparse-dev \ - apt-transport-https ca-certificates wget curl + apt-transport-https ca-certificates wget curl \ + libnuma-dev RUN python3 -m pip install --upgrade pip # Remove sccache only if not using sccache (it exists in base image from Dockerfile.rocm_base) ARG USE_SCCACHE diff --git a/requirements/cuda.txt b/requirements/cuda.txt index 75831c39e2c..c6b8a82eac6 100644 --- a/requirements/cuda.txt +++ b/requirements/cuda.txt @@ -15,6 +15,9 @@ flashinfer-cubin==0.6.7 # breaking changes in 1.19.0 nvidia-cudnn-frontend>=1.13.0,<1.19.0 +# Required for faster safetensors model loading +fastsafetensors >= 0.2.2 + # QuACK and Cutlass DSL for FA4 (cute-DSL implementation) nvidia-cutlass-dsl>=4.4.2 quack-kernels>=0.3.3 diff --git a/requirements/rocm-test.txt b/requirements/rocm-test.txt index a441bfef04d..ddea10f5d2e 100644 --- a/requirements/rocm-test.txt +++ b/requirements/rocm-test.txt @@ -276,7 +276,9 @@ fastar==0.9.0 fastparquet==2026.3.0 # via genai-perf fastsafetensors==0.2.2 - # via -r requirements/rocm-test.in + # via + # -c requirements/rocm.txt + # -r requirements/rocm-test.in filelock==3.25.2 # via # -c requirements/common.txt diff --git a/requirements/rocm.txt b/requirements/rocm.txt index 6639e71a4b9..011d0e53fd1 100644 --- a/requirements/rocm.txt +++ b/requirements/rocm.txt @@ -20,4 +20,6 @@ conch-triton-kernels==1.2.1 timm>=1.0.17 # amd-quark: required for Quark quantization on ROCm # To be consistent with test_quark.py -amd-quark>=0.8.99 \ No newline at end of file +amd-quark>=0.8.99 +# Required for faster safetensors model loading +fastsafetensors >= 0.2.2 \ No newline at end of file From ed2f282bc8cacfbe49a86ab1dbaf7e4471ec6b18 Mon Sep 17 00:00:00 2001 From: Wentao Ye <44945378+yewentao256@users.noreply.github.com> Date: Thu, 9 Apr 2026 02:12:23 -0400 Subject: [PATCH 014/199] [Perf] Optimize redundant sync for pooling model, 3.7% Throughput Improvement (#39113) Signed-off-by: yewentao256 --- vllm/v1/worker/gpu_model_runner.py | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/vllm/v1/worker/gpu_model_runner.py b/vllm/v1/worker/gpu_model_runner.py index 0b85a67f8a0..872cb83d240 100644 --- a/vllm/v1/worker/gpu_model_runner.py +++ b/vllm/v1/worker/gpu_model_runner.py @@ -1046,6 +1046,13 @@ class GPUModelRunner( def _sync_device(self) -> None: torch.accelerator.synchronize() + def _get_or_create_async_output_copy_stream(self) -> torch.cuda.Stream: + stream = self.async_output_copy_stream + if stream is None: + stream = torch.cuda.Stream() + self.async_output_copy_stream = stream + return stream + def _update_states(self, scheduler_output: "SchedulerOutput") -> Callable | None: """Update the cached states and the persistent batch with the scheduler output. @@ -3152,21 +3159,21 @@ class GPUModelRunner( model_runner_output.pooler_output = [None] * num_reqs return model_runner_output - if self.use_async_scheduling: - return AsyncGPUPoolingModelRunnerOutput( - model_runner_output=model_runner_output, + if not current_platform.is_cuda_alike(): + # cpu/xpu runners cannot use the CUDA stream/event-based wrapper. + model_runner_output.pooler_output = _copy_pooler_output_to_cpu( raw_pooler_output=raw_pooler_output, finished_mask=finished_mask, - async_output_copy_stream=self.async_output_copy_stream, ) + self._sync_device() + return model_runner_output - model_runner_output.pooler_output = _copy_pooler_output_to_cpu( + return AsyncGPUPoolingModelRunnerOutput( + model_runner_output=model_runner_output, raw_pooler_output=raw_pooler_output, finished_mask=finished_mask, + async_output_copy_stream=self._get_or_create_async_output_copy_stream(), ) - self._sync_device() - - return model_runner_output def _pad_for_sequence_parallelism(self, num_scheduled_tokens: int) -> int: # Pad tokens to multiple of tensor_parallel_size when @@ -4333,7 +4340,7 @@ class GPUModelRunner( sampled_token_ids=sampler_output.sampled_token_ids, logprobs_tensors=sampler_output.logprobs_tensors, invalid_req_indices=invalid_req_indices, - async_output_copy_stream=self.async_output_copy_stream, + async_output_copy_stream=self._get_or_create_async_output_copy_stream(), vocab_size=self.input_batch.vocab_size, ) with record_function_or_nullcontext( From 8a34c5087aa723eafd9995a3af814fcae8334c4d Mon Sep 17 00:00:00 2001 From: Andrew Barnes Date: Thu, 9 Apr 2026 03:12:22 -0400 Subject: [PATCH 015/199] [ROCm] Remove unnecessary fp8 roundtrip in gather cache NHD dequant (#39122) Signed-off-by: Bortlesboat --- vllm/v1/attention/backends/rocm_aiter_fa.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/vllm/v1/attention/backends/rocm_aiter_fa.py b/vllm/v1/attention/backends/rocm_aiter_fa.py index abbbcafb519..a4cdce3f5d3 100644 --- a/vllm/v1/attention/backends/rocm_aiter_fa.py +++ b/vllm/v1/attention/backends/rocm_aiter_fa.py @@ -112,10 +112,12 @@ if current_platform.is_rocm(): if DEQUANT: k_scale = tl.load(k_scale_ptr) v_scale = tl.load(v_scale_ptr) - k_dtype = k_reg.dtype - v_dtype = v_reg.dtype - k_reg = (k_reg.to(tl.float32) * k_scale).to(k_dtype) - v_reg = (v_reg.to(tl.float32) * v_scale).to(v_dtype) + k_reg = (k_reg.to(tl.float32) * k_scale).to( + key_ptr_offset.dtype.element_ty + ) + v_reg = (v_reg.to(tl.float32) * v_scale).to( + value_ptr_offset.dtype.element_ty + ) tl.store(key_ptr_offset + col_offsets, k_reg) tl.store(value_ptr_offset + col_offsets, v_reg) From ed733802f0446ba7170dbb921ec6689016d1fa3a Mon Sep 17 00:00:00 2001 From: Qidong Su Date: Thu, 9 Apr 2026 03:36:51 -0400 Subject: [PATCH 016/199] Fix NUMA binding on non-CDMM Grace-Blackwell systems (#39361) Signed-off-by: Qidong Su Co-authored-by: Claude Opus 4.6 (1M context) --- vllm/platforms/cuda.py | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/vllm/platforms/cuda.py b/vllm/platforms/cuda.py index 2e73c56b397..66a5ee67efa 100644 --- a/vllm/platforms/cuda.py +++ b/vllm/platforms/cuda.py @@ -661,7 +661,18 @@ class NvmlCudaPlatform(CudaPlatformBase): handle = pynvml.nvmlDeviceGetHandleByIndex(physical_device_id) try: - return pynvml.nvmlDeviceGetNumaNodeId(handle) + numa_node = pynvml.nvmlDeviceGetNumaNodeId(handle) + if cls._numa_node_has_cpus(numa_node): + return numa_node + # On non-CDMM Grace-Blackwell systems (e.g. GB200), each GPU's HBM + # is a separate NUMA node with no CPUs. Fall through to + # CPU-affinity-based detection to find the nearest CPU node. + logger.debug( + "NUMA node %d for GPU %d has no CPUs (non-CDMM topology), " + "falling back to CPU-affinity-based detection", + numa_node, + device_id, + ) except Exception: pass @@ -681,6 +692,17 @@ class NvmlCudaPlatform(CudaPlatformBase): return None + @classmethod + def _numa_node_has_cpus(cls, node_id: int) -> bool: + """Check whether a NUMA node has any CPUs assigned to it.""" + from pathlib import Path + + cpulist_file = Path(f"/sys/devices/system/node/node{node_id}/cpulist") + try: + return cpulist_file.read_text().strip() != "" + except (OSError, ValueError): + return False + @classmethod def _get_device_cpu_affinity(cls, handle) -> list[int]: """Get the list of CPU IDs associated with a GPU via NVML.""" From b6c9be509e869a8e1264bf1d8f4f33ccb756a365 Mon Sep 17 00:00:00 2001 From: Shengqi Chen Date: Thu, 9 Apr 2026 16:14:07 +0800 Subject: [PATCH 017/199] [CI] fix possible user permission issues in nightly index generation (#39390) Signed-off-by: Shengqi Chen --- .buildkite/scripts/generate-and-upload-nightly-index.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.buildkite/scripts/generate-and-upload-nightly-index.sh b/.buildkite/scripts/generate-and-upload-nightly-index.sh index fa6eb979af5..7cef252c607 100755 --- a/.buildkite/scripts/generate-and-upload-nightly-index.sh +++ b/.buildkite/scripts/generate-and-upload-nightly-index.sh @@ -19,7 +19,7 @@ has_new_python=$($PYTHON -c "print(1 if __import__('sys').version_info >= (3,12) if [[ "$has_new_python" -eq 0 ]]; then # use new python from docker docker pull python:3-slim - PYTHON="docker run --rm -v $(pwd):/app -w /app python:3-slim python3" + PYTHON="docker run --rm -u $(id -u):$(id -g) -v $(pwd):/app -w /app python:3-slim python3" fi echo "Using python interpreter: $PYTHON" From 66c079ae83f5d5200306da28acb8a0949a6a9a45 Mon Sep 17 00:00:00 2001 From: "wang.yuqi" Date: Thu, 9 Apr 2026 18:09:45 +0800 Subject: [PATCH 018/199] [Frontend][4/n] Improve pooling entrypoints | pooling. (#39153) Signed-off-by: wang.yuqi --- .../openai/chat_completion/test_chat_error.py | 3 - .../chat_completion/test_serving_chat.py | 15 - .../completion/test_completion_error.py | 3 - .../openai/completion/test_lora_resolvers.py | 2 - .../test_generative_scoring.py | 1 - .../responses/test_serving_responses.py | 4 - .../pooling/classify/test_offline.py | 7 +- .../pooling/classify/test_online.py | 6 +- .../entrypoints/pooling/embed/test_offline.py | 7 +- .../entrypoints/pooling/embed/test_online.py | 6 +- .../pooling/scoring/test_bi_encoder_online.py | 6 +- .../scoring/test_cross_encoder_online.py | 6 +- .../pooling/token_classify/test_offline.py | 7 +- .../pooling/token_classify/test_online.py | 9 +- .../pooling/token_embed/test_offline.py | 7 +- .../pooling/token_embed/test_online.py | 9 +- .../serve/disagg/test_generate_stream.py | 2 - .../serve/lora/test_serving_models.py | 1 - tests/v1/engine/test_async_llm.py | 1 - vllm/engine/protocol.py | 2 - vllm/entrypoints/llm.py | 181 ++++------ vllm/entrypoints/openai/api_server.py | 8 +- vllm/entrypoints/openai/engine/serving.py | 185 +--------- vllm/entrypoints/openai/models/serving.py | 1 - vllm/entrypoints/pooling/__init__.py | 6 +- vllm/entrypoints/pooling/base/io_processor.py | 39 ++- vllm/entrypoints/pooling/base/serving.py | 73 ++-- .../pooling/classify/io_processor.py | 6 +- vllm/entrypoints/pooling/classify/serving.py | 16 +- .../entrypoints/pooling/embed/io_processor.py | 6 +- vllm/entrypoints/pooling/embed/serving.py | 28 +- .../pooling/io_processor_factories.py | 55 ++- .../entrypoints/pooling/pooling/api_router.py | 30 +- .../pooling/pooling/io_processor.py | 156 +++++++++ vllm/entrypoints/pooling/pooling/serving.py | 330 ++++++------------ .../pooling/scoring/io_processor.py | 2 +- vllm/entrypoints/pooling/scoring/serving.py | 17 +- vllm/entrypoints/pooling/typing.py | 9 +- vllm/entrypoints/sagemaker/api_router.py | 4 +- vllm/entrypoints/serve/render/serving.py | 2 - vllm/plugins/io_processors/__init__.py | 17 + vllm/v1/engine/async_llm.py | 6 - vllm/v1/engine/llm_engine.py | 6 - 43 files changed, 554 insertions(+), 733 deletions(-) create mode 100644 vllm/entrypoints/pooling/pooling/io_processor.py diff --git a/tests/entrypoints/openai/chat_completion/test_chat_error.py b/tests/entrypoints/openai/chat_completion/test_chat_error.py index 46070e4810b..f1fb7c7518b 100644 --- a/tests/entrypoints/openai/chat_completion/test_chat_error.py +++ b/tests/entrypoints/openai/chat_completion/test_chat_error.py @@ -87,7 +87,6 @@ def _build_serving_chat(engine: AsyncLLM) -> OpenAIServingChat: serving_render = OpenAIServingRender( model_config=engine.model_config, renderer=engine.renderer, - io_processor=engine.io_processor, model_registry=models.registry, request_logger=None, chat_template=None, @@ -123,7 +122,6 @@ async def test_chat_error_non_stream(): mock_engine.errored = False mock_engine.model_config = MockModelConfig() mock_engine.input_processor = MagicMock() - mock_engine.io_processor = MagicMock() mock_engine.renderer = _build_renderer(mock_engine.model_config) serving_chat = _build_serving_chat(mock_engine) @@ -173,7 +171,6 @@ async def test_chat_error_stream(): mock_engine.errored = False mock_engine.model_config = MockModelConfig() mock_engine.input_processor = MagicMock() - mock_engine.io_processor = MagicMock() mock_engine.renderer = _build_renderer(mock_engine.model_config) serving_chat = _build_serving_chat(mock_engine) diff --git a/tests/entrypoints/openai/chat_completion/test_serving_chat.py b/tests/entrypoints/openai/chat_completion/test_serving_chat.py index cb356e0e198..39d59d28f85 100644 --- a/tests/entrypoints/openai/chat_completion/test_serving_chat.py +++ b/tests/entrypoints/openai/chat_completion/test_serving_chat.py @@ -567,7 +567,6 @@ def _build_serving_render( return OpenAIServingRender( model_config=engine.model_config, renderer=engine.renderer, - io_processor=engine.io_processor, model_registry=model_registry, request_logger=None, chat_template=CHAT_TEMPLATE, @@ -599,7 +598,6 @@ def _build_serving_chat(engine: AsyncLLM) -> OpenAIServingChat: class MockEngine: model_config: MockModelConfig = field(default_factory=MockModelConfig) input_processor: MagicMock = field(default_factory=MagicMock) - io_processor: MagicMock = field(default_factory=MagicMock) renderer: MagicMock = field(default_factory=MagicMock) @@ -632,7 +630,6 @@ async def test_serving_chat_returns_correct_model_name(): mock_engine.errored = False mock_engine.model_config = MockModelConfig() mock_engine.input_processor = MagicMock() - mock_engine.io_processor = MagicMock() mock_engine.renderer = _build_renderer(mock_engine.model_config) serving_chat = _build_serving_chat(mock_engine) @@ -662,7 +659,6 @@ async def test_serving_chat_should_set_correct_max_tokens(): mock_engine.errored = False mock_engine.model_config = MockModelConfig() mock_engine.input_processor = MagicMock() - mock_engine.io_processor = MagicMock() mock_engine.renderer = _build_renderer(mock_engine.model_config) serving_chat = _build_serving_chat(mock_engine) @@ -693,7 +689,6 @@ async def test_serving_chat_should_set_correct_max_tokens(): mock_engine.errored = False mock_engine.model_config = mock_model_config mock_engine.input_processor = MagicMock() - mock_engine.io_processor = MagicMock() mock_engine.renderer = _build_renderer(mock_engine.model_config) # Initialize the serving chat @@ -737,7 +732,6 @@ async def test_serving_chat_should_set_correct_max_tokens(): mock_engine.errored = False mock_engine.model_config = mock_model_config mock_engine.input_processor = MagicMock() - mock_engine.io_processor = MagicMock() mock_engine.renderer = _build_renderer(mock_engine.model_config) serving_chat = _build_serving_chat(mock_engine) @@ -779,7 +773,6 @@ async def test_serving_chat_should_set_correct_max_tokens(): mock_engine.errored = False mock_engine.model_config = mock_model_config mock_engine.input_processor = MagicMock() - mock_engine.io_processor = MagicMock() mock_engine.renderer = _build_renderer(mock_engine.model_config) # Initialize the serving chat @@ -823,7 +816,6 @@ async def test_serving_chat_mistral_token_ids_prompt_is_validated(): mock_engine.errored = False mock_engine.model_config = MockModelConfig(skip_tokenizer_init=True) mock_engine.input_processor = MagicMock() - mock_engine.io_processor = MagicMock() mock_tokenizer = MagicMock(spec=MistralTokenizer) mock_renderer = MistralRenderer( @@ -863,7 +855,6 @@ async def test_serving_chat_mistral_token_ids_prompt_too_long_is_rejected(): mock_engine.errored = False mock_engine.model_config = MockModelConfig(skip_tokenizer_init=True) mock_engine.input_processor = MagicMock() - mock_engine.io_processor = MagicMock() mock_tokenizer = MagicMock(spec=MistralTokenizer) mock_renderer = MistralRenderer( @@ -906,7 +897,6 @@ async def test_serving_chat_could_load_correct_generation_config(): mock_engine.errored = False mock_engine.model_config = mock_model_config mock_engine.input_processor = MagicMock() - mock_engine.io_processor = MagicMock() mock_engine.renderer = _build_renderer(mock_engine.model_config) # Initialize the serving chat @@ -952,7 +942,6 @@ async def test_serving_chat_did_set_correct_cache_salt(model_type): mock_engine.errored = False mock_engine.model_config = mock_model_config mock_engine.input_processor = MagicMock() - mock_engine.io_processor = MagicMock() mock_engine.renderer = _build_renderer(mock_engine.model_config) serving_chat = _build_serving_chat(mock_engine) @@ -1003,7 +992,6 @@ async def test_serving_chat_data_parallel_rank_extraction(): mock_engine.errored = False mock_engine.model_config = MockModelConfig() mock_engine.input_processor = MagicMock() - mock_engine.io_processor = MagicMock() mock_engine.renderer = _build_renderer(mock_engine.model_config) # Mock the generate method to return an async generator @@ -1095,7 +1083,6 @@ class TestServingChatWithHarmony: mock_engine.errored = False mock_engine.model_config = MockModelConfig() mock_engine.input_processor = MagicMock() - mock_engine.io_processor = MagicMock() mock_engine.renderer = _build_renderer(mock_engine.model_config) return mock_engine @@ -1732,7 +1719,6 @@ async def test_tool_choice_validation_without_parser(): mock_engine.errored = False mock_engine.model_config = MockModelConfig() mock_engine.input_processor = MagicMock() - mock_engine.io_processor = MagicMock() mock_engine.renderer = _build_renderer(mock_engine.model_config) models = OpenAIServingModels( @@ -1802,7 +1788,6 @@ async def test_streaming_n_gt1_independent_tool_parsers(): mock_engine.errored = False mock_engine.model_config = MockModelConfig() mock_engine.input_processor = MagicMock() - mock_engine.io_processor = MagicMock() mock_engine.renderer = _build_renderer(mock_engine.model_config) models = OpenAIServingModels( diff --git a/tests/entrypoints/openai/completion/test_completion_error.py b/tests/entrypoints/openai/completion/test_completion_error.py index 46eb02e3c59..3349f4126bc 100644 --- a/tests/entrypoints/openai/completion/test_completion_error.py +++ b/tests/entrypoints/openai/completion/test_completion_error.py @@ -79,7 +79,6 @@ def _build_serving_completion(engine: AsyncLLM) -> OpenAIServingCompletion: serving_render = OpenAIServingRender( model_config=engine.model_config, renderer=engine.renderer, - io_processor=engine.io_processor, model_registry=models.registry, request_logger=None, chat_template=None, @@ -107,7 +106,6 @@ async def test_completion_error_non_stream(): mock_engine.errored = False mock_engine.model_config = MockModelConfig() mock_engine.input_processor = MagicMock() - mock_engine.io_processor = MagicMock() mock_engine.renderer = _build_renderer(mock_engine.model_config) serving_completion = _build_serving_completion(mock_engine) @@ -157,7 +155,6 @@ async def test_completion_error_stream(): mock_engine.errored = False mock_engine.model_config = MockModelConfig() mock_engine.input_processor = MagicMock() - mock_engine.io_processor = MagicMock() mock_engine.renderer = _build_renderer(mock_engine.model_config) serving_completion = _build_serving_completion(mock_engine) diff --git a/tests/entrypoints/openai/completion/test_lora_resolvers.py b/tests/entrypoints/openai/completion/test_lora_resolvers.py index 8d5283de5cf..6a0bec92516 100644 --- a/tests/entrypoints/openai/completion/test_lora_resolvers.py +++ b/tests/entrypoints/openai/completion/test_lora_resolvers.py @@ -137,7 +137,6 @@ def mock_serving_setup(): mock_engine.model_config = MockModelConfig() mock_engine.input_processor = MagicMock() - mock_engine.io_processor = MagicMock() mock_engine.renderer = _build_renderer(mock_engine.model_config) models = OpenAIServingModels( @@ -148,7 +147,6 @@ def mock_serving_setup(): serving_render = OpenAIServingRender( model_config=mock_engine.model_config, renderer=mock_engine.renderer, - io_processor=mock_engine.io_processor, model_registry=models.registry, request_logger=None, chat_template=None, diff --git a/tests/entrypoints/openai/generative_scoring/test_generative_scoring.py b/tests/entrypoints/openai/generative_scoring/test_generative_scoring.py index a260027af0f..632c4bcc90a 100644 --- a/tests/entrypoints/openai/generative_scoring/test_generative_scoring.py +++ b/tests/entrypoints/openai/generative_scoring/test_generative_scoring.py @@ -77,7 +77,6 @@ def _create_mock_engine(): mock_engine.errored = False mock_engine.model_config = MockModelConfig() mock_engine.input_processor = MagicMock() - mock_engine.io_processor = MagicMock() # renderer is accessed by OpenAIServing.__init__ and serving.py mock_renderer = MagicMock() diff --git a/tests/entrypoints/openai/responses/test_serving_responses.py b/tests/entrypoints/openai/responses/test_serving_responses.py index 9e2b9a7fcf9..32f4bf34bb6 100644 --- a/tests/entrypoints/openai/responses/test_serving_responses.py +++ b/tests/entrypoints/openai/responses/test_serving_responses.py @@ -218,7 +218,6 @@ class TestInitializeToolSessions: engine_client.model_config = model_config engine_client.input_processor = MagicMock() - engine_client.io_processor = MagicMock() engine_client.renderer = MagicMock() models = MagicMock() @@ -307,7 +306,6 @@ class TestValidateGeneratorInput: engine_client.model_config = model_config engine_client.input_processor = MagicMock() - engine_client.io_processor = MagicMock() engine_client.renderer = MagicMock() models = MagicMock() @@ -369,7 +367,6 @@ async def test_reasoning_tokens_counted_for_text_reasoning_model(monkeypatch): model_config.get_diff_sampling_param.return_value = {} engine_client.model_config = model_config engine_client.input_processor = MagicMock() - engine_client.io_processor = MagicMock() engine_client.renderer = MagicMock() tokenizer = FakeTokenizer() @@ -672,7 +669,6 @@ def _make_serving_instance_with_reasoning(): model_config.get_diff_sampling_param.return_value = {} engine_client.model_config = model_config engine_client.input_processor = MagicMock() - engine_client.io_processor = MagicMock() engine_client.renderer = MagicMock() models = MagicMock() diff --git a/tests/entrypoints/pooling/classify/test_offline.py b/tests/entrypoints/pooling/classify/test_offline.py index f556dd579e6..828443ebc41 100644 --- a/tests/entrypoints/pooling/classify/test_offline.py +++ b/tests/entrypoints/pooling/classify/test_offline.py @@ -110,8 +110,11 @@ def test_score_api(llm: LLM): llm.score("ping", "pong", use_tqdm=False) -@pytest.mark.parametrize("task", ["embed", "token_embed"]) +@pytest.mark.parametrize("task", ["embed", "token_embed", "plugin"]) def test_unsupported_tasks(llm: LLM, task: PoolingTask): - err_msg = "Embedding API is not supported by this model.+" + if task == "plugin": + err_msg = "No IOProcessor plugin installed." + else: + err_msg = "Embedding API is not supported by this model.+" with pytest.raises(ValueError, match=err_msg): llm.encode(prompt, pooling_task=task, use_tqdm=False) diff --git a/tests/entrypoints/pooling/classify/test_online.py b/tests/entrypoints/pooling/classify/test_online.py index ed295a09b88..848ce4083c5 100644 --- a/tests/entrypoints/pooling/classify/test_online.py +++ b/tests/entrypoints/pooling/classify/test_online.py @@ -469,4 +469,8 @@ async def test_pooling_not_supported( }, ) assert response.json()["error"]["type"] == "BadRequestError" - assert response.json()["error"]["message"].startswith(f"Unsupported task: {task!r}") + if task == "plugin": + err_msg = "No IOProcessor plugin installed." + else: + err_msg = f"Unsupported task: {task!r}" + assert response.json()["error"]["message"].startswith(err_msg) diff --git a/tests/entrypoints/pooling/embed/test_offline.py b/tests/entrypoints/pooling/embed/test_offline.py index e8d84ed45e0..1ffeb027b48 100644 --- a/tests/entrypoints/pooling/embed/test_offline.py +++ b/tests/entrypoints/pooling/embed/test_offline.py @@ -107,8 +107,11 @@ def test_pooling_params(llm: LLM): ) -@pytest.mark.parametrize("task", ["token_classify", "classify"]) +@pytest.mark.parametrize("task", ["token_classify", "classify", "plugin"]) def test_unsupported_tasks(llm: LLM, task: PoolingTask): - err_msg = "Classification API is not supported by this model.+" + if task == "plugin": + err_msg = "No IOProcessor plugin installed." + else: + err_msg = "Classification API is not supported by this model.+" with pytest.raises(ValueError, match=err_msg): llm.encode(prompt, pooling_task=task, use_tqdm=False) diff --git a/tests/entrypoints/pooling/embed/test_online.py b/tests/entrypoints/pooling/embed/test_online.py index dc61244c944..3032645c7b1 100644 --- a/tests/entrypoints/pooling/embed/test_online.py +++ b/tests/entrypoints/pooling/embed/test_online.py @@ -767,4 +767,8 @@ async def test_pooling_not_supported( }, ) assert response.json()["error"]["type"] == "BadRequestError" - assert response.json()["error"]["message"].startswith(f"Unsupported task: {task!r}") + if task == "plugin": + err_msg = "No IOProcessor plugin installed." + else: + err_msg = f"Unsupported task: {task!r}" + assert response.json()["error"]["message"].startswith(err_msg) diff --git a/tests/entrypoints/pooling/scoring/test_bi_encoder_online.py b/tests/entrypoints/pooling/scoring/test_bi_encoder_online.py index 38146084e37..39251405664 100644 --- a/tests/entrypoints/pooling/scoring/test_bi_encoder_online.py +++ b/tests/entrypoints/pooling/scoring/test_bi_encoder_online.py @@ -411,4 +411,8 @@ async def test_pooling_not_supported(server: RemoteOpenAIServer, task: str): }, ) assert response.json()["error"]["type"] == "BadRequestError" - assert response.json()["error"]["message"].startswith(f"Unsupported task: {task!r}") + if task == "plugin": + err_msg = "No IOProcessor plugin installed." + else: + err_msg = f"Unsupported task: {task!r}" + assert response.json()["error"]["message"].startswith(err_msg) diff --git a/tests/entrypoints/pooling/scoring/test_cross_encoder_online.py b/tests/entrypoints/pooling/scoring/test_cross_encoder_online.py index ebb339263ce..059a32d7ca3 100644 --- a/tests/entrypoints/pooling/scoring/test_cross_encoder_online.py +++ b/tests/entrypoints/pooling/scoring/test_cross_encoder_online.py @@ -484,4 +484,8 @@ async def test_pooling_not_supported(server: RemoteOpenAIServer, task: str): }, ) assert response.json()["error"]["type"] == "BadRequestError" - assert response.json()["error"]["message"].startswith(f"Unsupported task: {task!r}") + if task == "plugin": + err_msg = "No IOProcessor plugin installed." + else: + err_msg = f"Unsupported task: {task!r}" + assert response.json()["error"]["message"].startswith(err_msg) diff --git a/tests/entrypoints/pooling/token_classify/test_offline.py b/tests/entrypoints/pooling/token_classify/test_offline.py index f7a74675463..d36761466df 100644 --- a/tests/entrypoints/pooling/token_classify/test_offline.py +++ b/tests/entrypoints/pooling/token_classify/test_offline.py @@ -65,14 +65,17 @@ def test_score_api(llm: LLM): llm.score("ping", "pong", use_tqdm=False) -@pytest.mark.parametrize("task", ["classify", "embed", "token_embed"]) +@pytest.mark.parametrize("task", ["classify", "embed", "token_embed", "plugin"]) def test_unsupported_tasks(llm: LLM, task: PoolingTask, caplog_vllm): if task == "classify": with caplog_vllm.at_level(level=logging.WARNING, logger="vllm"): llm.encode(prompt, pooling_task=task, use_tqdm=False) assert "deprecated" in caplog_vllm.text else: - err_msg = "Embedding API is not supported by this model.+" + if task == "plugin": + err_msg = "No IOProcessor plugin installed." + else: + err_msg = "Embedding API is not supported by this model.+" with pytest.raises(ValueError, match=err_msg): llm.encode(prompt, pooling_task=task, use_tqdm=False) diff --git a/tests/entrypoints/pooling/token_classify/test_online.py b/tests/entrypoints/pooling/token_classify/test_online.py index e91d0bc9a39..39fd378336c 100644 --- a/tests/entrypoints/pooling/token_classify/test_online.py +++ b/tests/entrypoints/pooling/token_classify/test_online.py @@ -50,7 +50,7 @@ async def test_pooling_token_classify(server: RemoteOpenAIServer, model_name: st @pytest.mark.asyncio @pytest.mark.parametrize("model_name", [MODEL_NAME]) -@pytest.mark.parametrize("task", ["classify", "embed", "token_embed", "plugin"]) +@pytest.mark.parametrize("task", ["embed", "token_embed", "plugin"]) async def test_pooling_not_supported( server: RemoteOpenAIServer, model_name: str, task: str ): @@ -64,7 +64,8 @@ async def test_pooling_not_supported( }, ) - if task != "classify": - assert response.json()["error"]["type"] == "BadRequestError" + if task == "plugin": + err_msg = "No IOProcessor plugin installed." + else: err_msg = f"Unsupported task: {task!r}" - assert response.json()["error"]["message"].startswith(err_msg) + assert response.json()["error"]["message"].startswith(err_msg) diff --git a/tests/entrypoints/pooling/token_embed/test_offline.py b/tests/entrypoints/pooling/token_embed/test_offline.py index 697f4f81a11..d2e87fbf23e 100644 --- a/tests/entrypoints/pooling/token_embed/test_offline.py +++ b/tests/entrypoints/pooling/token_embed/test_offline.py @@ -62,14 +62,17 @@ def test_token_ids_prompts(llm: LLM): assert outputs[0].outputs.data.shape == (11, 384) -@pytest.mark.parametrize("task", ["embed", "classify", "token_classify"]) +@pytest.mark.parametrize("task", ["embed", "classify", "token_classify", "plugin"]) def test_unsupported_tasks(llm: LLM, task: PoolingTask, caplog_vllm): if task == "embed": with caplog_vllm.at_level(level=logging.WARNING, logger="vllm"): llm.encode(prompt, pooling_task=task, use_tqdm=False) assert "deprecated" in caplog_vllm.text else: - err_msg = "Classification API is not supported by this model.+" + if task == "plugin": + err_msg = "No IOProcessor plugin installed." + else: + err_msg = "Classification API is not supported by this model.+" with pytest.raises(ValueError, match=err_msg): llm.encode(prompt, pooling_task=task, use_tqdm=False) diff --git a/tests/entrypoints/pooling/token_embed/test_online.py b/tests/entrypoints/pooling/token_embed/test_online.py index 922c624e98e..048491dac15 100644 --- a/tests/entrypoints/pooling/token_embed/test_online.py +++ b/tests/entrypoints/pooling/token_embed/test_online.py @@ -73,7 +73,7 @@ async def test_pooling_token_embed(server: RemoteOpenAIServer, model_name: str): @pytest.mark.asyncio @pytest.mark.parametrize("model_name", [MODEL_NAME]) -@pytest.mark.parametrize("task", ["embed", "classify", "token_classify", "plugin"]) +@pytest.mark.parametrize("task", ["classify", "token_classify", "plugin"]) async def test_pooling_not_supported( server: RemoteOpenAIServer, model_name: str, task: str ): @@ -87,7 +87,8 @@ async def test_pooling_not_supported( }, ) - if task != "embed": - assert response.json()["error"]["type"] == "BadRequestError" + if task == "plugin": + err_msg = "No IOProcessor plugin installed." + else: err_msg = f"Unsupported task: {task!r}" - assert response.json()["error"]["message"].startswith(err_msg) + assert response.json()["error"]["message"].startswith(err_msg) diff --git a/tests/entrypoints/serve/disagg/test_generate_stream.py b/tests/entrypoints/serve/disagg/test_generate_stream.py index a9ca026306f..76a9df22f69 100644 --- a/tests/entrypoints/serve/disagg/test_generate_stream.py +++ b/tests/entrypoints/serve/disagg/test_generate_stream.py @@ -86,7 +86,6 @@ def _build_serving_tokens(engine: AsyncLLM, **kwargs) -> ServingTokens: serving_render = OpenAIServingRender( model_config=engine.model_config, renderer=engine.renderer, - io_processor=engine.io_processor, model_registry=models.registry, request_logger=None, chat_template=None, @@ -148,7 +147,6 @@ def _mock_engine() -> MagicMock: engine.errored = False engine.model_config = MockModelConfig() engine.input_processor = MagicMock() - engine.io_processor = MagicMock() engine.renderer = _build_renderer(engine.model_config) return engine diff --git a/tests/entrypoints/serve/lora/test_serving_models.py b/tests/entrypoints/serve/lora/test_serving_models.py index f6755f48934..ce9fdcc2bfb 100644 --- a/tests/entrypoints/serve/lora/test_serving_models.py +++ b/tests/entrypoints/serve/lora/test_serving_models.py @@ -34,7 +34,6 @@ async def _async_serving_models_init() -> OpenAIServingModels: mock_model_config.max_model_len = 2048 mock_engine_client.model_config = mock_model_config mock_engine_client.input_processor = MagicMock() - mock_engine_client.io_processor = MagicMock() mock_engine_client.renderer = MagicMock() serving_models = OpenAIServingModels( diff --git a/tests/v1/engine/test_async_llm.py b/tests/v1/engine/test_async_llm.py index 69a1c38a453..21a651c62ab 100644 --- a/tests/v1/engine/test_async_llm.py +++ b/tests/v1/engine/test_async_llm.py @@ -514,7 +514,6 @@ async def test_header_dp_rank_argument(): serving_render = OpenAIServingRender( model_config=engine.model_config, renderer=engine.renderer, - io_processor=engine.io_processor, model_registry=models.registry, request_logger=None, chat_template=None, diff --git a/vllm/engine/protocol.py b/vllm/engine/protocol.py index 3d466e3fc2a..50013a060a8 100644 --- a/vllm/engine/protocol.py +++ b/vllm/engine/protocol.py @@ -14,7 +14,6 @@ from vllm.distributed.weight_transfer.base import ( from vllm.inputs import EngineInput, PromptType from vllm.lora.request import LoRARequest from vllm.outputs import PoolingRequestOutput, RequestOutput -from vllm.plugins.io_processors import IOProcessor from vllm.pooling_params import PoolingParams from vllm.renderers import BaseRenderer from vllm.sampling_params import SamplingParams @@ -44,7 +43,6 @@ class EngineClient(ABC): vllm_config: VllmConfig model_config: ModelConfig renderer: BaseRenderer - io_processor: IOProcessor | None input_processor: InputProcessor @property diff --git a/vllm/entrypoints/llm.py b/vllm/entrypoints/llm.py index 1be2cdd5c74..d296e84d041 100644 --- a/vllm/entrypoints/llm.py +++ b/vllm/entrypoints/llm.py @@ -49,9 +49,7 @@ from vllm.entrypoints.chat_utils import ( load_chat_template, ) from vllm.entrypoints.pooling.io_processor_factories import init_pooling_io_processors -from vllm.entrypoints.pooling.scoring.io_processor import ( - ScoringIOProcessor, -) +from vllm.entrypoints.pooling.scoring.io_processor import ScoringIOProcessor from vllm.entrypoints.pooling.scoring.typing import ScoreInput from vllm.entrypoints.pooling.typing import OfflineInputsContext, OfflineOutputsContext from vllm.entrypoints.utils import log_non_default_args @@ -398,12 +396,11 @@ class LLM: self.runner_type = self.model_config.runner_type self.renderer = self.llm_engine.renderer self.chat_template = load_chat_template(chat_template) - self.io_processor = self.llm_engine.io_processor self.input_processor = self.llm_engine.input_processor self.chat_template_config = ChatTemplateConfig(chat_template=self.chat_template) self.pooling_io_processors = init_pooling_io_processors( supported_tasks=supported_tasks, - model_config=self.model_config, + vllm_config=self.llm_engine.vllm_config, renderer=self.renderer, chat_template_config=self.chat_template_config, ) @@ -1081,118 +1078,55 @@ class LLM: pooled hidden states in the same order as the input prompts. """ - self._verify_pooling_task(pooling_task) - - if isinstance(prompts, dict) and "data" in prompts: - if self.io_processor is None: - raise ValueError( - "No IOProcessor plugin installed. Please refer " - "to the documentation and to the " - "'prithvi_geospatial_mae_io_processor' " - "offline inference example for more details." - ) - - # Validate the request data is valid for the loaded plugin - prompt_data = prompts.get("data") - if prompt_data is None: - raise ValueError( - "The 'data' field of the prompt is expected to contain " - "the prompt data and it cannot be None. " - "Refer to the documentation of the IOProcessor " - "in use for more details." - ) - validated_prompt = self.io_processor.parse_data(prompt_data) - - # obtain the actual model prompts from the pre-processor - prompts = self.io_processor.pre_process(prompt=validated_prompt) - prompts_seq = prompt_to_seq(prompts) - - params_seq: Sequence[PoolingParams] = [ - self.io_processor.merge_pooling_params(param) - for param in self._params_to_seq( - pooling_params, - len(prompts_seq), - ) - ] - for p in params_seq: - if p.task is None: - p.task = "plugin" - - outputs = self._run_completion( - prompts=prompts_seq, - params=params_seq, - output_type=PoolingRequestOutput, - use_tqdm=use_tqdm, - lora_request=lora_request, - tokenization_kwargs=tokenization_kwargs, + if isinstance(prompts, dict) and "data" in prompts and pooling_task != "plugin": + raise ValueError( + "The 'data' field is only supported for the 'plugin' pooling task." ) + self._verify_pooling_task(pooling_task) + assert pooling_task is not None and pooling_task in self.pooling_io_processors - # get the post-processed model outputs - assert self.io_processor is not None - processed_outputs = self.io_processor.post_process(outputs) + io_processor = self.pooling_io_processors[pooling_task] - return [ - PoolingRequestOutput[Any]( - request_id="", - outputs=processed_outputs, - num_cached_tokens=getattr( - processed_outputs, "num_cached_tokens", 0 - ), - prompt_token_ids=[], - finished=True, - ) - ] - else: - if pooling_params is None: - # Use default pooling params. - pooling_params = PoolingParams() + if pooling_params is None: + pooling_params = PoolingParams() - prompts_seq = prompt_to_seq(prompts) - params_seq = self._params_to_seq(pooling_params, len(prompts_seq)) + ctx = OfflineInputsContext( + prompts=prompts, + pooling_params=pooling_params, + tokenization_kwargs=tokenization_kwargs, + ) - for param in params_seq: - if param.task is None: - param.task = pooling_task - elif param.task != pooling_task: - msg = ( - f"You cannot overwrite {param.task=!r} with {pooling_task=!r}!" - ) - raise ValueError(msg) + engine_inputs = io_processor.pre_process_offline(ctx) + n_inputs = len(engine_inputs) + assert ctx.pooling_params is not None - if pooling_task in self.pooling_io_processors: - io_processor = self.pooling_io_processors[pooling_task] - processor_inputs = io_processor.pre_process_offline( - ctx=OfflineInputsContext( - prompts=prompts_seq, tokenization_kwargs=tokenization_kwargs - ) - ) - seq_lora_requests = self._lora_request_to_seq( - lora_request, len(prompts_seq) - ) - seq_priority = self._priority_to_seq(None, len(prompts)) + params_seq = self._params_to_seq(ctx.pooling_params, n_inputs) - self._render_and_add_requests( - prompts=processor_inputs, - params=params_seq, - lora_requests=seq_lora_requests, - priorities=seq_priority, - ) + for param in params_seq: + if param.task is None: + param.task = pooling_task + elif pooling_task == "plugin": + # `plugin` task uses io_processor.parse_request to verify inputs. + # We actually allow plugin to overwrite pooling_task. + pass + elif param.task != pooling_task: + msg = f"You cannot overwrite {param.task=!r} with {pooling_task=!r}!" + raise ValueError(msg) - outputs = self._run_engine( - use_tqdm=use_tqdm, output_type=PoolingRequestOutput - ) - outputs = io_processor.post_process_offline( - ctx=OfflineOutputsContext(outputs=outputs) - ) - else: - outputs = self._run_completion( - prompts=prompts_seq, - params=params_seq, - output_type=PoolingRequestOutput, - use_tqdm=use_tqdm, - lora_request=lora_request, - tokenization_kwargs=tokenization_kwargs, - ) + seq_lora_requests = self._lora_request_to_seq(lora_request, n_inputs) + seq_priority = self._priority_to_seq(None, n_inputs) + + self._render_and_add_requests( + prompts=engine_inputs, + params=params_seq, + lora_requests=seq_lora_requests, + priorities=seq_priority, + ) + + outputs = self._run_engine(use_tqdm=use_tqdm, output_type=PoolingRequestOutput) + outputs = io_processor.post_process_offline( + ctx=OfflineOutputsContext(outputs=outputs) + ) return outputs def _verify_pooling_task(self, pooling_task: PoolingTask | None): @@ -1254,6 +1188,14 @@ class LLM: pooling_task, ) + if pooling_task == "plugin" and "plugin" not in self.pooling_io_processors: + raise ValueError( + "No IOProcessor plugin installed. Please refer " + "to the documentation and to the " + "'prithvi_geospatial_mae_io_processor' " + "offline inference example for more details." + ) + def embed( self, prompts: PromptType | Sequence[PromptType], @@ -1458,6 +1400,9 @@ class LLM: scoring_data = io_processor.valid_inputs(data_1, data_2) n_queries = len(scoring_data.data_1) + if pooling_params is None: + pooling_params = PoolingParams() + ctx = OfflineInputsContext( prompts=scoring_data, pooling_params=pooling_params, @@ -1466,15 +1411,11 @@ class LLM: n_queries=n_queries, ) - processor_inputs = io_processor.pre_process_offline(ctx) + engine_inputs = io_processor.pre_process_offline(ctx) + n_inputs = len(engine_inputs) - seq_lora_requests = self._lora_request_to_seq( - lora_request, len(processor_inputs) - ) - - if ctx.pooling_params is None: - ctx.pooling_params = PoolingParams() - params_seq = self._params_to_seq(ctx.pooling_params, len(processor_inputs)) + seq_lora_requests = self._lora_request_to_seq(lora_request, n_inputs) + params_seq = self._params_to_seq(ctx.pooling_params, n_inputs) for param in params_seq: if param.task is None: @@ -1483,10 +1424,10 @@ class LLM: msg = f"You cannot overwrite {param.task=!r} with {pooling_task=!r}!" raise ValueError(msg) - seq_priority = self._priority_to_seq(None, len(processor_inputs)) + seq_priority = self._priority_to_seq(None, n_inputs) self._render_and_add_requests( - prompts=processor_inputs, + prompts=engine_inputs, params=params_seq, lora_requests=seq_lora_requests, priorities=seq_priority, @@ -1579,7 +1520,7 @@ class LLM: if isinstance(params, Sequence): if len(params) != num_requests: raise ValueError( - f"The lengths of prompts ({params}) " + f"The lengths of prompts ({num_requests}) " f"and params ({len(params)}) must be the same." ) diff --git a/vllm/entrypoints/openai/api_server.py b/vllm/entrypoints/openai/api_server.py index 2b6cb810ea3..85d2fe43d01 100644 --- a/vllm/entrypoints/openai/api_server.py +++ b/vllm/entrypoints/openai/api_server.py @@ -370,7 +370,6 @@ async def init_app_state( state.openai_serving_render = OpenAIServingRender( model_config=engine_client.model_config, renderer=engine_client.renderer, - io_processor=engine_client.io_processor, model_registry=state.openai_serving_models.registry, request_logger=request_logger, chat_template=resolved_chat_template, @@ -441,13 +440,12 @@ async def init_render_app_state( Unlike :func:`init_app_state` this function does not require an :class:`~vllm.engine.protocol.EngineClient`; it bootstraps the - preprocessing pipeline (renderer, io_processor, input_processor) + preprocessing pipeline (renderer, input_processor) directly from the :class:`~vllm.config.VllmConfig`. """ from vllm.entrypoints.chat_utils import load_chat_template from vllm.entrypoints.openai.models.serving import OpenAIModelRegistry from vllm.entrypoints.serve.render.serving import OpenAIServingRender - from vllm.plugins.io_processors import get_io_processor from vllm.renderers import renderer_from_config served_model_names = args.served_model_name or [args.model] @@ -465,15 +463,11 @@ async def init_render_app_state( request_logger = None renderer = renderer_from_config(vllm_config) - io_processor = get_io_processor( - vllm_config, renderer, vllm_config.model_config.io_processor_plugin - ) resolved_chat_template = load_chat_template(args.chat_template) state.openai_serving_render = OpenAIServingRender( model_config=vllm_config.model_config, renderer=renderer, - io_processor=io_processor, model_registry=model_registry, request_logger=request_logger, chat_template=resolved_chat_template, diff --git a/vllm/entrypoints/openai/engine/serving.py b/vllm/entrypoints/openai/engine/serving.py index f5f011a96f2..5bd415b4fbd 100644 --- a/vllm/entrypoints/openai/engine/serving.py +++ b/vllm/entrypoints/openai/engine/serving.py @@ -44,12 +44,6 @@ from vllm.entrypoints.openai.speech_to_text.protocol import ( TranscriptionResponse, TranslationRequest, ) -from vllm.entrypoints.pooling.pooling.protocol import ( - IOProcessorRequest, - PoolingChatRequest, - PoolingCompletionRequest, - PoolingResponse, -) from vllm.entrypoints.serve.disagg.protocol import GenerateRequest, GenerateResponse from vllm.entrypoints.serve.tokenize.protocol import ( DetokenizeRequest, @@ -62,8 +56,7 @@ from vllm.inputs import EngineInput, PromptType from vllm.logger import init_logger from vllm.logprobs import Logprob, PromptLogprobs from vllm.lora.request import LoRARequest -from vllm.outputs import CompletionOutput, PoolingRequestOutput, RequestOutput -from vllm.pooling_params import PoolingParams +from vllm.outputs import CompletionOutput, RequestOutput from vllm.renderers import ChatParams, TokenizeParams from vllm.renderers.inputs.preprocess import ( extract_prompt_components, @@ -78,10 +71,7 @@ from vllm.tracing import ( log_tracing_disabled_warning, ) from vllm.utils import random_uuid -from vllm.utils.async_utils import ( - collect_from_async_generator, - merge_async_iterators, -) +from vllm.utils.async_utils import collect_from_async_generator logger = init_logger(__name__) @@ -101,17 +91,11 @@ class RendererChatRequest(RendererRequest, Protocol): CompletionLikeRequest: TypeAlias = ( - CompletionRequest - | TokenizeCompletionRequest - | DetokenizeRequest - | PoolingCompletionRequest + CompletionRequest | TokenizeCompletionRequest | DetokenizeRequest ) ChatLikeRequest: TypeAlias = ( - ChatCompletionRequest - | BatchChatCompletionRequest - | TokenizeChatRequest - | PoolingChatRequest + ChatCompletionRequest | BatchChatCompletionRequest | TokenizeChatRequest ) SpeechToTextRequest: TypeAlias = TranscriptionRequest | TranslationRequest @@ -121,7 +105,6 @@ AnyRequest: TypeAlias = ( | ChatLikeRequest | SpeechToTextRequest | ResponsesRequest - | IOProcessorRequest | GenerateRequest ) @@ -130,7 +113,6 @@ AnyResponse: TypeAlias = ( | ChatCompletionResponse | TranscriptionResponse | TokenizeResponse - | PoolingResponse | GenerateResponse ) @@ -146,12 +128,6 @@ class ServeContext(Generic[RequestT]): created_time: int = field(default_factory=lambda: int(time.time())) lora_request: LoRARequest | None = None engine_inputs: list[EngineInput] | None = None - - result_generator: AsyncGenerator[tuple[int, PoolingRequestOutput], None] | None = ( - None - ) - final_res_batch: list[PoolingRequestOutput] = field(default_factory=list) - model_config = ConfigDict(arbitrary_types_allowed=True) @@ -171,7 +147,6 @@ class OpenAIServing: super().__init__() self.engine_client = engine_client - self.models = models self.request_logger = request_logger @@ -179,7 +154,6 @@ class OpenAIServing: self.model_config = engine_client.model_config self.renderer = engine_client.renderer - self.io_processor = engine_client.io_processor self.input_processor = engine_client.input_processor async def beam_search( @@ -381,155 +355,6 @@ class OpenAIServing: prompt_logprobs=None, ) - async def _preprocess( - self, - ctx: ServeContext, - ) -> ErrorResponse | None: - """ - Default preprocessing hook. Subclasses may override to prepare `ctx`. - """ - return None - - def _build_response( - self, - ctx: ServeContext, - ) -> AnyResponse | ErrorResponse: - """ - Default response builder. Subclass may override this method - to return the appropriate response object. - """ - return self.create_error_response("unimplemented endpoint") - - async def handle( - self, - ctx: ServeContext, - ) -> AnyResponse | ErrorResponse: - async for response in self._pipeline(ctx): - return response - - return self.create_error_response("No response yielded from pipeline") - - async def _pipeline( - self, - ctx: ServeContext, - ) -> AsyncGenerator[AnyResponse | ErrorResponse, None]: - """Execute the request processing pipeline yielding responses.""" - if error := await self._check_model(ctx.request): - yield error - if error := self._validate_request(ctx): - yield error - - preprocess_ret = await self._preprocess(ctx) - if isinstance(preprocess_ret, ErrorResponse): - yield preprocess_ret - - generators_ret = await self._prepare_generators(ctx) - if isinstance(generators_ret, ErrorResponse): - yield generators_ret - - collect_ret = await self._collect_batch(ctx) - if isinstance(collect_ret, ErrorResponse): - yield collect_ret - - yield self._build_response(ctx) - - def _validate_request(self, ctx: ServeContext) -> ErrorResponse | None: - truncate_prompt_tokens = getattr(ctx.request, "truncate_prompt_tokens", None) - - if ( - truncate_prompt_tokens is not None - and truncate_prompt_tokens > self.model_config.max_model_len - ): - return self.create_error_response( - "truncate_prompt_tokens value is " - "greater than max_model_len." - " Please request a smaller truncation size." - ) - return None - - def _create_pooling_params( - self, - ctx: ServeContext, - ) -> PoolingParams | ErrorResponse: - if not hasattr(ctx.request, "to_pooling_params"): - return self.create_error_response( - "Request type does not support pooling parameters" - ) - - return ctx.request.to_pooling_params() - - async def _prepare_generators( - self, - ctx: ServeContext, - ) -> ErrorResponse | None: - """Schedule the request and get the result generator.""" - generators: list[AsyncGenerator[PoolingRequestOutput, None]] = [] - - trace_headers = ( - None - if ctx.raw_request is None - else await self._get_trace_headers(ctx.raw_request.headers) - ) - - pooling_params = self._create_pooling_params(ctx) - if isinstance(pooling_params, ErrorResponse): - return pooling_params - - if ctx.engine_inputs is None: - return self.create_error_response("Engine prompts not available") - - for i, engine_input in enumerate(ctx.engine_inputs): - request_id_item = f"{ctx.request_id}-{i}" - - self._log_inputs( - request_id_item, - engine_input, - params=pooling_params, - lora_request=ctx.lora_request, - ) - - generator = self.engine_client.encode( - engine_input, - pooling_params, - request_id_item, - lora_request=ctx.lora_request, - trace_headers=trace_headers, - priority=getattr(ctx.request, "priority", 0), - ) - - generators.append(generator) - - ctx.result_generator = merge_async_iterators(*generators) - - return None - - async def _collect_batch( - self, - ctx: ServeContext, - ) -> ErrorResponse | None: - """Collect batch results from the result generator.""" - if ctx.engine_inputs is None: - return self.create_error_response("Engine prompts not available") - - num_prompts = len(ctx.engine_inputs) - final_res_batch: list[PoolingRequestOutput | None] - final_res_batch = [None] * num_prompts - - if ctx.result_generator is None: - return self.create_error_response("Result generator not available") - - async for i, res in ctx.result_generator: - final_res_batch[i] = res - - if None in final_res_batch: - return self.create_error_response( - "Failed to generate results for all prompts" - ) - - ctx.final_res_batch = [res for res in final_res_batch if res is not None] - - return None - @staticmethod def create_error_response( message: str | Exception, @@ -719,7 +544,7 @@ class OpenAIServing: self, request_id: str, inputs: PromptType | EngineInput, - params: SamplingParams | PoolingParams | BeamSearchParams | None, + params: SamplingParams | BeamSearchParams | None, lora_request: LoRARequest | None, ) -> None: if self.request_logger is None: diff --git a/vllm/entrypoints/openai/models/serving.py b/vllm/entrypoints/openai/models/serving.py index dd7a8687f2b..ba1902d5b77 100644 --- a/vllm/entrypoints/openai/models/serving.py +++ b/vllm/entrypoints/openai/models/serving.py @@ -112,7 +112,6 @@ class OpenAIServingModels: self.model_config = self.engine_client.model_config self.renderer = self.engine_client.renderer - self.io_processor = self.engine_client.io_processor self.input_processor = self.engine_client.input_processor async def init_static_loras(self): diff --git a/vllm/entrypoints/pooling/__init__.py b/vllm/entrypoints/pooling/__init__.py index fb0c10e6f4f..1980750ec20 100644 --- a/vllm/entrypoints/pooling/__init__.py +++ b/vllm/entrypoints/pooling/__init__.py @@ -67,20 +67,18 @@ def init_pooling_state( from vllm.entrypoints.chat_utils import load_chat_template from vllm.entrypoints.pooling.classify.serving import ServingClassification from vllm.entrypoints.pooling.embed.serving import ServingEmbedding - from vllm.entrypoints.pooling.pooling.serving import OpenAIServingPooling + from vllm.entrypoints.pooling.pooling.serving import ServingPooling from vllm.entrypoints.pooling.scoring.serving import ServingScores from vllm.tasks import POOLING_TASKS model_config = engine_client.model_config - resolved_chat_template = load_chat_template(args.chat_template) state.serving_pooling = ( ( - OpenAIServingPooling( + ServingPooling( engine_client, state.openai_serving_models, - state.openai_serving_render, supported_tasks=supported_tasks, request_logger=request_logger, chat_template=resolved_chat_template, diff --git a/vllm/entrypoints/pooling/base/io_processor.py b/vllm/entrypoints/pooling/base/io_processor.py index fd4c076cdda..79f350382dd 100644 --- a/vllm/entrypoints/pooling/base/io_processor.py +++ b/vllm/entrypoints/pooling/base/io_processor.py @@ -4,8 +4,8 @@ from collections.abc import Sequence from typing import Any, Final -from vllm import PoolingRequestOutput, PromptType -from vllm.config import ModelConfig +from vllm import PoolingParams, PoolingRequestOutput, PromptType +from vllm.config import VllmConfig from vllm.entrypoints.chat_utils import ( ChatCompletionMessageParam, ChatTemplateConfig, @@ -33,11 +33,12 @@ class PoolingIOProcessor: def __init__( self, - model_config: ModelConfig, + vllm_config: VllmConfig, renderer: BaseRenderer, chat_template_config: ChatTemplateConfig, ): - self.model_config = model_config + self.vllm_config = vllm_config + self.model_config = vllm_config.model_config self.renderer = renderer self.chat_template = chat_template_config.chat_template @@ -48,12 +49,12 @@ class PoolingIOProcessor: chat_template_config.trust_request_chat_template ) - def create_pooling_params(self, request): - return request.to_pooling_params() - ####################################### # online APIs + def create_pooling_params(self, request): + return request.to_pooling_params() + def pre_process_online(self, ctx: PoolingServeContext): request = ctx.request @@ -100,12 +101,16 @@ class PoolingIOProcessor: # offline APIs def pre_process_offline(self, ctx: OfflineInputsContext) -> Sequence[EngineInput]: - assert not isinstance(ctx.prompts, ScoringData) + assert not isinstance(ctx.prompts, ScoringData) and not ( + isinstance(ctx.prompts, dict) and "data" in ctx.prompts + ) + + prompts_seq = prompt_to_seq(ctx.prompts) tok_params = self.renderer.default_cmpl_tok_params.with_kwargs( **(ctx.tokenization_kwargs or {}) ) return self._preprocess_completion_offline( - prompts=ctx.prompts, tok_params=tok_params + prompts=prompts_seq, tok_params=tok_params ) async def pre_process_offline_async(self, ctx: OfflineInputsContext): @@ -243,3 +248,19 @@ class PoolingIOProcessor: "Refused request with untrusted chat template." ) return None + + def _params_to_seq( + self, + params: PoolingParams | Sequence[PoolingParams], + num_requests: int, + ) -> Sequence[PoolingParams]: + if isinstance(params, Sequence): + if len(params) != num_requests: + raise ValueError( + f"The lengths of prompts ({num_requests}) " + f"and params ({len(params)}) must be the same." + ) + + return params + + return [params] * num_requests diff --git a/vllm/entrypoints/pooling/base/serving.py b/vllm/entrypoints/pooling/base/serving.py index 90554aa634b..10f5cd6b594 100644 --- a/vllm/entrypoints/pooling/base/serving.py +++ b/vllm/entrypoints/pooling/base/serving.py @@ -1,5 +1,7 @@ # SPDX-License-Identifier: Apache-2.0 # SPDX-FileCopyrightText: Copyright contributors to the vLLM project + +from abc import ABC, abstractmethod from collections.abc import AsyncGenerator, Mapping from http import HTTPStatus from typing import ClassVar @@ -9,7 +11,7 @@ from fastapi.responses import Response from starlette.datastructures import Headers from vllm import PoolingParams, PoolingRequestOutput, envs -from vllm.config import ModelConfig +from vllm.config import VllmConfig from vllm.engine.protocol import EngineClient from vllm.entrypoints.chat_utils import ( ChatTemplateConfig, @@ -35,7 +37,7 @@ from vllm.utils.async_utils import merge_async_iterators from .io_processor import PoolingIOProcessor -class PoolingServing: +class PoolingServingBase(ABC): request_id_prefix: ClassVar[str] def __init__( @@ -50,10 +52,11 @@ class PoolingServing: return_tokens_as_token_ids: bool = False, log_error_stack: bool = False, ): - super().__init__() self.engine_client = engine_client self.models = models self.model_config = models.model_config + self.renderer = models.renderer + self.vllm_config = engine_client.vllm_config self.max_model_len = self.model_config.max_model_len self.request_logger = request_logger self.return_tokens_as_token_ids = return_tokens_as_token_ids @@ -63,31 +66,14 @@ class PoolingServing: chat_template_content_format=chat_template_content_format, trust_request_chat_template=trust_request_chat_template, ) - self.io_processor = self.init_io_processor( - model_config=models.model_config, - renderer=models.renderer, - chat_template_config=self.chat_template_config, - ) - - def init_io_processor( - self, - model_config: ModelConfig, - renderer: BaseRenderer, - chat_template_config: ChatTemplateConfig, - ) -> PoolingIOProcessor: - raise NotImplementedError + @abstractmethod async def __call__( self, request: AnyPoolingRequest, raw_request: Request | None = None, ) -> Response: - ctx = await self._init_ctx(request, raw_request) - await self.io_processor.pre_process_online_async(ctx) - await self._prepare_generators(ctx) - await self._collect_batch(ctx) - await self.io_processor.post_process_online_async(ctx) - return await self._build_response(ctx) + raise NotImplementedError async def _init_ctx( self, @@ -124,10 +110,8 @@ class PoolingServing: else await self._get_trace_headers(ctx.raw_request.headers) ) - if ctx.pooling_params is None: - pooling_params = self.io_processor.create_pooling_params(ctx.request) - else: - pooling_params = ctx.pooling_params + assert ctx.pooling_params is not None + pooling_params = ctx.pooling_params if isinstance(pooling_params, list): for params in pooling_params: @@ -190,6 +174,7 @@ class PoolingServing: ctx.final_res_batch = [res for res in final_res_batch if res is not None] + @abstractmethod async def _build_response( self, ctx: PoolingServeContext, @@ -355,3 +340,39 @@ class PoolingServing: params=params, lora_request=lora_request, ) + + +class PoolingServing(PoolingServingBase, ABC): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + self.io_processor = self.init_io_processor( + vllm_config=self.vllm_config, + renderer=self.renderer, + chat_template_config=self.chat_template_config, + ) + + @abstractmethod + def init_io_processor( + self, + vllm_config: VllmConfig, + renderer: BaseRenderer, + chat_template_config: ChatTemplateConfig, + ) -> PoolingIOProcessor: + raise NotImplementedError + + async def __call__( + self, + request: AnyPoolingRequest, + raw_request: Request | None = None, + ) -> Response: + ctx = await self._init_ctx(request, raw_request) + await self.io_processor.pre_process_online_async(ctx) + + if ctx.pooling_params is None: + ctx.pooling_params = self.io_processor.create_pooling_params(request) + + await self._prepare_generators(ctx) + await self._collect_batch(ctx) + await self.io_processor.post_process_online_async(ctx) + return await self._build_response(ctx) diff --git a/vllm/entrypoints/pooling/classify/io_processor.py b/vllm/entrypoints/pooling/classify/io_processor.py index ee73207dff5..9bb3774ab0b 100644 --- a/vllm/entrypoints/pooling/classify/io_processor.py +++ b/vllm/entrypoints/pooling/classify/io_processor.py @@ -5,4 +5,8 @@ from vllm.entrypoints.pooling.base.io_processor import PoolingIOProcessor class ClassifyIOProcessor(PoolingIOProcessor): - name = "classification" + name = "classify" + + +class TokenClassifyIOProcessor(PoolingIOProcessor): + name = "token_classify" diff --git a/vllm/entrypoints/pooling/classify/serving.py b/vllm/entrypoints/pooling/classify/serving.py index 24d4f9aacff..0a729075bce 100644 --- a/vllm/entrypoints/pooling/classify/serving.py +++ b/vllm/entrypoints/pooling/classify/serving.py @@ -6,14 +6,11 @@ from typing import TypeAlias import numpy as np from fastapi.responses import JSONResponse -from vllm.config import ModelConfig -from vllm.entrypoints.chat_utils import ChatTemplateConfig from vllm.entrypoints.openai.engine.protocol import UsageInfo from vllm.entrypoints.pooling.base.serving import PoolingServing from vllm.entrypoints.pooling.typing import PoolingServeContext from vllm.logger import init_logger from vllm.outputs import ClassificationOutput -from vllm.renderers import BaseRenderer from .io_processor import ClassifyIOProcessor from .protocol import ( @@ -31,17 +28,8 @@ ClassificationServeContext: TypeAlias = PoolingServeContext[ClassificationReques class ServingClassification(PoolingServing): request_id_prefix = "classify" - def init_io_processor( - self, - model_config: ModelConfig, - renderer: BaseRenderer, - chat_template_config: ChatTemplateConfig, - ) -> ClassifyIOProcessor: - return ClassifyIOProcessor( - model_config=model_config, - renderer=renderer, - chat_template_config=chat_template_config, - ) + def init_io_processor(self, *args, **kwargs) -> ClassifyIOProcessor: + return ClassifyIOProcessor(*args, **kwargs) async def _build_response( self, diff --git a/vllm/entrypoints/pooling/embed/io_processor.py b/vllm/entrypoints/pooling/embed/io_processor.py index 614f8e0d9d0..623fee4fd3b 100644 --- a/vllm/entrypoints/pooling/embed/io_processor.py +++ b/vllm/entrypoints/pooling/embed/io_processor.py @@ -37,7 +37,7 @@ logger = init_logger(__name__) class EmbedIOProcessor(PoolingIOProcessor): - name = "embedding" + name = "embed" def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) @@ -549,3 +549,7 @@ class EmbedIOProcessor(PoolingIOProcessor): request = ctx.request if request.truncate == "NONE" and request.max_tokens is not None: self._check_cohere_max_tokens(ctx.final_res_batch, request.max_tokens) + + +class TokenEmbedIOProcessor(PoolingIOProcessor): + name = "token_embed" diff --git a/vllm/entrypoints/pooling/embed/serving.py b/vllm/entrypoints/pooling/embed/serving.py index f0c33164591..3abf0c7f3fd 100644 --- a/vllm/entrypoints/pooling/embed/serving.py +++ b/vllm/entrypoints/pooling/embed/serving.py @@ -8,8 +8,6 @@ from typing import Literal, TypeAlias, cast from fastapi.responses import JSONResponse, Response, StreamingResponse from typing_extensions import assert_never -from vllm.config import ModelConfig -from vllm.entrypoints.chat_utils import ChatTemplateConfig from vllm.entrypoints.openai.engine.protocol import UsageInfo from vllm.entrypoints.pooling.base.serving import PoolingServing from vllm.entrypoints.pooling.embed.io_processor import EmbedIOProcessor @@ -33,12 +31,10 @@ from vllm.entrypoints.pooling.utils import ( ) from vllm.logger import init_logger from vllm.outputs import PoolingRequestOutput -from vllm.renderers import BaseRenderer from vllm.utils.serial_utils import EmbedDType, Endianness logger = init_logger(__name__) -JSONResponseCLS = get_json_response_cls() EmbeddingServeContext: TypeAlias = PoolingServeContext[EmbeddingRequest] @@ -49,17 +45,13 @@ class ServingEmbedding(PoolingServing): request_id_prefix = "embd" io_processor: EmbedIOProcessor - def init_io_processor( - self, - model_config: ModelConfig, - renderer: BaseRenderer, - chat_template_config: ChatTemplateConfig, - ) -> EmbedIOProcessor: - return EmbedIOProcessor( - model_config=model_config, - renderer=renderer, - chat_template_config=chat_template_config, - ) + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + self.json_response_cls = get_json_response_cls() + + def init_io_processor(self, *args, **kwargs) -> EmbedIOProcessor: + return EmbedIOProcessor(*args, **kwargs) async def _build_response( self, @@ -149,7 +141,7 @@ class ServingEmbedding(PoolingServing): data=items, usage=usage, ) - return JSONResponseCLS(content=response.model_dump()) + return self.json_response_cls(content=response.model_dump()) def _openai_bytes_response( self, @@ -190,8 +182,8 @@ class ServingEmbedding(PoolingServing): media_type=response.media_type, ) - @staticmethod def _build_cohere_response_from_ctx( + self, ctx: PoolingServeContext, ) -> JSONResponse: request = ctx.request @@ -218,4 +210,4 @@ class ServingEmbedding(PoolingServing): ), ), ) - return JSONResponse(content=response.model_dump(exclude_none=True)) + return self.json_response_cls(content=response.model_dump(exclude_none=True)) diff --git a/vllm/entrypoints/pooling/io_processor_factories.py b/vllm/entrypoints/pooling/io_processor_factories.py index 71033bd2398..de60a746a35 100644 --- a/vllm/entrypoints/pooling/io_processor_factories.py +++ b/vllm/entrypoints/pooling/io_processor_factories.py @@ -1,42 +1,69 @@ # SPDX-License-Identifier: Apache-2.0 # SPDX-FileCopyrightText: Copyright contributors to the vLLM project - -from vllm.config import ModelConfig +from vllm.config import VllmConfig from vllm.entrypoints.chat_utils import ChatTemplateConfig -from vllm.entrypoints.pooling.base.io_processor import PoolingIOProcessor -from vllm.entrypoints.pooling.scoring.io_processor import ScoringIOProcessors -from vllm.entrypoints.pooling.utils import enable_scoring_api +from vllm.plugins.io_processors import has_io_processor from vllm.renderers import BaseRenderer from vllm.tasks import SupportedTask +from .base.io_processor import PoolingIOProcessor +from .utils import enable_scoring_api + def init_pooling_io_processors( supported_tasks: tuple[SupportedTask, ...], - model_config: ModelConfig, + vllm_config: VllmConfig, renderer: BaseRenderer, chat_template_config: ChatTemplateConfig, ) -> dict[str, PoolingIOProcessor]: - processors: list[tuple[str, type[PoolingIOProcessor]]] = [] + model_config = vllm_config.model_config + processors: dict[str, type[PoolingIOProcessor]] = {} + if "classify" in supported_tasks: - from vllm.entrypoints.pooling.classify.io_processor import ClassifyIOProcessor + from .classify.io_processor import ClassifyIOProcessor + + processors["classify"] = ClassifyIOProcessor + + if "token_classify" in supported_tasks: + from .classify.io_processor import TokenClassifyIOProcessor + + processors["token_classify"] = TokenClassifyIOProcessor - processors.append(("classify", ClassifyIOProcessor)) if "embed" in supported_tasks: - from vllm.entrypoints.pooling.embed.io_processor import EmbedIOProcessor + from .embed.io_processor import EmbedIOProcessor - processors.append(("embed", EmbedIOProcessor)) + processors["embed"] = EmbedIOProcessor + + if "token_embed" in supported_tasks: + from .embed.io_processor import TokenEmbedIOProcessor + + processors["token_embed"] = TokenEmbedIOProcessor + + if has_io_processor( + vllm_config, + model_config.io_processor_plugin, + ): + from .pooling.io_processor import PluginWithIOProcessorPlugins + + processors["plugin"] = PluginWithIOProcessorPlugins + elif "plugin" in supported_tasks: + from .pooling.io_processor import PluginWithoutIOProcessorPlugins + + processors["plugin"] = PluginWithoutIOProcessorPlugins if enable_scoring_api(supported_tasks, model_config): score_type = model_config.score_type + from .scoring.io_processor import ScoringIOProcessors + if score_type is not None and score_type in ScoringIOProcessors: - processors.append((score_type, ScoringIOProcessors[score_type])) + processors[score_type] = ScoringIOProcessors[score_type] return { task: processor_cls( - model_config=model_config, + vllm_config=vllm_config, renderer=renderer, chat_template_config=chat_template_config, ) - for task, processor_cls in processors + for task, processor_cls in processors.items() } diff --git a/vllm/entrypoints/pooling/pooling/api_router.py b/vllm/entrypoints/pooling/pooling/api_router.py index f63a8edf6ca..a08570038c3 100644 --- a/vllm/entrypoints/pooling/pooling/api_router.py +++ b/vllm/entrypoints/pooling/pooling/api_router.py @@ -3,24 +3,17 @@ from http import HTTPStatus from fastapi import APIRouter, Depends, Request -from fastapi.responses import JSONResponse, StreamingResponse -from typing_extensions import assert_never from vllm.entrypoints.openai.engine.protocol import ErrorResponse from vllm.entrypoints.openai.utils import validate_json_request -from vllm.entrypoints.pooling.pooling.protocol import ( - IOProcessorResponse, - PoolingBytesResponse, - PoolingRequest, - PoolingResponse, -) -from vllm.entrypoints.pooling.pooling.serving import OpenAIServingPooling +from vllm.entrypoints.pooling.pooling.protocol import PoolingRequest +from vllm.entrypoints.pooling.pooling.serving import ServingPooling from vllm.entrypoints.utils import load_aware_call, with_cancellation router = APIRouter() -def pooling(request: Request) -> OpenAIServingPooling | None: +def pooling(request: Request) -> ServingPooling | None: return request.app.state.serving_pooling @@ -39,19 +32,4 @@ async def create_pooling(request: PoolingRequest, raw_request: Request): if handler is None: raise NotImplementedError("The model does not support Pooling API") - generator = await handler.create_pooling(request, raw_request) - - if isinstance(generator, ErrorResponse): - return JSONResponse( - content=generator.model_dump(), status_code=generator.error.code - ) - elif isinstance(generator, (PoolingResponse, IOProcessorResponse)): - return JSONResponse(content=generator.model_dump()) - elif isinstance(generator, PoolingBytesResponse): - return StreamingResponse( - content=generator.content, - headers=generator.headers, - media_type=generator.media_type, - ) - - assert_never(generator) + return await handler(request, raw_request) diff --git a/vllm/entrypoints/pooling/pooling/io_processor.py b/vllm/entrypoints/pooling/pooling/io_processor.py new file mode 100644 index 00000000000..31f860144ea --- /dev/null +++ b/vllm/entrypoints/pooling/pooling/io_processor.py @@ -0,0 +1,156 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright contributors to the vLLM project +from collections.abc import Sequence +from typing import Any + +from vllm import PoolingParams, PoolingRequestOutput +from vllm.entrypoints.pooling.base.io_processor import PoolingIOProcessor +from vllm.inputs import EngineInput +from vllm.logger import init_logger +from vllm.plugins.io_processors import get_io_processor +from vllm.renderers.inputs.preprocess import parse_model_prompt, prompt_to_seq + +from ..typing import OfflineInputsContext, OfflineOutputsContext, PoolingServeContext +from .protocol import IOProcessorRequest, IOProcessorResponse + +logger = init_logger(__name__) + + +class PluginWithoutIOProcessorPlugins(PoolingIOProcessor): + name = "plugin" + + +class PluginWithIOProcessorPlugins(PoolingIOProcessor): + """IO Processor plugins are a feature that allows pre- and post-processing + of the model input and output for pooling models.""" + + name = "plugin" + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + io_processor = get_io_processor( + self.vllm_config, + self.renderer, + self.model_config.io_processor_plugin, + ) + + assert io_processor is not None + self.io_processor = io_processor + + ####################################### + # online APIs + + def pre_process_online(self, ctx: PoolingServeContext): + assert isinstance(ctx.request, IOProcessorRequest) + + validated_prompt = self.io_processor.parse_data(ctx.request.data) + + raw_prompts = self.io_processor.pre_process( + prompt=validated_prompt, request_id=ctx.request_id + ) + + parsed_prompts = [ + ( + prompt + if isinstance(prompt, bytes) + else parse_model_prompt(self.model_config, prompt) + ) + for prompt in prompt_to_seq(raw_prompts) + ] + + tok_params = ctx.request.build_tok_params(self.model_config) + + ctx.engine_inputs = self.renderer.render_cmpl( + parsed_prompts, + tok_params, + prompt_extras={ + k: v + for k in ("mm_processor_kwargs", "cache_salt") + if (v := getattr(ctx.request, k, None)) is not None + }, + ) + + pooling_params = self.io_processor.merge_pooling_params() + if pooling_params.task is None: + pooling_params.task = "plugin" + ctx.pooling_params = pooling_params + + def post_process_online( + self, + ctx: PoolingServeContext, + ): + output = self.io_processor.post_process( + ctx.final_res_batch, + request_id=ctx.request_id, + ) + + if callable( + output_to_response := getattr(self.io_processor, "output_to_response", None) + ): + logger.warning_once( + "`IOProcessor.output_to_response` is deprecated. To ensure " + "consistency between offline and online APIs, " + "`IOProcessorResponse` will become a transparent wrapper " + "around output data from v0.19 onwards.", + ) + + if hasattr(output, "request_id") and output.request_id is None: + output.request_id = ctx.request_id # type: ignore + + ctx.response = output_to_response(output) # type: ignore + else: + ctx.response = IOProcessorResponse(request_id=ctx.request_id, data=output) + + ####################################### + # offline APIs + + def pre_process_offline(self, ctx: OfflineInputsContext) -> Sequence[EngineInput]: + assert isinstance(ctx.prompts, dict) and "data" in ctx.prompts + assert ctx.pooling_params is not None + + # Validate the request data is valid for the loaded plugin + prompt_data = ctx.prompts.get("data") + if prompt_data is None: + raise ValueError( + "The 'data' field of the prompt is expected to contain " + "the prompt data and it cannot be None. " + "Refer to the documentation of the IOProcessor " + "in use for more details." + ) + validated_prompt = self.io_processor.parse_data(prompt_data) + + # obtain the actual model prompts from the pre-processor + prompts = self.io_processor.pre_process(prompt=validated_prompt) + prompts_seq = prompt_to_seq(prompts) + + params_seq: list[PoolingParams] = [ + self.io_processor.merge_pooling_params(param) + for param in self._params_to_seq( + ctx.pooling_params, + len(prompts_seq), + ) + ] + for p in params_seq: + if p.task is None: + p.task = "plugin" + + ctx.pooling_params = params_seq + ctx.prompts = prompts_seq + return super().pre_process_offline(ctx) + + def post_process_offline( + self, + ctx: OfflineOutputsContext, + ) -> list[PoolingRequestOutput]: + processed_outputs = self.io_processor.post_process(ctx.outputs) + + return [ + PoolingRequestOutput[Any]( + request_id="", + outputs=processed_outputs, + num_cached_tokens=getattr(processed_outputs, "num_cached_tokens", 0), + prompt_token_ids=[], + finished=True, + ) + ] diff --git a/vllm/entrypoints/pooling/pooling/serving.py b/vllm/entrypoints/pooling/pooling/serving.py index 4706684f363..3d16c1f2cc9 100644 --- a/vllm/entrypoints/pooling/pooling/serving.py +++ b/vllm/entrypoints/pooling/pooling/serving.py @@ -1,252 +1,157 @@ # SPDX-License-Identifier: Apache-2.0 # SPDX-FileCopyrightText: Copyright contributors to the vLLM project -import asyncio + import json -import time -from collections.abc import AsyncGenerator, Callable, Sequence +from collections.abc import Callable from functools import partial -from typing import Final, Literal, cast +from typing import Literal, cast from fastapi import Request +from fastapi.responses import JSONResponse, Response, StreamingResponse from typing_extensions import assert_never -from vllm.engine.protocol import EngineClient -from vllm.entrypoints.chat_utils import ChatTemplateContentFormatOption -from vllm.entrypoints.logger import RequestLogger -from vllm.entrypoints.openai.engine.protocol import ErrorResponse, UsageInfo -from vllm.entrypoints.openai.engine.serving import OpenAIServing -from vllm.entrypoints.openai.models.serving import OpenAIServingModels +from vllm.entrypoints.openai.engine.protocol import UsageInfo +from vllm.entrypoints.pooling.base.serving import PoolingServingBase +from vllm.entrypoints.pooling.io_processor_factories import init_pooling_io_processors from vllm.entrypoints.pooling.pooling.protocol import ( IOProcessorRequest, - IOProcessorResponse, PoolingBytesResponse, - PoolingChatRequest, - PoolingCompletionRequest, PoolingRequest, PoolingResponse, PoolingResponseData, ) +from vllm.entrypoints.pooling.typing import AnyPoolingRequest, PoolingServeContext from vllm.entrypoints.pooling.utils import ( encode_pooling_bytes, encode_pooling_output_base64, encode_pooling_output_float, + get_json_response_cls, ) -from vllm.entrypoints.serve.render.serving import OpenAIServingRender -from vllm.inputs import EngineInput from vllm.logger import init_logger from vllm.outputs import PoolingRequestOutput -from vllm.renderers.inputs.preprocess import prompt_to_seq from vllm.tasks import SupportedTask -from vllm.utils.async_utils import merge_async_iterators -from vllm.utils.serial_utils import EmbedDType, EncodingFormat, Endianness +from vllm.utils.serial_utils import EmbedDType, Endianness logger = init_logger(__name__) -class OpenAIServingPooling(OpenAIServing): +class ServingPooling(PoolingServingBase): + request_id_prefix = "pooling" + def __init__( self, - engine_client: EngineClient, - models: OpenAIServingModels, - openai_serving_render: OpenAIServingRender, + *args, supported_tasks: tuple[SupportedTask, ...], - *, - request_logger: RequestLogger | None, - chat_template: str | None, - chat_template_content_format: ChatTemplateContentFormatOption, - trust_request_chat_template: bool = False, - ) -> None: - super().__init__( - engine_client=engine_client, - models=models, - request_logger=request_logger, - ) + **kwargs, + ): + super().__init__(*args, **kwargs) + self.supported_tasks = supported_tasks self.pooling_task = self.model_config.get_pooling_task(supported_tasks) - self.openai_serving_render = openai_serving_render - self.chat_template = chat_template - self.chat_template_content_format: Final = chat_template_content_format - self.trust_request_chat_template = trust_request_chat_template + self.io_processors = init_pooling_io_processors( + supported_tasks=supported_tasks, + vllm_config=self.vllm_config, + renderer=self.renderer, + chat_template_config=self.chat_template_config, + ) + self.json_response_cls = get_json_response_cls() - async def create_pooling( + async def __call__( self, - request: PoolingRequest, + request: AnyPoolingRequest, raw_request: Request | None = None, - ) -> PoolingResponse | IOProcessorResponse | PoolingBytesResponse | ErrorResponse: - """ - See https://platform.openai.com/docs/api-reference/embeddings/create - for the API specification. This API mimics the OpenAI Embedding API. - """ - error_check_ret = await self._check_model(request) - if error_check_ret is not None: - return error_check_ret + ) -> Response: + assert isinstance(request, PoolingRequest) + pooling_task = self._verify_pooling_task(request) - model_name = self.models.model_name() + io_processor = self.io_processors[pooling_task] + ctx = await self._init_ctx(request, raw_request) - request_id = f"pool-{self._base_request_id(raw_request)}" - created_time = int(time.time()) + await io_processor.pre_process_online_async(ctx) - lora_request = self._maybe_get_adapters(request) + if ctx.pooling_params is None: + ctx.pooling_params = io_processor.create_pooling_params(request) + + await self._prepare_generators(ctx) + await self._collect_batch(ctx) + + await io_processor.post_process_online_async(ctx) + return await self._build_response(ctx) + + def _verify_pooling_task(self, request: PoolingRequest) -> str: + if getattr(request, "dimensions", None) is not None: + raise ValueError("dimensions is currently not supported") if request.task is None: request.task = self.pooling_task - if getattr(request, "dimensions", None) is not None: - return self.create_error_response("dimensions is currently not supported") + if isinstance(request, IOProcessorRequest): + request.task = "plugin" + + assert request.task is not None + pooling_task = request.task # plugin task uses io_processor.parse_request to verify inputs - if request.task != "plugin" and request.task != self.pooling_task: - if request.task not in self.supported_tasks: + if pooling_task != "plugin" and pooling_task != self.pooling_task: + if pooling_task not in self.io_processors: raise ValueError( - f"Unsupported task: {request.task!r} " + f"Unsupported task: {pooling_task!r} " f"Supported tasks: {self.supported_tasks}" ) else: logger.warning_once( "Pooling multitask support is deprecated and will be removed " "in v0.20. When the default pooling task is not what you want, you " - 'need to manually specify it via --pooler-config.task "%s". ', - request.task, + "need to manually specify it via --pooler-config.task %s. ", + pooling_task, ) - engine_inputs: Sequence[EngineInput] - if use_io_processor := isinstance(request, IOProcessorRequest): - if self.io_processor is None: - raise ValueError( - "No IOProcessor plugin installed. Please refer " - "to the documentation and to the " - "'prithvi_geospatial_mae_io_processor' " - "offline inference example for more details." - ) - - validated_prompt = self.io_processor.parse_data(request.data) - - raw_prompts = await self.io_processor.pre_process_async( - prompt=validated_prompt, request_id=request_id - ) - engine_inputs = await self.openai_serving_render.preprocess_cmpl( - request, - prompt_to_seq(raw_prompts), - ) - elif isinstance(request, PoolingChatRequest): - error_check_ret = self.openai_serving_render.validate_chat_template( - request_chat_template=request.chat_template, - chat_template_kwargs=request.chat_template_kwargs, - trust_request_chat_template=self.trust_request_chat_template, - ) - if error_check_ret is not None: - return error_check_ret - - _, engine_inputs = await self.openai_serving_render.preprocess_chat( - request, - request.messages, - default_template=self.chat_template, - default_template_content_format=self.chat_template_content_format, - default_template_kwargs=None, - ) - elif isinstance(request, PoolingCompletionRequest): - engine_inputs = await self.openai_serving_render.preprocess_completion( - request, - prompt_input=request.input, - prompt_embeds=None, - ) - else: - raise ValueError(f"Unsupported request of type {type(request)}") - - # Schedule the request and get the result generator. - generators: list[AsyncGenerator[PoolingRequestOutput, None]] = [] - if use_io_processor: - assert self.io_processor is not None - - pooling_params = self.io_processor.merge_pooling_params() - if pooling_params.task is None: - pooling_params.task = "plugin" - else: - pooling_params = request.to_pooling_params() # type: ignore - - for i, engine_input in enumerate(engine_inputs): - request_id_item = f"{request_id}-{i}" - - self._log_inputs( - request_id_item, - engine_input, - params=pooling_params, - lora_request=lora_request, + if pooling_task == "plugin" and "plugin" not in self.io_processors: + raise ValueError( + "No IOProcessor plugin installed. Please refer " + "to the documentation and to the " + "'prithvi_geospatial_mae_io_processor' " + "offline inference example for more details." ) - trace_headers = ( - None - if raw_request is None - else await self._get_trace_headers(raw_request.headers) + return pooling_task + + async def _build_response( + self, + ctx: PoolingServeContext, + ) -> Response: + if ctx.response is not None: + # for IOProcessorResponse + return self.json_response_cls(content=ctx.response.model_dump()) + + encoding_format = ctx.request.encoding_format + embed_dtype = ctx.request.embed_dtype + endianness = ctx.request.endianness + + if encoding_format == "float" or encoding_format == "base64": + return self.request_output_to_pooling_json_response( + ctx.final_res_batch, + ctx.request_id, + ctx.created_time, + ctx.model_name, + encoding_format, + embed_dtype, + endianness, ) - generator = self.engine_client.encode( - engine_input, - pooling_params, - request_id_item, - lora_request=lora_request, - trace_headers=trace_headers, - priority=request.priority, + if encoding_format == "bytes" or encoding_format == "bytes_only": + return self.request_output_to_pooling_bytes_response( + ctx.final_res_batch, + ctx.request_id, + ctx.created_time, + ctx.model_name, + encoding_format, + embed_dtype, + endianness, ) - generators.append(generator) - - result_generator = merge_async_iterators(*generators) - - if use_io_processor: - assert self.io_processor is not None - output = await self.io_processor.post_process_async( - result_generator, - request_id=request_id, - ) - - if callable( - output_to_response := getattr( - self.io_processor, "output_to_response", None - ) - ): - logger.warning_once( - "`IOProcessor.output_to_response` is deprecated. To ensure " - "consistency between offline and online APIs, " - "`IOProcessorResponse` will become a transparent wrapper " - "around output data from v0.19 onwards.", - ) - - if hasattr(output, "request_id") and output.request_id is None: - output.request_id = request_id # type: ignore - - return output_to_response(output) # type: ignore - - return IOProcessorResponse(request_id=request_id, data=output) - - assert isinstance(request, (PoolingCompletionRequest, PoolingChatRequest)) - num_prompts = len(engine_inputs) - - # Non-streaming response - final_res_batch: list[PoolingRequestOutput | None] - final_res_batch = [None] * num_prompts - try: - async for i, res in result_generator: - final_res_batch[i] = res - - assert all(final_res is not None for final_res in final_res_batch) - - final_res_batch_checked = cast(list[PoolingRequestOutput], final_res_batch) - - response = self.request_output_to_pooling_response( - final_res_batch_checked, - request_id, - created_time, - model_name, - request.encoding_format, - request.embed_dtype, - request.endianness, - ) - except asyncio.CancelledError: - return self.create_error_response("Client disconnected") - - return response + assert_never(encoding_format) def request_output_to_pooling_json_response( self, @@ -257,7 +162,7 @@ class OpenAIServingPooling(OpenAIServing): encoding_format: Literal["float", "base64"], embed_dtype: EmbedDType, endianness: Endianness, - ) -> PoolingResponse: + ) -> JSONResponse: encode_fn = cast( Callable[[PoolingRequestOutput], list[float] | str], ( @@ -289,13 +194,14 @@ class OpenAIServingPooling(OpenAIServing): total_tokens=num_prompt_tokens, ) - return PoolingResponse( + response = PoolingResponse( id=request_id, created=created_time, model=model_name, data=items, usage=usage, ) + return self.json_response_cls(content=response.model_dump()) def request_output_to_pooling_bytes_response( self, @@ -306,7 +212,7 @@ class OpenAIServingPooling(OpenAIServing): encoding_format: Literal["bytes", "bytes_only"], embed_dtype: EmbedDType, endianness: Endianness, - ) -> PoolingBytesResponse: + ) -> StreamingResponse: content, items, usage = encode_pooling_bytes( pooling_outputs=final_res_batch, embed_dtype=embed_dtype, @@ -329,38 +235,10 @@ class OpenAIServingPooling(OpenAIServing): } ) - return PoolingBytesResponse(content=content, headers=headers) + response = PoolingBytesResponse(content=content, headers=headers) - def request_output_to_pooling_response( - self, - final_res_batch: list[PoolingRequestOutput], - request_id: str, - created_time: int, - model_name: str, - encoding_format: EncodingFormat, - embed_dtype: EmbedDType, - endianness: Endianness, - ) -> PoolingResponse | PoolingBytesResponse: - if encoding_format == "float" or encoding_format == "base64": - return self.request_output_to_pooling_json_response( - final_res_batch, - request_id, - created_time, - model_name, - encoding_format, - embed_dtype, - endianness, - ) - - if encoding_format == "bytes" or encoding_format == "bytes_only": - return self.request_output_to_pooling_bytes_response( - final_res_batch, - request_id, - created_time, - model_name, - encoding_format, - embed_dtype, - endianness, - ) - - assert_never(encoding_format) + return StreamingResponse( + content=response.content, + headers=response.headers, + media_type=response.media_type, + ) diff --git a/vllm/entrypoints/pooling/scoring/io_processor.py b/vllm/entrypoints/pooling/scoring/io_processor.py index c520eb5ceb3..dd505c79cf1 100644 --- a/vllm/entrypoints/pooling/scoring/io_processor.py +++ b/vllm/entrypoints/pooling/scoring/io_processor.py @@ -278,7 +278,7 @@ class CrossEncoderIOProcessor(ScoringIOProcessor): def pre_process_offline(self, ctx: OfflineInputsContext) -> Sequence[EngineInput]: assert isinstance(ctx.prompts, ScoringData) - assert not isinstance(ctx.pooling_params, list) + assert not isinstance(ctx.pooling_params, Sequence) tok_params = self.renderer.default_cmpl_tok_params.with_kwargs( **(ctx.tokenization_kwargs or {}) diff --git a/vllm/entrypoints/pooling/scoring/serving.py b/vllm/entrypoints/pooling/scoring/serving.py index de5b5797ce4..fc52075611e 100644 --- a/vllm/entrypoints/pooling/scoring/serving.py +++ b/vllm/entrypoints/pooling/scoring/serving.py @@ -4,15 +4,13 @@ from fastapi.responses import JSONResponse, Response from vllm import PoolingParams -from vllm.config import ModelConfig +from vllm.config import VllmConfig from vllm.engine.protocol import EngineClient -from vllm.entrypoints.chat_utils import ChatTemplateConfig from vllm.entrypoints.openai.engine.protocol import UsageInfo from vllm.entrypoints.pooling.base.io_processor import PoolingIOProcessor from vllm.entrypoints.pooling.base.serving import PoolingServing from vllm.logger import init_logger from vllm.outputs import PoolingRequestOutput, ScoringRequestOutput -from vllm.renderers import BaseRenderer from vllm.v1.pool.late_interaction import ( build_late_interaction_doc_params, build_late_interaction_query_params, @@ -52,22 +50,17 @@ class ServingScores(PoolingServing): super().__init__(engine_client, *args, **kwargs) def init_io_processor( - self, - model_config: ModelConfig, - renderer: BaseRenderer, - chat_template_config: ChatTemplateConfig, + self, vllm_config: VllmConfig, *args, **kwargs ) -> PoolingIOProcessor: + model_config = vllm_config.model_config + score_type: str = model_config.score_type if self.enable_flash_late_interaction: score_type = "flash-late-interaction" assert score_type in ScoringIOProcessors processor_cls = ScoringIOProcessors[score_type] - return processor_cls( - model_config=model_config, - renderer=renderer, - chat_template_config=chat_template_config, - ) + return processor_cls(vllm_config, *args, **kwargs) async def __call__(self, *args, **kwargs) -> Response: if not self.enable_flash_late_interaction: diff --git a/vllm/entrypoints/pooling/typing.py b/vllm/entrypoints/pooling/typing.py index 66dd9dd4d2b..ead772251f1 100644 --- a/vllm/entrypoints/pooling/typing.py +++ b/vllm/entrypoints/pooling/typing.py @@ -30,7 +30,7 @@ from vllm.entrypoints.pooling.pooling.protocol import ( ) from vllm.entrypoints.pooling.scoring.protocol import ScoringRequest, ScoringResponse from vllm.entrypoints.pooling.scoring.typing import ScoringData -from vllm.inputs import EngineInput +from vllm.inputs import DataPrompt, EngineInput from vllm.lora.request import LoRARequest PoolingCompletionLikeRequest: TypeAlias = ( @@ -86,11 +86,14 @@ class PoolingServeContext(Generic[PoolingRequestT]): ## for bi-encoder & late-interaction n_queries: int | None = None + ## for IOProcessorResponse + response: Any | None = None + @dataclass class OfflineInputsContext: - prompts: PromptType | Sequence[PromptType] | ScoringData - pooling_params: PoolingParams | list[PoolingParams] | None = None + prompts: PromptType | Sequence[PromptType] | DataPrompt | ScoringData + pooling_params: PoolingParams | Sequence[PoolingParams] tokenization_kwargs: dict[str, Any] | None = None chat_template: str | None = None diff --git a/vllm/entrypoints/sagemaker/api_router.py b/vllm/entrypoints/sagemaker/api_router.py index 45f5613bf5e..1d63793df39 100644 --- a/vllm/entrypoints/sagemaker/api_router.py +++ b/vllm/entrypoints/sagemaker/api_router.py @@ -14,7 +14,7 @@ from vllm.config import ModelConfig from vllm.entrypoints.openai.engine.protocol import ErrorResponse from vllm.entrypoints.openai.engine.serving import OpenAIServing from vllm.entrypoints.openai.utils import validate_json_request -from vllm.entrypoints.pooling.base.serving import PoolingServing +from vllm.entrypoints.pooling.base.serving import PoolingServingBase from vllm.entrypoints.pooling.utils import enable_scoring_api from vllm.entrypoints.serve.instrumentator.basic import base from vllm.entrypoints.serve.instrumentator.health import health @@ -23,7 +23,7 @@ from vllm.tasks import POOLING_TASKS, SupportedTask # TODO: RequestType = TypeForm[BaseModel] when recognized by type checkers # (requires typing_extensions >= 4.13) RequestType = Any -GetHandlerFn = Callable[[Request], OpenAIServing | PoolingServing | None] +GetHandlerFn = Callable[[Request], OpenAIServing | PoolingServingBase | None] EndpointFn = Callable[[RequestType, Request], Awaitable[Any]] diff --git a/vllm/entrypoints/serve/render/serving.py b/vllm/entrypoints/serve/render/serving.py index 2aaa83e7564..c99c014413e 100644 --- a/vllm/entrypoints/serve/render/serving.py +++ b/vllm/entrypoints/serve/render/serving.py @@ -65,7 +65,6 @@ class OpenAIServingRender: self, model_config: ModelConfig, renderer: BaseRenderer, - io_processor: Any, model_registry: OpenAIModelRegistry, *, request_logger: RequestLogger | None, @@ -81,7 +80,6 @@ class OpenAIServingRender: ) -> None: self.model_config = model_config self.renderer = renderer - self.io_processor = io_processor self.model_registry = model_registry self.request_logger = request_logger self.chat_template = chat_template diff --git a/vllm/plugins/io_processors/__init__.py b/vllm/plugins/io_processors/__init__.py index c8cb4f18527..c502f4f744d 100644 --- a/vllm/plugins/io_processors/__init__.py +++ b/vllm/plugins/io_processors/__init__.py @@ -12,6 +12,23 @@ from vllm.utils.import_utils import resolve_obj_by_qualname logger = logging.getLogger(__name__) +def has_io_processor( + vllm_config: VllmConfig, + plugin_from_init: str | None = None, +): + if plugin_from_init: + model_plugin = plugin_from_init + else: + # A plugin can be specified via the model config + # Retrieve the model specific plugin if available + # This is using a custom field in the hf_config for the model + hf_config = vllm_config.model_config.hf_config.to_dict() + config_plugin = hf_config.get("io_processor_plugin") + model_plugin = config_plugin + + return model_plugin is not None + + def get_io_processor( vllm_config: VllmConfig, renderer: BaseRenderer, diff --git a/vllm/v1/engine/async_llm.py b/vllm/v1/engine/async_llm.py index 7ff324f120d..1c87d9ec094 100644 --- a/vllm/v1/engine/async_llm.py +++ b/vllm/v1/engine/async_llm.py @@ -26,7 +26,6 @@ from vllm.logger import init_logger from vllm.lora.request import LoRARequest from vllm.multimodal import MULTIMODAL_REGISTRY, MultiModalRegistry from vllm.outputs import STREAM_FINISHED, PoolingRequestOutput, RequestOutput -from vllm.plugins.io_processors import get_io_processor from vllm.pooling_params import PoolingParams from vllm.renderers import renderer_from_config from vllm.renderers.inputs.preprocess import extract_prompt_components @@ -133,11 +132,6 @@ class AsyncLLM(EngineClient): ) self.renderer = renderer = renderer_from_config(self.vllm_config) - self.io_processor = get_io_processor( - self.vllm_config, - self.renderer, - self.model_config.io_processor_plugin, - ) # Convert EngineInput --> EngineCoreRequest. self.input_processor = InputProcessor(self.vllm_config, renderer) diff --git a/vllm/v1/engine/llm_engine.py b/vllm/v1/engine/llm_engine.py index 4b6a7ba44e1..d0545651b96 100644 --- a/vllm/v1/engine/llm_engine.py +++ b/vllm/v1/engine/llm_engine.py @@ -19,7 +19,6 @@ from vllm.logger import init_logger from vllm.lora.request import LoRARequest from vllm.multimodal import MULTIMODAL_REGISTRY, MultiModalRegistry from vllm.outputs import PoolingRequestOutput, RequestOutput -from vllm.plugins.io_processors import get_io_processor from vllm.pooling_params import PoolingParams from vllm.renderers import renderer_from_config from vllm.renderers.inputs.preprocess import extract_prompt_components @@ -90,11 +89,6 @@ class LLMEngine: self.should_execute_dummy_batch = False self.renderer = renderer = renderer_from_config(self.vllm_config) - self.io_processor = get_io_processor( - self.vllm_config, - self.renderer, - self.model_config.io_processor_plugin, - ) # Convert EngineInput --> EngineCoreRequest. self.input_processor = InputProcessor(self.vllm_config, renderer) From d87fb264df266652813a5c9347b1088a189e06c7 Mon Sep 17 00:00:00 2001 From: Harry Mellor <19981378+hmellor@users.noreply.github.com> Date: Thu, 9 Apr 2026 12:35:00 +0200 Subject: [PATCH 019/199] [Docs] Bring README updates into docs README (#39397) Signed-off-by: Harry Mellor <19981378+hmellor@users.noreply.github.com> --- docs/README.md | 40 +++++++++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/docs/README.md b/docs/README.md index 4b480c463ab..2bdc3e1a3e4 100644 --- a/docs/README.md +++ b/docs/README.md @@ -25,7 +25,7 @@ hide: vLLM is a fast and easy-to-use library for LLM inference and serving. -Originally developed in the [Sky Computing Lab](https://sky.cs.berkeley.edu) at UC Berkeley, vLLM has evolved into a community-driven project with contributions from both academia and industry. +Originally developed in the [Sky Computing Lab](https://sky.cs.berkeley.edu) at UC Berkeley, vLLM has grown into one of the most active open-source AI projects built and maintained by a diverse community of many dozens of academic institutions and companies from over 2000 contributors. Where to get started with vLLM depends on the type of user. If you are looking to: @@ -42,23 +42,37 @@ vLLM is fast with: - State-of-the-art serving throughput - Efficient management of attention key and value memory with [**PagedAttention**](https://blog.vllm.ai/2023/06/20/vllm.html) -- Continuous batching of incoming requests -- Fast model execution with CUDA/HIP graph -- Quantization: [GPTQ](https://arxiv.org/abs/2210.17323), [AWQ](https://arxiv.org/abs/2306.00978), INT4, INT8, and FP8 -- Optimized CUDA kernels, including integration with FlashAttention and FlashInfer. -- Speculative decoding -- Chunked prefill +- Continuous batching of incoming requests, chunked prefill, prefix caching +- Fast and flexible model execution with piecewise and full CUDA/HIP graphs +- Quantization: FP8, MXFP8/MXFP4, NVFP4, INT8, INT4, GPTQ/AWQ, GGUF, compressed-tensors, ModelOpt, TorchAO, and [more](https://docs.vllm.ai/en/latest/features/quantization/index.html) +- Optimized attention kernels including FlashAttention, FlashInfer, TRTLLM-GEN, FlashMLA, and Triton +- Optimized GEMM/MoE kernels for various precisions using CUTLASS, TRTLLM-GEN, CuTeDSL +- Speculative decoding including n-gram, suffix, EAGLE, DFlash +- Automatic kernel generation and graph-level transformations using torch.compile +- Disaggregated prefill, decode, and encode vLLM is flexible and easy to use with: -- Seamless integration with popular HuggingFace models +- Seamless integration with popular Hugging Face models - High-throughput serving with various decoding algorithms, including *parallel sampling*, *beam search*, and more -- Tensor, pipeline, data and expert parallelism support for distributed inference +- Tensor, pipeline, data, expert, and context parallelism for distributed inference - Streaming outputs -- OpenAI-compatible API server -- Support for NVIDIA GPUs, AMD CPUs and GPUs, Intel CPUs and GPUs, PowerPC CPUs, Arm CPUs, and TPU. Additionally, support for diverse hardware plugins such as Intel Gaudi, IBM Spyre and Huawei Ascend. -- Prefix caching support -- Multi-LoRA support +- Generation of structured outputs using xgrammar or guidance +- Tool calling and reasoning parsers +- OpenAI-compatible API server, plus Anthropic Messages API and gRPC support +- Efficient multi-LoRA support for dense and MoE layers +- Support for NVIDIA GPUs, AMD GPUs, and x86/ARM/PowerPC CPUs. Additionally, diverse hardware plugins such as Google TPUs, Intel Gaudi, IBM Spyre, Huawei Ascend, Rebellions NPU, Apple Silicon, MetaX GPU, and more. + +vLLM seamlessly supports 200+ model architectures on HuggingFace, including: + +- Decoder-only LLMs (e.g., Llama, Qwen, Gemma) +- Mixture-of-Expert LLMs (e.g., Mixtral, DeepSeek-V3, Qwen-MoE, GPT-OSS) +- Hybrid attention and state-space models (e.g., Mamba, Qwen3.5) +- Multi-modal models (e.g., LLaVA, Qwen-VL, Pixtral) +- Embedding and retrieval models (e.g., E5-Mistral, GTE, ColBERT) +- Reward and classification models (e.g., Qwen-Math) + +Find the full list of supported models [here](./models/supported_models.md). For more information, check out the following: From c8d98f81f676552c263f35bbde55e6edbe81b4e8 Mon Sep 17 00:00:00 2001 From: Nick Hill Date: Thu, 9 Apr 2026 03:56:15 -0700 Subject: [PATCH 020/199] [Core] Simplify API server handshake (#39364) Signed-off-by: Nick Hill --- vllm/entrypoints/cli/serve.py | 29 ++++++--------------- vllm/v1/engine/__init__.py | 12 ++++----- vllm/v1/engine/core.py | 18 ++++++------- vllm/v1/engine/core_client.py | 48 ++++++++++++++++++++++------------- vllm/v1/engine/utils.py | 13 ---------- 5 files changed, 53 insertions(+), 67 deletions(-) diff --git a/vllm/entrypoints/cli/serve.py b/vllm/entrypoints/cli/serve.py index 6a0505cb94a..8213184ad06 100644 --- a/vllm/entrypoints/cli/serve.py +++ b/vllm/entrypoints/cli/serve.py @@ -280,36 +280,23 @@ def run_multi_api_server(args: argparse.Namespace): vllm_config, executor_class, log_stats, addresses, num_api_servers ) as (local_engine_manager, coordinator, addresses, tensor_queue): # Construct common args for the APIServerProcessManager up-front. - api_server_manager_kwargs = dict( + stats_update_address = None + if coordinator: + stats_update_address = coordinator.get_stats_publish_address() + + # Start API servers. + api_server_manager = APIServerProcessManager( listen_address=listen_address, sock=sock, args=args, num_servers=num_api_servers, input_addresses=addresses.inputs, output_addresses=addresses.outputs, - stats_update_address=coordinator.get_stats_publish_address() - if coordinator - else None, + stats_update_address=stats_update_address, tensor_queue=tensor_queue, ) - # For dp ranks > 0 in external/hybrid DP LB modes, we must delay the - # start of the API servers until the local engine is started - # (after the launcher context manager exits), - # since we get the front-end stats update address from the coordinator - # via the handshake with the local engine. - if dp_rank == 0 or not parallel_config.local_engines_only: - # Start API servers using the manager. - api_server_manager = APIServerProcessManager(**api_server_manager_kwargs) - - # Start API servers now if they weren't already started. - if api_server_manager is None: - api_server_manager_kwargs["stats_update_address"] = ( - addresses.frontend_stats_publish_address - ) - api_server_manager = APIServerProcessManager(**api_server_manager_kwargs) - - # Wait for API servers + # Wait for API servers. try: wait_for_completion_or_failure( api_server_manager=api_server_manager, diff --git a/vllm/v1/engine/__init__.py b/vllm/v1/engine/__init__.py index 344690e7354..da26daffdda 100644 --- a/vllm/v1/engine/__init__.py +++ b/vllm/v1/engine/__init__.py @@ -4,6 +4,7 @@ import enum import time from collections.abc import Mapping +from dataclasses import dataclass from typing import Any, Literal import msgspec @@ -63,17 +64,16 @@ class FinishReason(enum.IntEnum): return FINISH_REASON_STRINGS[self.value] -class EngineCoreReadyResponse( - msgspec.Struct, - array_like=True, # type: ignore[call-arg] - omit_defaults=True, # type: ignore[call-arg] -): - """Sent from EngineCore to the frontend during the ready handshake. +@dataclass +class EngineCoreReadyResponse: + """Sent from EngineCore to each frontend at the end of engine startup. Contains post-initialization config that may differ from the original values (e.g. max_model_len after KV cache auto-fitting). """ + num_gpu_blocks: int + dp_stats_address: str | None max_model_len: int | None = None diff --git a/vllm/v1/engine/core.py b/vllm/v1/engine/core.py index fbf956265fb..caafb2b8755 100644 --- a/vllm/v1/engine/core.py +++ b/vllm/v1/engine/core.py @@ -936,14 +936,20 @@ class EngineCoreProc(EngineCore): vllm_config.parallel_config, ) if client_handshake_address is None: + # We only need to handshake with one party. with handshake as addresses: yield addresses else: + # We need to handshake with rank 0 front-end and our colocated frontend. assert local_client local_handshake = self._perform_handshake( input_ctx, client_handshake_address, identity, True, False, vllm_config ) with handshake as addresses, local_handshake as client_addresses: + # 1. Obtain DP Coordinator zmq address and DP process group address + # (addresses). + # 2. Add front-end input/output addresses from colocated front-end + # (client_addresses). addresses.inputs = client_addresses.inputs addresses.outputs = client_addresses.outputs yield addresses @@ -977,20 +983,12 @@ class EngineCoreProc(EngineCore): yield addresses # Send ready message. - num_gpu_blocks = vllm_config.cache_config.num_gpu_blocks - # We pass back the coordinator stats update address here for the - # external LB case for our colocated front-end to use (coordinator - # only runs with rank 0). - dp_stats_address = self.frontend_stats_publish_address - - # Include config hash for DP configuration validation ready_msg = { "status": "READY", "local": local_client, "headless": headless, - "num_gpu_blocks": num_gpu_blocks, - "dp_stats_address": dp_stats_address, } + # Include config hash for DP configuration validation if vllm_config.parallel_config.data_parallel_size > 1: ready_msg["parallel_config_hash"] = ( vllm_config.parallel_config.compute_hash() @@ -1388,6 +1386,8 @@ class EngineCoreProc(EngineCore): poller = zmq.Poller() ready_response = EngineCoreReadyResponse( max_model_len=self.vllm_config.model_config.max_model_len, + num_gpu_blocks=self.vllm_config.cache_config.num_gpu_blocks or 0, + dp_stats_address=self.frontend_stats_publish_address, ) ready_payload = msgspec.msgpack.encode(ready_response) for input_socket in input_sockets: diff --git a/vllm/v1/engine/core_client.py b/vllm/v1/engine/core_client.py index c4e631a4146..5d170b21711 100644 --- a/vllm/v1/engine/core_client.py +++ b/vllm/v1/engine/core_client.py @@ -457,22 +457,6 @@ class ElasticScalingCache: pending_notifications: dict[EEPNotificationType, set[int]] -_ready_response_decoder = msgspec.msgpack.Decoder(EngineCoreReadyResponse) - - -def _apply_ready_response(payload: bytes, vllm_config: VllmConfig) -> None: - """Decode an EngineCoreReadyResponse and sync any post-initialization - config changes (e.g. auto-fitted max_model_len) back to the frontend.""" - if not payload: - return - response = _ready_response_decoder.decode(payload) - if response.max_model_len is not None: - vllm_config.model_config.max_model_len = min( - vllm_config.model_config.max_model_len, - response.max_model_len, - ) - - class MPClient(EngineCoreClient): """ MPClient: base client for multi-proc EngineCore. @@ -608,7 +592,7 @@ class MPClient(EngineCoreClient): ) identity, payload = sync_input_socket.recv_multipart() identities.remove(identity) - _apply_ready_response(payload, vllm_config) + self._apply_ready_response(payload) self.core_engine: EngineIdentity = self.core_engines[0] self.utility_results: dict[int, AnyFuture] = {} @@ -680,6 +664,34 @@ class MPClient(EngineCoreClient): target=monitor_engine_cores, daemon=True, name="MPClientEngineMonitor" ).start() + def _apply_ready_response(self, payload: bytes) -> None: + """Decode an EngineCoreReadyResponse and sync any post-initialization + config changes (e.g. auto-fitted max_model_len) back to the frontend.""" + if not payload: + return + vllm_config = self.vllm_config + response = msgspec.msgpack.decode(payload, type=EngineCoreReadyResponse) + if response.max_model_len is not None: + vllm_config.model_config.max_model_len = min( + vllm_config.model_config.max_model_len, + response.max_model_len, + ) + + # Setup KV cache config with initialization state from + # engine core process. Sum values from all engines in DP case. + num_gpu_blocks = vllm_config.cache_config.num_gpu_blocks or 0 + num_gpu_blocks += response.num_gpu_blocks + vllm_config.cache_config.num_gpu_blocks = num_gpu_blocks + + # In external DP LB mode, the coordinator address that the + # front-end procs connect to is obtained by each engine via it's + # initial handshake with the rank 0 front-end. + if response.dp_stats_address is not None: + if self.stats_update_address is None: + self.stats_update_address = response.dp_stats_address + else: + assert response.dp_stats_address == self.stats_update_address + def _process_utility_output( output: UtilityOutput, utility_results: dict[int, AnyFuture] @@ -1602,7 +1614,7 @@ class DPLBAsyncMPClient(DPAsyncMPClient): ) identity, payload = sync_input_socket.recv_multipart() new_engine_identities.discard(identity) - _apply_ready_response(payload, self.vllm_config) + self._apply_ready_response(payload) # NOTE(yongji): Before we schedule any requests on the new workers, # we should wait for them to switch to the new setup. diff --git a/vllm/v1/engine/utils.py b/vllm/v1/engine/utils.py index a378236c5bb..0de9b9ba4d9 100644 --- a/vllm/v1/engine/utils.py +++ b/vllm/v1/engine/utils.py @@ -1212,19 +1212,6 @@ def wait_for_engine_startup( start_pending[0 if local else 1] += 1 engine.state = CoreEngineState.CONNECTED elif status == "READY" and engine.state == CoreEngineState.CONNECTED: - # Setup KV cache config with initialization state from - # engine core process. Sum values from all engines in DP case. - num_gpu_blocks = cache_config.num_gpu_blocks or 0 - num_gpu_blocks += msg["num_gpu_blocks"] - cache_config.num_gpu_blocks = num_gpu_blocks - - # In external DP LB mode, the coordinator address that the - # front-end procs connect to is obtained from rank 0 via - # one of the engine handshakes, and passed to the local - # front-end process in the response from the other. - if addresses.frontend_stats_publish_address is None: - addresses.frontend_stats_publish_address = msg.get("dp_stats_address") - # Validate config hash consistency across DP workers for MoE models. if coordinated_dp: worker_config_hash = msg.get("parallel_config_hash") From df2503e125f3c869b0f274e64530d09bf01ea30d Mon Sep 17 00:00:00 2001 From: Andrii Skliar Date: Thu, 9 Apr 2026 13:44:39 +0200 Subject: [PATCH 021/199] nemotron-nano-vl: Allow `use_audio_in_video` to be passed at `vllm serve` time (#38538) Signed-off-by: Andrii Skliar Co-authored-by: Andrii Skliar --- .../model_executor/models/nano_nemotron_vl.py | 90 +++++++++++++++---- .../processors/nano_nemotron_vl.py | 2 + 2 files changed, 74 insertions(+), 18 deletions(-) diff --git a/vllm/model_executor/models/nano_nemotron_vl.py b/vllm/model_executor/models/nano_nemotron_vl.py index 9983015b0ee..a0ef9913397 100644 --- a/vllm/model_executor/models/nano_nemotron_vl.py +++ b/vllm/model_executor/models/nano_nemotron_vl.py @@ -597,19 +597,26 @@ class NanoNemotronVLMultiModalProcessor( def _extract_audio_from_videos( self, mm_items: MultiModalDataItems, - ) -> tuple[MultiModalDataItems, list[AudioItem]]: + ) -> tuple[MultiModalDataItems, list[AudioItem], list[bool]]: """Extract audio tracks from video bytes in *mm_items*. + Videos whose bytes are missing or that contain no audio stream are + silently skipped. The returned *has_audio* mask is aligned with + the video list so callers know which ``