2024-08-13 01:29:20 +02:00
|
|
|
cmake_minimum_required(VERSION 3.26)
|
2024-03-18 18:38:33 -04:00
|
|
|
|
2024-09-21 02:27:10 -04:00
|
|
|
# When building directly using CMake, make sure you run the install step
|
|
|
|
# (it places the .so files in the correct location).
|
|
|
|
#
|
|
|
|
# Example:
|
|
|
|
# mkdir build && cd build
|
|
|
|
# cmake -G Ninja -DVLLM_PYTHON_EXECUTABLE=`which python3` -DCMAKE_INSTALL_PREFIX=.. ..
|
|
|
|
# cmake --build . --target install
|
|
|
|
#
|
|
|
|
# If you want to only build one target, make sure to install it manually:
|
|
|
|
# cmake --build . --target _C
|
|
|
|
# cmake --install . --component _C
|
2024-03-18 18:38:33 -04:00
|
|
|
project(vllm_extensions LANGUAGES CXX)
|
|
|
|
|
2024-06-26 11:16:00 -04:00
|
|
|
# CUDA by default, can be overridden by using -DVLLM_TARGET_DEVICE=... (used by setup.py)
|
|
|
|
set(VLLM_TARGET_DEVICE "cuda" CACHE STRING "Target device backend for vLLM")
|
2024-04-02 13:07:30 +08:00
|
|
|
|
2024-03-18 18:38:33 -04:00
|
|
|
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
|
2024-04-02 13:07:30 +08:00
|
|
|
message(STATUS "Target device: ${VLLM_TARGET_DEVICE}")
|
2024-03-18 18:38:33 -04:00
|
|
|
|
|
|
|
include(${CMAKE_CURRENT_LIST_DIR}/cmake/utils.cmake)
|
|
|
|
|
2024-08-22 08:28:52 -04:00
|
|
|
# Suppress potential warnings about unused manually-specified variables
|
|
|
|
set(ignoreMe "${VLLM_PYTHON_PATH}")
|
|
|
|
|
2024-03-18 18:38:33 -04:00
|
|
|
#
|
|
|
|
# Supported python versions. These versions will be searched in order, the
|
|
|
|
# first match will be selected. These should be kept in sync with setup.py.
|
|
|
|
#
|
2024-11-06 09:31:01 -05:00
|
|
|
set(PYTHON_SUPPORTED_VERSIONS "3.9" "3.10" "3.11" "3.12")
|
2024-03-18 18:38:33 -04:00
|
|
|
|
|
|
|
# Supported NVIDIA architectures.
|
2025-03-04 07:55:07 -08:00
|
|
|
set(CUDA_SUPPORTED_ARCHS "7.0;7.2;7.5;8.0;8.6;8.7;8.9;9.0;10.0;10.1;12.0")
|
2024-03-18 18:38:33 -04:00
|
|
|
|
|
|
|
# Supported AMD GPU architectures.
|
2025-02-20 02:05:00 -05:00
|
|
|
set(HIP_SUPPORTED_ARCHS "gfx906;gfx908;gfx90a;gfx942;gfx1030;gfx1100;gfx1101")
|
2024-03-18 18:38:33 -04:00
|
|
|
|
|
|
|
#
|
|
|
|
# Supported/expected torch versions for CUDA/ROCm.
|
|
|
|
#
|
|
|
|
# Currently, having an incorrect pytorch version results in a warning
|
|
|
|
# rather than an error.
|
|
|
|
#
|
|
|
|
# Note: the CUDA torch version is derived from pyproject.toml and various
|
|
|
|
# requirements.txt files and should be kept consistent. The ROCm torch
|
|
|
|
# versions are derived from Dockerfile.rocm
|
|
|
|
#
|
2025-03-14 16:58:30 -04:00
|
|
|
set(TORCH_SUPPORTED_VERSION_CUDA "2.6.0")
|
|
|
|
set(TORCH_SUPPORTED_VERSION_ROCM "2.6.0")
|
2024-03-18 18:38:33 -04:00
|
|
|
|
|
|
|
#
|
|
|
|
# Try to find python package with an executable that exactly matches
|
|
|
|
# `VLLM_PYTHON_EXECUTABLE` and is one of the supported versions.
|
|
|
|
#
|
|
|
|
if (VLLM_PYTHON_EXECUTABLE)
|
|
|
|
find_python_from_executable(${VLLM_PYTHON_EXECUTABLE} "${PYTHON_SUPPORTED_VERSIONS}")
|
|
|
|
else()
|
|
|
|
message(FATAL_ERROR
|
|
|
|
"Please set VLLM_PYTHON_EXECUTABLE to the path of the desired python version"
|
|
|
|
" before running cmake configure.")
|
|
|
|
endif()
|
|
|
|
|
|
|
|
#
|
|
|
|
# Update cmake's `CMAKE_PREFIX_PATH` with torch location.
|
|
|
|
#
|
|
|
|
append_cmake_prefix_path("torch" "torch.utils.cmake_prefix_path")
|
|
|
|
|
2024-03-21 00:28:29 +08:00
|
|
|
# Ensure the 'nvcc' command is in the PATH
|
|
|
|
find_program(NVCC_EXECUTABLE nvcc)
|
2024-03-20 16:05:03 -05:00
|
|
|
if (CUDA_FOUND AND NOT NVCC_EXECUTABLE)
|
2024-03-21 00:28:29 +08:00
|
|
|
message(FATAL_ERROR "nvcc not found")
|
|
|
|
endif()
|
|
|
|
|
2024-03-18 18:38:33 -04:00
|
|
|
#
|
|
|
|
# Import torch cmake configuration.
|
|
|
|
# Torch also imports CUDA (and partially HIP) languages with some customizations,
|
|
|
|
# so there is no need to do this explicitly with check_language/enable_language,
|
|
|
|
# etc.
|
|
|
|
#
|
|
|
|
find_package(Torch REQUIRED)
|
|
|
|
|
2024-04-02 13:07:30 +08:00
|
|
|
#
|
|
|
|
# Forward the non-CUDA device extensions to external CMake scripts.
|
|
|
|
#
|
|
|
|
if (NOT VLLM_TARGET_DEVICE STREQUAL "cuda" AND
|
|
|
|
NOT VLLM_TARGET_DEVICE STREQUAL "rocm")
|
|
|
|
if (VLLM_TARGET_DEVICE STREQUAL "cpu")
|
|
|
|
include(${CMAKE_CURRENT_LIST_DIR}/cmake/cpu_extension.cmake)
|
|
|
|
else()
|
2024-08-02 16:51:58 -04:00
|
|
|
return()
|
2024-04-02 13:07:30 +08:00
|
|
|
endif()
|
|
|
|
return()
|
|
|
|
endif()
|
|
|
|
|
2024-03-18 18:38:33 -04:00
|
|
|
#
|
|
|
|
# Set up GPU language and check the torch version and warn if it isn't
|
|
|
|
# what is expected.
|
|
|
|
#
|
|
|
|
if (NOT HIP_FOUND AND CUDA_FOUND)
|
|
|
|
set(VLLM_GPU_LANG "CUDA")
|
|
|
|
|
|
|
|
if (NOT Torch_VERSION VERSION_EQUAL ${TORCH_SUPPORTED_VERSION_CUDA})
|
|
|
|
message(WARNING "Pytorch version ${TORCH_SUPPORTED_VERSION_CUDA} "
|
|
|
|
"expected for CUDA build, saw ${Torch_VERSION} instead.")
|
|
|
|
endif()
|
|
|
|
elseif(HIP_FOUND)
|
|
|
|
set(VLLM_GPU_LANG "HIP")
|
|
|
|
|
|
|
|
# Importing torch recognizes and sets up some HIP/ROCm configuration but does
|
|
|
|
# not let cmake recognize .hip files. In order to get cmake to understand the
|
|
|
|
# .hip extension automatically, HIP must be enabled explicitly.
|
|
|
|
enable_language(HIP)
|
|
|
|
|
2024-06-25 17:56:15 -05:00
|
|
|
# ROCm 5.X and 6.X
|
|
|
|
if (ROCM_VERSION_DEV_MAJOR GREATER_EQUAL 5 AND
|
|
|
|
NOT Torch_VERSION VERSION_EQUAL ${TORCH_SUPPORTED_VERSION_ROCM})
|
2024-07-20 11:39:07 -05:00
|
|
|
message(WARNING "Pytorch version >= ${TORCH_SUPPORTED_VERSION_ROCM} "
|
2024-06-25 17:56:15 -05:00
|
|
|
"expected for ROCm build, saw ${Torch_VERSION} instead.")
|
2024-03-18 18:38:33 -04:00
|
|
|
endif()
|
|
|
|
else()
|
|
|
|
message(FATAL_ERROR "Can't find CUDA or HIP installation.")
|
|
|
|
endif()
|
|
|
|
|
2024-10-03 22:55:25 -04:00
|
|
|
|
|
|
|
if(VLLM_GPU_LANG STREQUAL "CUDA")
|
2024-10-11 15:57:39 -04:00
|
|
|
#
|
2024-11-06 02:11:55 -05:00
|
|
|
# For cuda we want to be able to control which architectures we compile for on
|
2024-10-11 15:57:39 -04:00
|
|
|
# a per-file basis in order to cut down on compile time. So here we extract
|
2024-11-06 02:11:55 -05:00
|
|
|
# the set of architectures we want to compile for and remove the from the
|
2024-10-11 15:57:39 -04:00
|
|
|
# CMAKE_CUDA_FLAGS so that they are not applied globally.
|
|
|
|
#
|
2024-10-03 22:55:25 -04:00
|
|
|
clear_cuda_arches(CUDA_ARCH_FLAGS)
|
|
|
|
extract_unique_cuda_archs_ascending(CUDA_ARCHS "${CUDA_ARCH_FLAGS}")
|
|
|
|
message(STATUS "CUDA target architectures: ${CUDA_ARCHS}")
|
2024-10-11 15:57:39 -04:00
|
|
|
# Filter the target architectures by the supported supported archs
|
|
|
|
# since for some files we will build for all CUDA_ARCHS.
|
2024-11-06 02:11:55 -05:00
|
|
|
cuda_archs_loose_intersection(CUDA_ARCHS
|
2024-10-11 15:57:39 -04:00
|
|
|
"${CUDA_SUPPORTED_ARCHS}" "${CUDA_ARCHS}")
|
|
|
|
message(STATUS "CUDA supported target architectures: ${CUDA_ARCHS}")
|
|
|
|
else()
|
|
|
|
#
|
|
|
|
# For other GPU targets override the GPU architectures detected by cmake/torch
|
|
|
|
# and filter them by the supported versions for the current language.
|
|
|
|
# The final set of arches is stored in `VLLM_GPU_ARCHES`.
|
|
|
|
#
|
|
|
|
override_gpu_arches(VLLM_GPU_ARCHES
|
|
|
|
${VLLM_GPU_LANG}
|
|
|
|
"${${VLLM_GPU_LANG}_SUPPORTED_ARCHS}")
|
2024-10-03 22:55:25 -04:00
|
|
|
endif()
|
|
|
|
|
2024-03-18 18:38:33 -04:00
|
|
|
#
|
|
|
|
# Query torch for additional GPU compilation flags for the given
|
|
|
|
# `VLLM_GPU_LANG`.
|
|
|
|
# The final set of arches is stored in `VLLM_GPU_FLAGS`.
|
|
|
|
#
|
|
|
|
get_torch_gpu_compiler_flags(VLLM_GPU_FLAGS ${VLLM_GPU_LANG})
|
|
|
|
|
|
|
|
#
|
|
|
|
# Set nvcc parallelism.
|
|
|
|
#
|
|
|
|
if(NVCC_THREADS AND VLLM_GPU_LANG STREQUAL "CUDA")
|
|
|
|
list(APPEND VLLM_GPU_FLAGS "--threads=${NVCC_THREADS}")
|
|
|
|
endif()
|
|
|
|
|
2024-09-28 23:13:01 -04:00
|
|
|
|
|
|
|
#
|
|
|
|
# Use FetchContent for C++ dependencies that are compiled as part of vLLM's build process.
|
2024-10-23 00:43:07 -04:00
|
|
|
# setup.py will override FETCHCONTENT_BASE_DIR to play nicely with sccache.
|
|
|
|
# Each dependency that produces build artifacts should override its BINARY_DIR to avoid
|
|
|
|
# conflicts between build types. It should instead be set to ${CMAKE_BINARY_DIR}/<dependency>.
|
2024-09-28 23:13:01 -04:00
|
|
|
#
|
2024-09-21 02:27:10 -04:00
|
|
|
include(FetchContent)
|
2024-10-23 00:43:07 -04:00
|
|
|
file(MAKE_DIRECTORY ${FETCHCONTENT_BASE_DIR}) # Ensure the directory exists
|
2024-09-28 23:13:01 -04:00
|
|
|
message(STATUS "FetchContent base directory: ${FETCHCONTENT_BASE_DIR}")
|
2024-09-21 02:27:10 -04:00
|
|
|
|
2025-02-25 03:39:59 -05:00
|
|
|
#
|
|
|
|
# Set rocm version dev int.
|
|
|
|
#
|
|
|
|
if(VLLM_GPU_LANG STREQUAL "HIP")
|
|
|
|
#
|
|
|
|
# Overriding the default -O set up by cmake, adding ggdb3 for the most verbose devug info
|
|
|
|
#
|
|
|
|
set(CMAKE_${VLLM_GPU_LANG}_FLAGS_DEBUG "${CMAKE_${VLLM_GPU_LANG}_FLAGS_DEBUG} -O0 -ggdb3")
|
|
|
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -ggdb3")
|
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# Certain HIP functions are marked as [[nodiscard]], yet vllm ignores the result which generates
|
|
|
|
# a lot of warnings that always mask real issues. Suppressing until this is properly addressed.
|
|
|
|
#
|
|
|
|
set(CMAKE_${VLLM_GPU_LANG}_FLAGS "${CMAKE_${VLLM_GPU_LANG}_FLAGS} -Wno-unused-result")
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-result")
|
|
|
|
endif()
|
|
|
|
|
2024-03-18 18:38:33 -04:00
|
|
|
#
|
2024-08-02 16:51:58 -04:00
|
|
|
# Define other extension targets
|
2024-03-18 18:38:33 -04:00
|
|
|
#
|
|
|
|
|
2025-01-22 14:39:32 +08:00
|
|
|
#
|
|
|
|
# cumem_allocator extension
|
|
|
|
#
|
|
|
|
|
|
|
|
set(VLLM_CUMEM_EXT_SRC
|
|
|
|
"csrc/cumem_allocator.cpp")
|
|
|
|
|
|
|
|
set_gencode_flags_for_srcs(
|
|
|
|
SRCS "${VLLM_CUMEM_EXT_SRC}"
|
|
|
|
CUDA_ARCHS "${CUDA_ARCHS}")
|
|
|
|
|
|
|
|
if(VLLM_GPU_LANG STREQUAL "CUDA")
|
|
|
|
message(STATUS "Enabling cumem allocator extension.")
|
|
|
|
# link against cuda driver library
|
2025-02-11 21:55:57 +08:00
|
|
|
list(APPEND CUMEM_LIBS CUDA::cuda_driver)
|
2025-01-22 14:39:32 +08:00
|
|
|
define_gpu_extension_target(
|
|
|
|
cumem_allocator
|
|
|
|
DESTINATION vllm
|
|
|
|
LANGUAGE CXX
|
|
|
|
SOURCES ${VLLM_CUMEM_EXT_SRC}
|
|
|
|
LIBRARIES ${CUMEM_LIBS}
|
|
|
|
USE_SABI 3.8
|
|
|
|
WITH_SOABI)
|
|
|
|
endif()
|
|
|
|
|
2024-03-18 18:38:33 -04:00
|
|
|
#
|
|
|
|
# _C extension
|
|
|
|
#
|
|
|
|
|
|
|
|
set(VLLM_EXT_SRC
|
|
|
|
"csrc/cache_kernels.cu"
|
2024-11-11 22:55:07 -08:00
|
|
|
"csrc/attention/paged_attention_v1.cu"
|
|
|
|
"csrc/attention/paged_attention_v2.cu"
|
2024-03-18 18:38:33 -04:00
|
|
|
"csrc/pos_encoding_kernels.cu"
|
|
|
|
"csrc/activation_kernels.cu"
|
|
|
|
"csrc/layernorm_kernels.cu"
|
2024-11-08 16:20:08 -05:00
|
|
|
"csrc/layernorm_quant_kernels.cu"
|
2024-03-18 18:38:33 -04:00
|
|
|
"csrc/quantization/gptq/q_gemm.cu"
|
2024-05-23 17:29:18 -04:00
|
|
|
"csrc/quantization/compressed_tensors/int8_quant_kernels.cu"
|
2024-05-09 17:04:17 -07:00
|
|
|
"csrc/quantization/fp8/common.cu"
|
2024-12-12 22:19:23 -05:00
|
|
|
"csrc/quantization/fused_kernels/fused_layernorm_dynamic_per_token_quant.cu"
|
2024-11-23 13:14:49 +08:00
|
|
|
"csrc/quantization/gguf/gguf_kernel.cu"
|
2024-03-18 18:38:33 -04:00
|
|
|
"csrc/cuda_utils_kernels.cu"
|
2024-07-17 17:30:28 -04:00
|
|
|
"csrc/prepare_inputs/advance_step.cu"
|
2024-06-09 16:23:30 -04:00
|
|
|
"csrc/torch_bindings.cpp")
|
2024-03-18 18:38:33 -04:00
|
|
|
|
|
|
|
if(VLLM_GPU_LANG STREQUAL "CUDA")
|
2024-08-01 16:51:15 -04:00
|
|
|
SET(CUTLASS_ENABLE_HEADERS_ONLY ON CACHE BOOL "Enable only the header library")
|
2024-09-22 22:24:59 -04:00
|
|
|
|
|
|
|
# Set CUTLASS_REVISION manually -- its revision detection doesn't work in this case.
|
2025-02-13 19:01:14 -05:00
|
|
|
# Please keep this in sync with FetchContent_Declare line below.
|
2025-02-22 05:24:05 -08:00
|
|
|
set(CUTLASS_REVISION "v3.8.0" CACHE STRING "CUTLASS revision to use")
|
2024-09-22 22:24:59 -04:00
|
|
|
|
2024-11-20 13:35:50 +08:00
|
|
|
# Use the specified CUTLASS source directory for compilation if VLLM_CUTLASS_SRC_DIR is provided
|
|
|
|
if (DEFINED ENV{VLLM_CUTLASS_SRC_DIR})
|
|
|
|
set(VLLM_CUTLASS_SRC_DIR $ENV{VLLM_CUTLASS_SRC_DIR})
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if(VLLM_CUTLASS_SRC_DIR)
|
|
|
|
if(NOT IS_ABSOLUTE VLLM_CUTLASS_SRC_DIR)
|
|
|
|
get_filename_component(VLLM_CUTLASS_SRC_DIR "${VLLM_CUTLASS_SRC_DIR}" ABSOLUTE)
|
|
|
|
endif()
|
|
|
|
message(STATUS "The VLLM_CUTLASS_SRC_DIR is set, using ${VLLM_CUTLASS_SRC_DIR} for compilation")
|
|
|
|
FetchContent_Declare(cutlass SOURCE_DIR ${VLLM_CUTLASS_SRC_DIR})
|
|
|
|
else()
|
|
|
|
FetchContent_Declare(
|
2024-05-30 16:37:16 -05:00
|
|
|
cutlass
|
2024-05-16 18:32:50 -04:00
|
|
|
GIT_REPOSITORY https://github.com/nvidia/cutlass.git
|
2025-02-13 19:01:14 -05:00
|
|
|
# Please keep this in sync with CUTLASS_REVISION line above.
|
2025-02-25 18:52:03 -08:00
|
|
|
GIT_TAG v3.8.0
|
2024-08-01 16:51:15 -04:00
|
|
|
GIT_PROGRESS TRUE
|
2024-09-10 19:51:58 -04:00
|
|
|
|
|
|
|
# Speed up CUTLASS download by retrieving only the specified GIT_TAG instead of the history.
|
|
|
|
# Important: If GIT_SHALLOW is enabled then GIT_TAG works only with branch names and tags.
|
|
|
|
# So if the GIT_TAG above is updated to a commit hash, GIT_SHALLOW must be set to FALSE
|
2024-12-30 04:22:13 -05:00
|
|
|
GIT_SHALLOW TRUE
|
2024-11-20 13:35:50 +08:00
|
|
|
)
|
|
|
|
endif()
|
2024-05-16 18:32:50 -04:00
|
|
|
FetchContent_MakeAvailable(cutlass)
|
|
|
|
|
2024-03-18 18:38:33 -04:00
|
|
|
list(APPEND VLLM_EXT_SRC
|
2024-08-29 01:06:52 +03:00
|
|
|
"csrc/mamba/mamba_ssm/selective_scan_fwd.cu"
|
|
|
|
"csrc/mamba/causal_conv1d/causal_conv1d.cu"
|
2024-04-23 13:59:33 -04:00
|
|
|
"csrc/quantization/aqlm/gemm_kernels.cu"
|
2024-03-18 18:38:33 -04:00
|
|
|
"csrc/quantization/awq/gemm_kernels.cu"
|
2024-05-16 18:32:50 -04:00
|
|
|
"csrc/custom_all_reduce.cu"
|
2024-09-23 13:46:26 -04:00
|
|
|
"csrc/permute_cols.cu"
|
2024-12-18 09:57:16 -05:00
|
|
|
"csrc/quantization/cutlass_w8a8/scaled_mm_entry.cu"
|
2025-02-12 19:51:51 -08:00
|
|
|
"csrc/quantization/fp4/nvfp4_quant_entry.cu"
|
2025-02-22 05:24:05 -08:00
|
|
|
"csrc/quantization/fp4/nvfp4_scaled_mm_entry.cu"
|
2024-12-18 09:57:16 -05:00
|
|
|
"csrc/sparse/cutlass/sparse_scaled_mm_entry.cu"
|
|
|
|
"csrc/cutlass_extensions/common.cpp")
|
2024-10-03 22:55:25 -04:00
|
|
|
|
|
|
|
set_gencode_flags_for_srcs(
|
|
|
|
SRCS "${VLLM_EXT_SRC}"
|
|
|
|
CUDA_ARCHS "${CUDA_ARCHS}")
|
|
|
|
|
|
|
|
# Only build Marlin kernels if we are building for at least some compatible archs.
|
|
|
|
# Keep building Marlin for 9.0 as there are some group sizes and shapes that
|
|
|
|
# are not supported by Machete yet.
|
2025-03-04 07:55:07 -08:00
|
|
|
cuda_archs_loose_intersection(MARLIN_ARCHS "8.0;8.6;8.7;8.9;9.0;10.0;10.1;12.0" "${CUDA_ARCHS}")
|
2024-10-03 22:55:25 -04:00
|
|
|
if (MARLIN_ARCHS)
|
2024-11-06 02:11:55 -05:00
|
|
|
set(MARLIN_SRCS
|
2024-10-03 22:55:25 -04:00
|
|
|
"csrc/quantization/fp8/fp8_marlin.cu"
|
|
|
|
"csrc/quantization/marlin/dense/marlin_cuda_kernel.cu"
|
|
|
|
"csrc/quantization/marlin/sparse/marlin_24_cuda_kernel.cu"
|
|
|
|
"csrc/quantization/marlin/qqq/marlin_qqq_gemm_kernel.cu"
|
|
|
|
"csrc/quantization/gptq_marlin/gptq_marlin.cu"
|
|
|
|
"csrc/quantization/gptq_marlin/gptq_marlin_repack.cu"
|
|
|
|
"csrc/quantization/gptq_marlin/awq_marlin_repack.cu")
|
|
|
|
set_gencode_flags_for_srcs(
|
|
|
|
SRCS "${MARLIN_SRCS}"
|
|
|
|
CUDA_ARCHS "${MARLIN_ARCHS}")
|
|
|
|
list(APPEND VLLM_EXT_SRC "${MARLIN_SRCS}")
|
|
|
|
message(STATUS "Building Marlin kernels for archs: ${MARLIN_ARCHS}")
|
|
|
|
else()
|
|
|
|
message(STATUS "Not building Marlin kernels as no compatible archs found"
|
2024-10-22 18:41:13 -04:00
|
|
|
" in CUDA target architectures")
|
2024-10-03 22:55:25 -04:00
|
|
|
endif()
|
|
|
|
|
2025-03-01 14:30:59 +08:00
|
|
|
# Only build AllSpark kernels if we are building for at least some compatible archs.
|
|
|
|
cuda_archs_loose_intersection(ALLSPARK_ARCHS "8.0;8.6;8.7;8.9" "${CUDA_ARCHS}")
|
2025-03-15 00:55:14 +08:00
|
|
|
if (ALLSPARK_ARCHS)
|
2025-03-01 14:30:59 +08:00
|
|
|
set(ALLSPARK_SRCS
|
|
|
|
"csrc/quantization/gptq_allspark/allspark_repack.cu"
|
|
|
|
"csrc/quantization/gptq_allspark/allspark_qgemm_w8a16.cu")
|
|
|
|
set_gencode_flags_for_srcs(
|
|
|
|
SRCS "${ALLSPARK_SRCS}"
|
|
|
|
CUDA_ARCHS "${ALLSPARK_ARCHS}")
|
|
|
|
list(APPEND VLLM_EXT_SRC "${ALLSPARK_SRCS}")
|
|
|
|
message(STATUS "Building AllSpark kernels for archs: ${ALLSPARK_ARCHS}")
|
|
|
|
else()
|
|
|
|
message(STATUS "Not building AllSpark kernels as no compatible archs found"
|
2025-03-15 00:55:14 +08:00
|
|
|
" in CUDA target architectures")
|
2025-03-01 14:30:59 +08:00
|
|
|
endif()
|
|
|
|
|
2025-03-08 03:11:56 -05:00
|
|
|
|
|
|
|
set(SCALED_MM_3X_ARCHS)
|
2024-12-18 21:43:30 -05:00
|
|
|
# The cutlass_scaled_mm kernels for Hopper (c3x, i.e. CUTLASS 3.x) require
|
2025-03-08 03:11:56 -05:00
|
|
|
# CUDA 12.0 or later
|
|
|
|
cuda_archs_loose_intersection(SCALED_MM_ARCHS "9.0a;" "${CUDA_ARCHS}")
|
|
|
|
if(${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER 12.0 AND SCALED_MM_ARCHS)
|
2025-02-25 18:52:03 -08:00
|
|
|
set(SRCS
|
2025-03-08 03:11:56 -05:00
|
|
|
"csrc/quantization/cutlass_w8a8/scaled_mm_c3x_sm90.cu"
|
2025-01-30 21:33:00 -05:00
|
|
|
"csrc/quantization/cutlass_w8a8/c3x/scaled_mm_sm90_fp8.cu"
|
|
|
|
"csrc/quantization/cutlass_w8a8/c3x/scaled_mm_sm90_int8.cu"
|
|
|
|
"csrc/quantization/cutlass_w8a8/c3x/scaled_mm_azp_sm90_int8.cu"
|
|
|
|
"csrc/quantization/cutlass_w8a8/c3x/scaled_mm_blockwise_sm90_fp8.cu")
|
2024-10-03 22:55:25 -04:00
|
|
|
set_gencode_flags_for_srcs(
|
|
|
|
SRCS "${SRCS}"
|
2025-03-08 03:11:56 -05:00
|
|
|
CUDA_ARCHS "${SCALED_MM_ARCHS}")
|
2024-10-03 22:55:25 -04:00
|
|
|
list(APPEND VLLM_EXT_SRC "${SRCS}")
|
2025-03-08 03:11:56 -05:00
|
|
|
list(APPEND VLLM_GPU_FLAGS "-DENABLE_SCALED_MM_SM90=1")
|
|
|
|
# Let scaled_mm_c2x know it doesn't need to build these arches
|
|
|
|
list(APPEND SCALED_MM_3X_ARCHS "${SCALED_MM_ARCHS}")
|
|
|
|
message(STATUS "Building scaled_mm_c3x_sm90 for archs: ${SCALED_MM_ARCHS}")
|
2024-10-03 22:55:25 -04:00
|
|
|
else()
|
2025-03-08 03:11:56 -05:00
|
|
|
if (NOT ${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER 12.0 AND SCALED_MM_ARCHS)
|
|
|
|
message(STATUS "Not building scaled_mm_c3x_sm90 as CUDA Compiler version is "
|
2024-10-03 22:55:25 -04:00
|
|
|
"not >= 12.0, we recommend upgrading to CUDA 12.0 or "
|
2024-12-18 21:43:30 -05:00
|
|
|
"later if you intend on running FP8 quantized models on "
|
2024-10-03 22:55:25 -04:00
|
|
|
"Hopper.")
|
|
|
|
else()
|
2025-03-08 03:11:56 -05:00
|
|
|
message(STATUS "Not building scaled_mm_c3x_sm90 as no compatible archs found "
|
2024-10-03 22:55:25 -04:00
|
|
|
"in CUDA target architectures")
|
|
|
|
endif()
|
2025-03-08 03:11:56 -05:00
|
|
|
endif()
|
2024-10-15 20:15:21 -04:00
|
|
|
|
2025-03-08 03:11:56 -05:00
|
|
|
# The cutlass_scaled_mm kernels for Blackwell (c3x, i.e. CUTLASS 3.x) require
|
|
|
|
# CUDA 12.8 or later
|
|
|
|
cuda_archs_loose_intersection(SCALED_MM_ARCHS "10.0a;10.1a;12.0a" "${CUDA_ARCHS}")
|
|
|
|
if(${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER 12.8 AND SCALED_MM_ARCHS)
|
|
|
|
set(SRCS
|
|
|
|
"csrc/quantization/cutlass_w8a8/scaled_mm_c3x_sm100.cu"
|
|
|
|
"csrc/quantization/cutlass_w8a8/c3x/scaled_mm_sm100_fp8.cu"
|
|
|
|
)
|
|
|
|
set_gencode_flags_for_srcs(
|
|
|
|
SRCS "${SRCS}"
|
|
|
|
CUDA_ARCHS "${SCALED_MM_ARCHS}")
|
|
|
|
list(APPEND VLLM_EXT_SRC "${SRCS}")
|
|
|
|
list(APPEND VLLM_GPU_FLAGS "-DENABLE_SCALED_MM_SM100=1")
|
|
|
|
# Let scaled_mm_c2x know it doesn't need to build these arches
|
|
|
|
list(APPEND SCALED_MM_3X_ARCHS "${SCALED_MM_ARCHS}")
|
|
|
|
message(STATUS "Building scaled_mm_c3x_sm100 for archs: ${SCALED_MM_ARCHS}")
|
|
|
|
else()
|
|
|
|
if (NOT ${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER 12.8 AND SCALED_MM_ARCHS)
|
|
|
|
message(STATUS "Not building scaled_mm_c3x_sm100 as CUDA Compiler version is "
|
|
|
|
"not >= 12.8, we recommend upgrading to CUDA 12.8 or "
|
|
|
|
"later if you intend on running FP8 quantized models on "
|
|
|
|
"Blackwell.")
|
|
|
|
else()
|
|
|
|
message(STATUS "Not building scaled_mm_c3x_100 as no compatible archs found "
|
|
|
|
"in CUDA target architectures")
|
|
|
|
endif()
|
2024-10-03 22:55:25 -04:00
|
|
|
endif()
|
2024-05-16 18:32:50 -04:00
|
|
|
|
|
|
|
#
|
2024-10-03 22:55:25 -04:00
|
|
|
# For the cutlass_scaled_mm kernels we want to build the c2x (CUTLASS 2.x)
|
|
|
|
# kernels for the remaining archs that are not already built for 3x.
|
2024-12-12 22:19:23 -05:00
|
|
|
cuda_archs_loose_intersection(SCALED_MM_2X_ARCHS
|
2025-03-04 07:55:07 -08:00
|
|
|
"7.5;8.0;8.6;8.7;8.9;9.0;10.0;10.1;12.0" "${CUDA_ARCHS}")
|
2024-10-03 22:55:25 -04:00
|
|
|
# subtract out the archs that are already built for 3x
|
|
|
|
list(REMOVE_ITEM SCALED_MM_2X_ARCHS ${SCALED_MM_3X_ARCHS})
|
|
|
|
if (SCALED_MM_2X_ARCHS)
|
|
|
|
set(SRCS "csrc/quantization/cutlass_w8a8/scaled_mm_c2x.cu")
|
|
|
|
set_gencode_flags_for_srcs(
|
|
|
|
SRCS "${SRCS}"
|
|
|
|
CUDA_ARCHS "${SCALED_MM_2X_ARCHS}")
|
|
|
|
list(APPEND VLLM_EXT_SRC "${SRCS}")
|
|
|
|
list(APPEND VLLM_GPU_FLAGS "-DENABLE_SCALED_MM_C2X=1")
|
|
|
|
message(STATUS "Building scaled_mm_c2x for archs: ${SCALED_MM_2X_ARCHS}")
|
|
|
|
else()
|
|
|
|
if (SCALED_MM_3X_ARCHS)
|
|
|
|
message(STATUS "Not building scaled_mm_c2x as all archs are already built"
|
|
|
|
" for and covered by scaled_mm_c3x")
|
|
|
|
else()
|
|
|
|
message(STATUS "Not building scaled_mm_c2x as no compatible archs found "
|
|
|
|
"in CUDA target architectures")
|
2024-12-18 21:43:30 -05:00
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
|
|
|
|
#
|
|
|
|
# 2:4 Sparse Kernels
|
|
|
|
|
|
|
|
# The 2:4 sparse kernels cutlass_scaled_sparse_mm and cutlass_compressor
|
2025-03-11 13:09:03 -04:00
|
|
|
# require CUDA 12.2 or later (and only work on Hopper).
|
|
|
|
cuda_archs_loose_intersection(SCALED_MM_ARCHS "9.0a;" "${CUDA_ARCHS}")
|
2025-03-08 03:11:56 -05:00
|
|
|
if(${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER 12.2 AND SCALED_MM_ARCHS)
|
2025-02-13 19:01:14 -05:00
|
|
|
set(SRCS "csrc/sparse/cutlass/sparse_scaled_mm_c3x.cu")
|
2024-12-18 21:43:30 -05:00
|
|
|
set_gencode_flags_for_srcs(
|
|
|
|
SRCS "${SRCS}"
|
2025-03-08 03:11:56 -05:00
|
|
|
CUDA_ARCHS "${SCALED_MM_ARCHS}")
|
2024-12-18 21:43:30 -05:00
|
|
|
list(APPEND VLLM_EXT_SRC "${SRCS}")
|
|
|
|
list(APPEND VLLM_GPU_FLAGS "-DENABLE_SPARSE_SCALED_MM_C3X=1")
|
2025-03-08 03:11:56 -05:00
|
|
|
message(STATUS "Building sparse_scaled_mm_c3x for archs: ${SCALED_MM_ARCHS}")
|
2024-12-18 21:43:30 -05:00
|
|
|
else()
|
2025-03-08 03:11:56 -05:00
|
|
|
if (NOT ${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER 12.2 AND SCALED_MM_ARCHS)
|
2024-12-18 21:43:30 -05:00
|
|
|
message(STATUS "Not building sparse_scaled_mm_c3x kernels as CUDA Compiler version is "
|
|
|
|
"not >= 12.2, we recommend upgrading to CUDA 12.2 or later "
|
|
|
|
"if you intend on running FP8 sparse quantized models on Hopper.")
|
|
|
|
else()
|
|
|
|
message(STATUS "Not building sparse_scaled_mm_c3x as no compatible archs found "
|
|
|
|
"in CUDA target architectures")
|
2024-10-03 22:55:25 -04:00
|
|
|
endif()
|
2024-05-30 16:37:16 -05:00
|
|
|
endif()
|
2024-05-16 18:32:50 -04:00
|
|
|
|
2025-02-12 19:51:51 -08:00
|
|
|
# FP4 Archs and flags
|
|
|
|
cuda_archs_loose_intersection(FP4_ARCHS "10.0a" "${CUDA_ARCHS}")
|
|
|
|
if(${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER 12.8 AND FP4_ARCHS)
|
2025-02-25 18:52:03 -08:00
|
|
|
set(SRCS
|
2025-02-12 19:51:51 -08:00
|
|
|
"csrc/quantization/fp4/nvfp4_quant_kernels.cu"
|
2025-03-04 07:55:07 -08:00
|
|
|
"csrc/quantization/fp4/nvfp4_scaled_mm_kernels.cu")
|
2025-02-12 19:51:51 -08:00
|
|
|
set_gencode_flags_for_srcs(
|
|
|
|
SRCS "${SRCS}"
|
|
|
|
CUDA_ARCHS "${FP4_ARCHS}")
|
|
|
|
list(APPEND VLLM_EXT_SRC "${SRCS}")
|
|
|
|
list(APPEND VLLM_GPU_FLAGS "-DENABLE_NVFP4=1")
|
|
|
|
message(STATUS "Building NVFP4 for archs: ${FP4_ARCHS}")
|
|
|
|
else()
|
|
|
|
message(STATUS "Not building NVFP4 as no compatible archs were found.")
|
|
|
|
# clear FP4_ARCHS
|
|
|
|
set(FP4_ARCHS)
|
|
|
|
endif()
|
2024-09-10 19:51:58 -04:00
|
|
|
|
2025-03-27 01:54:44 +01:00
|
|
|
#
|
|
|
|
# CUTLASS MoE kernels
|
|
|
|
|
|
|
|
# The MoE kernel cutlass_moe_mm requires CUDA 12.3 or later (and only works
|
|
|
|
# on Hopper). get_cutlass_moe_mm_data should only be compiled if it's possible
|
|
|
|
# to compile MoE kernels that use its output.
|
|
|
|
cuda_archs_loose_intersection(SCALED_MM_ARCHS "9.0a;" "${CUDA_ARCHS}")
|
|
|
|
if(${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER_EQUAL 12.3 AND SCALED_MM_ARCHS)
|
|
|
|
set(SRCS "csrc/quantization/cutlass_w8a8/moe/grouped_mm_c3x.cu"
|
|
|
|
"csrc/quantization/cutlass_w8a8/moe/moe_data.cu")
|
|
|
|
set_gencode_flags_for_srcs(
|
|
|
|
SRCS "${SRCS}"
|
|
|
|
CUDA_ARCHS "${SCALED_MM_ARCHS}")
|
|
|
|
list(APPEND VLLM_EXT_SRC "${SRCS}")
|
|
|
|
list(APPEND VLLM_GPU_FLAGS "-DENABLE_CUTLASS_MOE_SM90=1")
|
|
|
|
message(STATUS "Building grouped_mm_c3x for archs: ${SCALED_MM_ARCHS}")
|
|
|
|
else()
|
|
|
|
if (NOT ${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER_EQUAL 12.3 AND SCALED_MM_ARCHS)
|
|
|
|
message(STATUS "Not building grouped_mm_c3x kernels as CUDA Compiler version is "
|
|
|
|
"not >= 12.3, we recommend upgrading to CUDA 12.3 or later "
|
|
|
|
"if you intend on running FP8 quantized MoE models on Hopper.")
|
|
|
|
else()
|
|
|
|
message(STATUS "Not building grouped_mm_c3x as no compatible archs found "
|
|
|
|
"in CUDA target architectures")
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
|
2024-08-20 09:09:33 -04:00
|
|
|
#
|
2024-08-22 08:28:52 -04:00
|
|
|
# Machete kernels
|
2024-08-20 09:09:33 -04:00
|
|
|
|
2024-08-22 08:28:52 -04:00
|
|
|
# The machete kernels only work on hopper and require CUDA 12.0 or later.
|
2024-10-03 22:55:25 -04:00
|
|
|
# Only build Machete kernels if we are building for something compatible with sm90a
|
|
|
|
cuda_archs_loose_intersection(MACHETE_ARCHS "9.0a" "${CUDA_ARCHS}")
|
|
|
|
if(${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER 12.0 AND MACHETE_ARCHS)
|
2024-08-22 08:28:52 -04:00
|
|
|
#
|
2024-11-06 02:11:55 -05:00
|
|
|
# For the Machete kernels we automatically generate sources for various
|
2024-08-22 08:28:52 -04:00
|
|
|
# preselected input type pairs and schedules.
|
|
|
|
# Generate sources:
|
2024-11-06 02:11:55 -05:00
|
|
|
set(MACHETE_GEN_SCRIPT
|
2024-10-03 22:55:25 -04:00
|
|
|
${CMAKE_CURRENT_SOURCE_DIR}/csrc/quantization/machete/generate.py)
|
|
|
|
file(MD5 ${MACHETE_GEN_SCRIPT} MACHETE_GEN_SCRIPT_HASH)
|
|
|
|
|
|
|
|
message(STATUS "Machete generation script hash: ${MACHETE_GEN_SCRIPT_HASH}")
|
|
|
|
message(STATUS "Last run machete generate script hash: $CACHE{MACHETE_GEN_SCRIPT_HASH}")
|
|
|
|
|
|
|
|
if (NOT DEFINED CACHE{MACHETE_GEN_SCRIPT_HASH}
|
|
|
|
OR NOT $CACHE{MACHETE_GEN_SCRIPT_HASH} STREQUAL ${MACHETE_GEN_SCRIPT_HASH})
|
|
|
|
execute_process(
|
2024-11-06 02:11:55 -05:00
|
|
|
COMMAND ${CMAKE_COMMAND} -E env
|
|
|
|
PYTHONPATH=${CMAKE_CURRENT_SOURCE_DIR}/csrc/cutlass_extensions/:${CUTLASS_DIR}/python/:${VLLM_PYTHON_PATH}:$PYTHONPATH
|
2024-10-03 22:55:25 -04:00
|
|
|
${Python_EXECUTABLE} ${MACHETE_GEN_SCRIPT}
|
|
|
|
RESULT_VARIABLE machete_generation_result
|
|
|
|
OUTPUT_VARIABLE machete_generation_output
|
|
|
|
OUTPUT_FILE ${CMAKE_CURRENT_BINARY_DIR}/machete_generation.log
|
|
|
|
ERROR_FILE ${CMAKE_CURRENT_BINARY_DIR}/machete_generation.log
|
|
|
|
)
|
|
|
|
|
|
|
|
if (NOT machete_generation_result EQUAL 0)
|
|
|
|
message(FATAL_ERROR "Machete generation failed."
|
2024-11-06 02:11:55 -05:00
|
|
|
" Result: \"${machete_generation_result}\""
|
2024-10-03 22:55:25 -04:00
|
|
|
"\nCheck the log for details: "
|
|
|
|
"${CMAKE_CURRENT_BINARY_DIR}/machete_generation.log")
|
|
|
|
else()
|
2024-11-06 02:11:55 -05:00
|
|
|
set(MACHETE_GEN_SCRIPT_HASH ${MACHETE_GEN_SCRIPT_HASH}
|
2024-10-03 22:55:25 -04:00
|
|
|
CACHE STRING "Last run machete generate script hash" FORCE)
|
|
|
|
message(STATUS "Machete generation completed successfully.")
|
|
|
|
endif()
|
2024-08-22 08:28:52 -04:00
|
|
|
else()
|
2024-10-03 22:55:25 -04:00
|
|
|
message(STATUS "Machete generation script has not changed, skipping generation.")
|
2024-08-22 08:28:52 -04:00
|
|
|
endif()
|
2024-08-20 09:09:33 -04:00
|
|
|
|
2024-08-22 08:28:52 -04:00
|
|
|
# Add machete generated sources
|
|
|
|
file(GLOB MACHETE_GEN_SOURCES "csrc/quantization/machete/generated/*.cu")
|
|
|
|
list(APPEND VLLM_EXT_SRC ${MACHETE_GEN_SOURCES})
|
2024-08-20 09:09:33 -04:00
|
|
|
|
2024-10-03 22:55:25 -04:00
|
|
|
# forward compatible
|
|
|
|
set_gencode_flags_for_srcs(
|
|
|
|
SRCS "${MACHETE_GEN_SOURCES}"
|
|
|
|
CUDA_ARCHS "${MACHETE_ARCHS}")
|
|
|
|
|
|
|
|
list(APPEND VLLM_EXT_SRC
|
|
|
|
csrc/quantization/machete/machete_pytorch.cu)
|
|
|
|
|
|
|
|
message(STATUS "Building Machete kernels for archs: ${MACHETE_ARCHS}")
|
|
|
|
else()
|
2024-11-06 02:11:55 -05:00
|
|
|
if (NOT ${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER 12.0
|
2024-10-03 22:55:25 -04:00
|
|
|
AND MACHETE_ARCHS)
|
|
|
|
message(STATUS "Not building Machete kernels as CUDA Compiler version is "
|
|
|
|
"not >= 12.0, we recommend upgrading to CUDA 12.0 or "
|
|
|
|
"later if you intend on running w4a16 quantized models on "
|
|
|
|
"Hopper.")
|
|
|
|
else()
|
|
|
|
message(STATUS "Not building Machete kernels as no compatible archs "
|
|
|
|
"found in CUDA target architectures")
|
|
|
|
endif()
|
2024-08-20 09:09:33 -04:00
|
|
|
endif()
|
2024-10-03 22:55:25 -04:00
|
|
|
# if CUDA endif
|
2024-03-18 18:38:33 -04:00
|
|
|
endif()
|
|
|
|
|
2024-09-21 02:27:10 -04:00
|
|
|
message(STATUS "Enabling C extension.")
|
2024-03-18 18:38:33 -04:00
|
|
|
define_gpu_extension_target(
|
|
|
|
_C
|
|
|
|
DESTINATION vllm
|
|
|
|
LANGUAGE ${VLLM_GPU_LANG}
|
|
|
|
SOURCES ${VLLM_EXT_SRC}
|
|
|
|
COMPILE_FLAGS ${VLLM_GPU_FLAGS}
|
|
|
|
ARCHITECTURES ${VLLM_GPU_ARCHES}
|
2025-02-13 19:01:14 -05:00
|
|
|
INCLUDE_DIRECTORIES ${CUTLASS_INCLUDE_DIR}
|
2025-03-04 07:55:07 -08:00
|
|
|
INCLUDE_DIRECTORIES ${CUTLASS_TOOLS_UTIL_INCLUDE_DIR}
|
2024-06-09 16:23:30 -04:00
|
|
|
USE_SABI 3
|
2024-03-18 18:38:33 -04:00
|
|
|
WITH_SOABI)
|
|
|
|
|
2024-11-06 02:11:55 -05:00
|
|
|
# If CUTLASS is compiled on NVCC >= 12.5, it by default uses
|
|
|
|
# cudaGetDriverEntryPointByVersion as a wrapper to avoid directly calling the
|
2024-09-10 19:51:58 -04:00
|
|
|
# driver API. This causes problems when linking with earlier versions of CUDA.
|
|
|
|
# Setting this variable sidesteps the issue by calling the driver directly.
|
|
|
|
target_compile_definitions(_C PRIVATE CUTLASS_ENABLE_DIRECT_CUDA_DRIVER_CALL=1)
|
|
|
|
|
2024-03-18 18:38:33 -04:00
|
|
|
#
|
|
|
|
# _moe_C extension
|
|
|
|
#
|
|
|
|
|
|
|
|
set(VLLM_MOE_EXT_SRC
|
2024-06-09 16:23:30 -04:00
|
|
|
"csrc/moe/torch_bindings.cpp"
|
2024-10-24 17:37:52 -05:00
|
|
|
"csrc/moe/moe_align_sum_kernels.cu"
|
2024-08-21 23:42:14 -04:00
|
|
|
"csrc/moe/topk_softmax_kernels.cu")
|
2024-03-18 18:38:33 -04:00
|
|
|
|
2025-03-13 00:31:19 +08:00
|
|
|
if(VLLM_GPU_LANG STREQUAL "CUDA")
|
|
|
|
list(APPEND VLLM_MOE_EXT_SRC "csrc/moe/moe_wna16.cu")
|
|
|
|
endif()
|
|
|
|
|
2024-10-03 22:55:25 -04:00
|
|
|
set_gencode_flags_for_srcs(
|
|
|
|
SRCS "${VLLM_MOE_EXT_SRC}"
|
|
|
|
CUDA_ARCHS "${CUDA_ARCHS}")
|
|
|
|
|
2024-08-27 18:07:09 -04:00
|
|
|
if(VLLM_GPU_LANG STREQUAL "CUDA")
|
2025-03-11 08:12:40 +08:00
|
|
|
set(VLLM_MOE_WNA16_SRC
|
|
|
|
"csrc/moe/moe_wna16.cu")
|
|
|
|
|
|
|
|
set_gencode_flags_for_srcs(
|
|
|
|
SRCS "${VLLM_MOE_WNA16_SRC}"
|
|
|
|
CUDA_ARCHS "${CUDA_ARCHS}")
|
|
|
|
|
2025-03-12 05:00:28 -07:00
|
|
|
list(APPEND VLLM_MOE_EXT_SRC "${VLLM_MOE_WNA16_SRC}")
|
2025-03-04 07:55:07 -08:00
|
|
|
cuda_archs_loose_intersection(MARLIN_MOE_ARCHS "8.0;8.6;8.7;8.9;9.0;10.0;10.1;12.0" "${CUDA_ARCHS}")
|
2024-10-03 22:55:25 -04:00
|
|
|
if (MARLIN_MOE_ARCHS)
|
|
|
|
set(MARLIN_MOE_SRC
|
|
|
|
"csrc/moe/marlin_kernels/marlin_moe_kernel.h"
|
|
|
|
"csrc/moe/marlin_kernels/marlin_moe_kernel_ku4b8.h"
|
|
|
|
"csrc/moe/marlin_kernels/marlin_moe_kernel_ku4b8.cu"
|
|
|
|
"csrc/moe/marlin_kernels/marlin_moe_kernel_ku8b128.h"
|
|
|
|
"csrc/moe/marlin_kernels/marlin_moe_kernel_ku8b128.cu"
|
2024-10-04 20:34:44 +02:00
|
|
|
"csrc/moe/marlin_kernels/marlin_moe_kernel_ku4.h"
|
|
|
|
"csrc/moe/marlin_kernels/marlin_moe_kernel_ku4.cu"
|
2024-10-03 22:55:25 -04:00
|
|
|
"csrc/moe/marlin_moe_ops.cu")
|
|
|
|
|
|
|
|
set_gencode_flags_for_srcs(
|
|
|
|
SRCS "${MARLIN_MOE_SRC}"
|
|
|
|
CUDA_ARCHS "${MARLIN_MOE_ARCHS}")
|
|
|
|
|
|
|
|
list(APPEND VLLM_MOE_EXT_SRC "${MARLIN_MOE_SRC}")
|
|
|
|
message(STATUS "Building Marlin MOE kernels for archs: ${MARLIN_MOE_ARCHS}")
|
|
|
|
else()
|
|
|
|
message(STATUS "Not building Marlin MOE kernels as no compatible archs found"
|
2024-10-22 18:41:13 -04:00
|
|
|
" in CUDA target architectures")
|
2024-10-03 22:55:25 -04:00
|
|
|
endif()
|
2024-08-27 18:07:09 -04:00
|
|
|
endif()
|
|
|
|
|
2024-09-21 02:27:10 -04:00
|
|
|
message(STATUS "Enabling moe extension.")
|
2024-03-18 18:38:33 -04:00
|
|
|
define_gpu_extension_target(
|
|
|
|
_moe_C
|
|
|
|
DESTINATION vllm
|
|
|
|
LANGUAGE ${VLLM_GPU_LANG}
|
|
|
|
SOURCES ${VLLM_MOE_EXT_SRC}
|
|
|
|
COMPILE_FLAGS ${VLLM_GPU_FLAGS}
|
|
|
|
ARCHITECTURES ${VLLM_GPU_ARCHES}
|
2024-06-09 16:23:30 -04:00
|
|
|
USE_SABI 3
|
2024-03-18 18:38:33 -04:00
|
|
|
WITH_SOABI)
|
|
|
|
|
2024-09-13 19:01:11 -05:00
|
|
|
if(VLLM_GPU_LANG STREQUAL "HIP")
|
|
|
|
#
|
|
|
|
# _rocm_C extension
|
|
|
|
#
|
|
|
|
set(VLLM_ROCM_EXT_SRC
|
|
|
|
"csrc/rocm/torch_bindings.cpp"
|
|
|
|
"csrc/rocm/attention.cu")
|
|
|
|
|
|
|
|
define_gpu_extension_target(
|
|
|
|
_rocm_C
|
|
|
|
DESTINATION vllm
|
|
|
|
LANGUAGE ${VLLM_GPU_LANG}
|
|
|
|
SOURCES ${VLLM_ROCM_EXT_SRC}
|
|
|
|
COMPILE_FLAGS ${VLLM_GPU_FLAGS}
|
|
|
|
ARCHITECTURES ${VLLM_GPU_ARCHES}
|
|
|
|
USE_SABI 3
|
|
|
|
WITH_SOABI)
|
|
|
|
endif()
|
|
|
|
|
2025-02-26 21:35:08 -05:00
|
|
|
# For CUDA we also build and ship some external projects.
|
|
|
|
if (VLLM_GPU_LANG STREQUAL "CUDA")
|
|
|
|
include(cmake/external_projects/flashmla.cmake)
|
|
|
|
include(cmake/external_projects/vllm_flash_attn.cmake)
|
2024-09-21 02:27:10 -04:00
|
|
|
endif ()
|