123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397 |
- cmake_minimum_required(VERSION 3.21)
- project(aphrodite_extensions LANGUAGES CXX)
- option(APHRODITE_TARGET_DEVICE "Target device backend for Aphrodite" "cuda")
- message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
- message(STATUS "Target device: ${APHRODITE_TARGET_DEVICE}")
- include(${CMAKE_CURRENT_LIST_DIR}/cmake/utils.cmake)
- set(PYTHON_SUPPORTED_VERSIONS "3.8" "3.9" "3.10" "3.11")
- set(CUDA_SUPPORTED_ARCHS "6.0;6.1;7.0;7.5;8.0;8.6;8.9;9.0")
- set(HIP_SUPPORTED_ARCHS "gfx906;gfx908;gfx90a;gfx940;gfx941;gfx942;gfx1030;gfx1100")
- set(TORCH_SUPPORTED_VERSION_CUDA "2.3.0")
- set(TORCH_SUPPORTED_VERSION_ROCM_5X "2.0.1")
- set(TORCH_SUPPORTED_VERSION_ROCM_6X "2.1.1")
- if (APHRODITE_PYTHON_EXECUTABLE)
- find_python_from_executable(${APHRODITE_PYTHON_EXECUTABLE} "${PYTHON_SUPPORTED_VERSIONS}")
- else()
- message(FATAL_ERROR
- "Please set APHRODITE_PYTHON_EXECUTABLE to the path of the desired python version"
- " before running cmake configure.")
- endif()
- append_cmake_prefix_path("torch" "torch.utils.cmake_prefix_path")
- find_program(NVCC_EXECUTABLE nvcc)
- if (CUDA_FOUND AND NOT NVCC_EXECUTABLE)
- message(FATAL_ERROR "nvcc not found")
- endif()
- find_package(Torch REQUIRED)
- find_library(torch_python_LIBRARY torch_python PATHS
- "${TORCH_INSTALL_PREFIX}/lib")
- if (NOT APHRODITE_TARGET_DEVICE STREQUAL "cuda" AND
- NOT APHRODITE_TARGET_DEVICE STREQUAL "rocm")
- if (APHRODITE_TARGET_DEVICE STREQUAL "cpu")
- include(${CMAKE_CURRENT_LIST_DIR}/cmake/cpu_extension.cmake)
- else()
- message(FATAL_ERROR "Unsupported Aphrodite target device: ${APHRODITE_TARGET_DEVICE}")
- endif()
- return()
- endif()
- if (NOT HIP_FOUND AND CUDA_FOUND)
- set(APHRODITE_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(APHRODITE_GPU_LANG "HIP")
-
-
-
- enable_language(HIP)
-
- if (ROCM_VERSION_DEV_MAJOR EQUAL 5 AND
- NOT Torch_VERSION VERSION_EQUAL ${TORCH_SUPPORTED_VERSION_ROCM_5X})
- message(WARNING "Pytorch version ${TORCH_SUPPORTED_VERSION_ROCM_5X} "
- "expected for ROCMm 5.x build, saw ${Torch_VERSION} instead.")
- endif()
-
- if (ROCM_VERSION_DEV_MAJOR EQUAL 6 AND
- NOT Torch_VERSION VERSION_EQUAL ${TORCH_SUPPORTED_VERSION_ROCM_6X})
- message(WARNING "Pytorch version ${TORCH_SUPPORTED_VERSION_ROCM_6X} "
- "expected for ROCMm 6.x build, saw ${Torch_VERSION} instead.")
- endif()
- else()
- message(FATAL_ERROR "Can't find CUDA or HIP installation.")
- endif()
- override_gpu_arches(APHRODITE_GPU_ARCHES
- ${APHRODITE_GPU_LANG}
- "${${APHRODITE_GPU_LANG}_SUPPORTED_ARCHS}")
- get_torch_gpu_compiler_flags(APHRODITE_GPU_FLAGS ${APHRODITE_GPU_LANG})
- if(NVCC_THREADS AND APHRODITE_GPU_LANG STREQUAL "CUDA")
- list(APPEND APHRODITE_GPU_FLAGS "--threads=${NVCC_THREADS}")
- endif()
- set(APHRODITE_EXT_SRC
- "kernels/cache_kernels.cu"
- "kernels/attention/attention_kernels.cu"
- "kernels/pos_encoding_kernels.cu"
- "kernels/activation_kernels.cu"
- "kernels/layernorm_kernels.cu"
- "kernels/cuda_utils_kernels.cu"
- "kernels/moe/align_block_size_kernel.cu"
- "kernels/pybind.cpp")
- if(APHRODITE_GPU_LANG STREQUAL "CUDA")
- list(APPEND APHRODITE_EXT_SRC
- "kernels/all_reduce/custom_all_reduce.cu")
- endif()
- define_gpu_extension_target(
- _C
- DESTINATION aphrodite
- LANGUAGE ${APHRODITE_GPU_LANG}
- SOURCES ${APHRODITE_EXT_SRC}
- COMPILE_FLAGS ${APHRODITE_GPU_FLAGS}
- ARCHITECTURES ${APHRODITE_GPU_ARCHES}
- WITH_SOABI)
- set (APHRODITE_QUANT_EXT_SRC
- "kernels/quantization/gptq/q_gemm.cu"
- "kernels/quantization/squeezellm/quant_cuda_kernel.cu"
- "kernels/quantization/exl2/q_matrix.cu"
- "kernels/quantization/exl2/q_gemm_exl2.cu"
- "kernels/quantization/fp8/fp8_cuda_kernels.cu"
- "kernels/quantization/quant_ops.cpp")
- if(APHRODITE_GPU_LANG STREQUAL "CUDA")
- list(APPEND APHRODITE_QUANT_EXT_SRC
- "kernels/quantization/aqlm/gemm_kernels.cu"
- "kernels/quantization/awq/gemm_kernels.cu"
- "kernels/quantization/bitsandbytes/int4_fp16_gemm_kernels.cu"
- "kernels/quantization/bitsandbytes/format.cu"
- "kernels/quantization/bitsandbytes/gemm_s4_f16.cu"
- "kernels/quantization/gguf/gguf_kernel.cu"
- "kernels/quantization/marlin/marlin_cuda_kernel.cu"
- "kernels/quantization/gptq_marlin/gptq_marlin.cu"
- "kernels/quantization/gptq_marlin/gptq_marlin_repack.cu"
- "kernels/quantization/quip/origin_order.cu")
- endif()
- define_gpu_extension_target(
- _quant_C
- DESTINATION aphrodite
- LANGUAGE ${APHRODITE_GPU_LANG}
- SOURCES ${APHRODITE_QUANT_EXT_SRC}
- COMPILE_FLAGS ${APHRODITE_GPU_FLAGS}
- ARCHITECTURES ${APHRODITE_GPU_ARCHES}
- WITH_SOABI)
- set(APHRODITE_MOE_EXT_SRC
- "kernels/moe/moe_ops.cpp"
- "kernels/moe/softmax.cu")
- define_gpu_extension_target(
- _moe_C
- DESTINATION aphrodite
- LANGUAGE ${APHRODITE_GPU_LANG}
- SOURCES ${APHRODITE_MOE_EXT_SRC}
- COMPILE_FLAGS ${APHRODITE_GPU_FLAGS}
- ARCHITECTURES ${APHRODITE_GPU_ARCHES}
- WITH_SOABI)
- set(APHRODITE_PUNICA_EXT_SRC
- "kernels/punica/bgmv/bgmv_bf16_bf16_bf16.cu"
- "kernels/punica/bgmv/bgmv_bf16_bf16_fp16.cu"
- "kernels/punica/bgmv/bgmv_bf16_fp16_bf16.cu"
- "kernels/punica/bgmv/bgmv_bf16_fp16_fp16.cu"
- "kernels/punica/bgmv/bgmv_bf16_fp32_bf16.cu"
- "kernels/punica/bgmv/bgmv_bf16_fp32_fp16.cu"
- "kernels/punica/bgmv/bgmv_fp16_bf16_bf16.cu"
- "kernels/punica/bgmv/bgmv_fp16_bf16_fp16.cu"
- "kernels/punica/bgmv/bgmv_fp16_fp16_bf16.cu"
- "kernels/punica/bgmv/bgmv_fp16_fp16_fp16.cu"
- "kernels/punica/bgmv/bgmv_fp16_fp32_bf16.cu"
- "kernels/punica/bgmv/bgmv_fp16_fp32_fp16.cu"
- "kernels/punica/bgmv/bgmv_fp32_bf16_bf16.cu"
- "kernels/punica/bgmv/bgmv_fp32_bf16_fp16.cu"
- "kernels/punica/bgmv/bgmv_fp32_fp16_bf16.cu"
- "kernels/punica/bgmv/bgmv_fp32_fp16_fp16.cu"
- "kernels/punica/bgmv/bgmv_fp32_fp32_bf16.cu"
- "kernels/punica/bgmv/bgmv_fp32_fp32_fp16.cu"
- "kernels/punica/punica_ops.cc")
- set(APHRODITE_PUNICA_GPU_FLAGS ${APHRODITE_GPU_FLAGS})
- list(REMOVE_ITEM APHRODITE_PUNICA_GPU_FLAGS
- "-D__CUDA_NO_HALF_OPERATORS__"
- "-D__CUDA_NO_HALF_CONVERSIONS__"
- "-D__CUDA_NO_BFLOAT16_CONVERSIONS__"
- "-D__CUDA_NO_HALF2_OPERATORS__")
- if (${APHRODITE_GPU_LANG} STREQUAL "CUDA")
- set(APHRODITE_PUNICA_GPU_ARCHES)
- foreach(ARCH ${APHRODITE_GPU_ARCHES})
- string_to_ver(CODE_VER ${ARCH})
- if (CODE_VER GREATER_EQUAL 8.0)
- list(APPEND APHRODITE_PUNICA_GPU_ARCHES ${ARCH})
- endif()
- endforeach()
- message(STATUS "Punica target arches: ${APHRODITE_PUNICA_GPU_ARCHES}")
- endif()
- if (APHRODITE_PUNICA_GPU_ARCHES)
- define_gpu_extension_target(
- _punica_C
- DESTINATION aphrodite
- LANGUAGE ${APHRODITE_GPU_LANG}
- SOURCES ${APHRODITE_PUNICA_EXT_SRC}
- COMPILE_FLAGS ${APHRODITE_PUNICA_GPU_FLAGS}
- ARCHITECTURES ${APHRODITE_PUNICA_GPU_ARCHES}
- WITH_SOABI)
- else()
- message(WARNING "Unable to create _punica_C target because none of the "
- "requested architectures (${APHRODITE_GPU_ARCHES}) are supported, i.e. >= 8.0")
- endif()
- set(APHRODITE_HADAMARD_EXT_SRC
- "kernels/hadamard/fast_hadamard_transform.cpp"
- "kernels/hadamard/fast_hadamard_transform_cuda.cu")
- set(APHRODITE_HADAMARD_GPU_FLAGS ${APHRODITE_GPU_FLAGS})
- list(APPEND APHRODITE_HADAMARD_GPU_FLAGS
- "-U__CUDA_NO_HALF_OPERATORS__"
- "-U__CUDA_NO_HALF_CONVERSIONS__"
- "-U__CUDA_NO_BFLOAT16_OPERATORS__"
- "-U__CUDA_NO_BFLOAT16_CONVERSIONS__"
- "-U__CUDA_NO_BFLOAT162_OPERATORS__"
- "-U__CUDA_NO_BFLOAT162_CONVERSIONS__"
- "--expt-relaxed-constexpr"
- "--expt-extended-lambda"
- "--use_fast_math"
- "--ptxas-options=-v"
- "-lineinfo")
- if (${APHRODITE_GPU_LANG} STREQUAL "CUDA")
- set(APHRODITE_HADAMARD_GPU_ARCHES)
- foreach(ARCH ${APHRODITE_GPU_ARCHES})
- string_to_ver(CODE_VER ${ARCH})
- if (CODE_VER GREATER_EQUAL 6.0)
- list(APPEND APHRODITE_HADAMARD_GPU_ARCHES ${ARCH})
- endif()
- endforeach()
- message(STATUS "Hadamard target arches: ${APHRODITE_HADAMARD_GPU_ARCHES}")
- endif()
- if (APHRODITE_HADAMARD_GPU_ARCHES)
- define_gpu_extension_target(
- _hadamard_C
- DESTINATION aphrodite
- LANGUAGE ${APHRODITE_GPU_LANG}
- SOURCES ${APHRODITE_HADAMARD_EXT_SRC}
- COMPILE_FLAGS ${APHRODITE_HADAMARD_GPU_FLAGS}
- ARCHITECTURES ${APHRODITE_HADAMARD_GPU_ARCHES}
- WITH_SOABI)
- else()
- message(WARNING "Unable to create _hadamard_C target because none of the "
- "requested architectures (${APHRODITE_GPU_ARCHES}) are supported, i.e. >= 6.0")
- endif()
- add_custom_target(default)
- if(APHRODITE_GPU_LANG STREQUAL "CUDA" OR APHRODITE_GPU_LANG STREQUAL "HIP")
- message(STATUS "Enabling C extension.")
- add_dependencies(default _C)
- endif()
- if(APHRODITE_GPU_LANG STREQUAL "CUDA")
- message(STATUS "Enabling moe extension.")
- add_dependencies(default _moe_C)
-
-
-
- if (APHRODITE_QUANT_EXT_SRC AND
- (ENV{APHRODITE_INSTALL_QUANT_KERNELS} OR APHRODITE_INSTALL_QUANT_KERNELS))
- message(STATUS "Enabling quant extension.")
- add_dependencies(default _quant_C)
- endif()
- if (APHRODITE_PUNICA_GPU_ARCHES AND
- (ENV{APHRODITE_INSTALL_PUNICA_KERNELS} OR APHRODITE_INSTALL_PUNICA_KERNELS))
- message(STATUS "Enabling punica extension.")
- add_dependencies(default _punica_C)
- endif()
- if (APHRODITE_HADAMARD_GPU_ARCHES AND
- (ENV{APHRODITE_INSTALL_HADAMARD_KERNELS} OR APHRODITE_INSTALL_HADAMARD_KERNELS))
- message(STATUS "Enabling hadamard extension.")
- add_dependencies(default _hadamard_C)
- endif()
- endif()
|