136
CMakeLists.txt
136
CMakeLists.txt
@@ -10,8 +10,7 @@ include(${CMAKE_CURRENT_LIST_DIR}/cmake/utils.cmake)
|
||||
# Suppress potential warnings about unused manually-specified variables
|
||||
set(ignoreMe "${VLLM_PYTHON_PATH}")
|
||||
|
||||
# TODO: Add 3.12 back when torch-npu support 3.12
|
||||
set(PYTHON_SUPPORTED_VERSIONS "3.9" "3.10" "3.11")
|
||||
set(PYTHON_SUPPORTED_VERSIONS "3.9" "3.10" "3.11" "3.12")
|
||||
|
||||
find_package(pybind11 REQUIRED)
|
||||
|
||||
@@ -20,6 +19,13 @@ set(VLLM_ASCEND_INSTALL_PATH "${CMAKE_INSTALL_PREFIX}")
|
||||
|
||||
find_package(Torch REQUIRED)
|
||||
|
||||
run_python(TORCH_VERSION
|
||||
"import torch; print(torch.__version__)" "Failed to locate torch path")
|
||||
# check torch version is 2.10.0
|
||||
if(NOT ${TORCH_VERSION} VERSION_EQUAL "2.10.0")
|
||||
message(FATAL_ERROR "Expected PyTorch version 2.10.0, but found ${TORCH_VERSION}")
|
||||
endif()
|
||||
|
||||
set(RUN_MODE "npu" CACHE STRING "cpu/sim/npu")
|
||||
set(SOC_VERSION ${SOC_VERSION})
|
||||
message(STATUS "Detected SOC version: ${SOC_VERSION}")
|
||||
@@ -44,17 +50,47 @@ else()
|
||||
endif()
|
||||
|
||||
include(${ASCENDC_CMAKE_DIR}/ascendc.cmake)
|
||||
|
||||
file(GLOB KERNEL_FILES
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/csrc/kernels/*.cpp)
|
||||
|
||||
ascendc_library(vllm_ascend_kernels SHARED
|
||||
set(VLLM_ASCEND_CUSTOM_OP
|
||||
${KERNEL_FILES}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/csrc/mla_preprocess/op_kernel/mla_preprocess_kernel.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/csrc/batch_matmul_transpose/op_kernel/batch_matmul_transpose_kernel.cpp
|
||||
)
|
||||
|
||||
set(VLLM_ASCEND_CUSTOM_OP_EXCLUDE_ASCEND950
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/csrc/mla_preprocess/op_kernel/mla_preprocess_kernel.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/csrc/batch_matmul_transpose/op_kernel/batch_matmul_transpose_kernel.cpp
|
||||
)
|
||||
|
||||
if(SOC_VERSION MATCHES "ascend950")
|
||||
message(STATUS "A5 hardware detected: disabling MLAPO operators")
|
||||
message(STATUS "A5 hardware detected: excluding batch_matmul_transpose operators")
|
||||
list(REMOVE_ITEM VLLM_ASCEND_CUSTOM_OP ${VLLM_ASCEND_CUSTOM_OP_EXCLUDE_ASCEND950})
|
||||
endif()
|
||||
|
||||
if(SOC_VERSION MATCHES "ascend310p.*|ascend950")
|
||||
message(STATUS "Hardware ${SOC_VERSION} detected: skip vllm_ascend_kernels compile")
|
||||
else()
|
||||
ascendc_library(vllm_ascend_kernels SHARED
|
||||
${VLLM_ASCEND_CUSTOM_OP}
|
||||
)
|
||||
endif()
|
||||
|
||||
message("TORCH_NPU_PATH is ${TORCH_NPU_PATH}")
|
||||
|
||||
file(GLOB VLLM_ASCEND_SRC
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/csrc/*.cpp)
|
||||
if(SOC_VERSION MATCHES "ascend310p.*")
|
||||
file(GLOB VLLM_ASCEND_SRC
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/csrc/*.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/csrc/aclnn_torch_adapter/*.cpp)
|
||||
else()
|
||||
file(GLOB VLLM_ASCEND_SRC
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/csrc/*.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/csrc/aclnn_torch_adapter/*.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/csrc/batch_matmul_transpose/op_host/tiling/tiling_data.cpp)
|
||||
endif()
|
||||
|
||||
include_directories(
|
||||
${pybind11_INCLUDE_DIRS}
|
||||
@@ -62,8 +98,7 @@ include_directories(
|
||||
${TORCH_INCLUDE_DIRS}
|
||||
${TORCH_NPU_PATH}/include
|
||||
${ASCEND_HOME_PATH}/include
|
||||
${ASCEND_HOME_PATH}/aarch64-linux/include/experiment/platform
|
||||
${ASCEND_HOME_PATH}/x86_64-linux/include/experiment/platform
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/csrc/batch_matmul_transpose/op_host
|
||||
)
|
||||
|
||||
set(
|
||||
@@ -71,28 +106,99 @@ set(
|
||||
${TORCH_INCLUDE_DIRS}
|
||||
${TORCH_NPU_INCLUDE_DIRS}
|
||||
${ASCEND_HOME_PATH}/include
|
||||
${ASCEND_HOME_PATH}/aarch64-linux/include/experiment/platform
|
||||
)
|
||||
|
||||
pybind11_add_module(vllm_ascend_C ${VLLM_ASCEND_SRC})
|
||||
|
||||
# Detect aclrtMemcpyBatchAsync availability (CANN 8.5+)
|
||||
# Can be overridden via VLLM_ASCEND_ENABLE_BATCH_MEMCPY env var (registered
|
||||
# in vllm_ascend/envs.py, forwarded by setup.py as a CMake variable):
|
||||
# VLLM_ASCEND_ENABLE_BATCH_MEMCPY=1 -> force enable
|
||||
# VLLM_ASCEND_ENABLE_BATCH_MEMCPY=0 -> force disable
|
||||
# unset -> auto-detect from CANN headers
|
||||
include(CheckCXXSourceCompiles)
|
||||
set(CMAKE_REQUIRED_INCLUDES ${ASCEND_HOME_PATH}/include)
|
||||
set(CMAKE_REQUIRED_LIBRARIES ascendcl)
|
||||
set(CMAKE_REQUIRED_LINK_OPTIONS "-L${ASCEND_HOME_PATH}/lib64")
|
||||
|
||||
if(DEFINED VLLM_ASCEND_ENABLE_BATCH_MEMCPY)
|
||||
if("${VLLM_ASCEND_ENABLE_BATCH_MEMCPY}" STREQUAL "1")
|
||||
message(STATUS "aclrtMemcpyBatchAsync: force enabled via VLLM_ASCEND_ENABLE_BATCH_MEMCPY=1")
|
||||
target_compile_definitions(vllm_ascend_C PRIVATE CANN_MEMCPY_BATCH_ASYNC)
|
||||
else()
|
||||
message(STATUS "aclrtMemcpyBatchAsync: force disabled via VLLM_ASCEND_ENABLE_BATCH_MEMCPY=0")
|
||||
endif()
|
||||
else()
|
||||
# Test the full code pattern we actually use, including struct member access.
|
||||
# This ensures the macro is only defined when the API is fully compatible.
|
||||
check_cxx_source_compiles("
|
||||
#include <acl/acl_rt.h>
|
||||
int main() {
|
||||
aclrtMemLocation loc = {};
|
||||
loc.type = ACL_MEM_LOCATION_TYPE_HOST;
|
||||
loc.id = 0;
|
||||
aclrtMemcpyBatchAttr attr = {};
|
||||
attr.srcLoc = loc;
|
||||
attr.dstLoc = loc;
|
||||
(void)aclrtMemcpyBatchAsync;
|
||||
return 0;
|
||||
}
|
||||
" HAVE_ACLRT_MEMCPY_BATCH_ASYNC)
|
||||
if(HAVE_ACLRT_MEMCPY_BATCH_ASYNC)
|
||||
message(STATUS "aclrtMemcpyBatchAsync: detected in CANN headers, enabling batch memcpy path")
|
||||
target_compile_definitions(vllm_ascend_C PRIVATE CANN_MEMCPY_BATCH_ASYNC)
|
||||
else()
|
||||
message(STATUS "aclrtMemcpyBatchAsync: not found in CANN headers, using fallback aclrtMemcpyAsync loop")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(SOC_VERSION MATCHES "ascend310p.*")
|
||||
target_compile_definitions(vllm_ascend_C PRIVATE -DASCEND_PLATFORM_310P)
|
||||
endif()
|
||||
|
||||
if(NOT (SOC_VERSION MATCHES "ascend310p.*|ascend950"))
|
||||
target_compile_definitions(vllm_ascend_C PRIVATE -DVLLM_ENABLE_ATB_AND_DIRECT_KERNELS)
|
||||
endif()
|
||||
|
||||
target_link_directories(
|
||||
vllm_ascend_C
|
||||
PRIVATE
|
||||
${TORCH_LIBRARY_DIRS}
|
||||
${TORCH_NPU_PATH}/lib/
|
||||
${ASCEND_HOME_PATH}/lib64
|
||||
)
|
||||
|
||||
target_link_libraries(
|
||||
vllm_ascend_C
|
||||
PUBLIC
|
||||
set(VLLM_ASCEND_C_COMMON_LIBS
|
||||
${TORCH_LIBRARIES}
|
||||
libtorch_npu.so
|
||||
vllm_ascend_kernels
|
||||
torch_npu
|
||||
ascendcl
|
||||
tiling_api
|
||||
register
|
||||
platform
|
||||
ascendalog
|
||||
dl
|
||||
opapi
|
||||
)
|
||||
|
||||
target_link_options(vllm_ascend_C PRIVATE "-Wl,-rpath,$ORIGIN:$ORIGIN/lib")
|
||||
if(SOC_VERSION MATCHES "ascend310p.*|ascend950")
|
||||
target_link_libraries(
|
||||
vllm_ascend_C
|
||||
PUBLIC
|
||||
${VLLM_ASCEND_C_COMMON_LIBS}
|
||||
)
|
||||
else()
|
||||
target_link_libraries(
|
||||
vllm_ascend_C
|
||||
PUBLIC
|
||||
vllm_ascend_kernels
|
||||
${VLLM_ASCEND_C_COMMON_LIBS}
|
||||
)
|
||||
endif()
|
||||
|
||||
install(TARGETS vllm_ascend_C vllm_ascend_kernels DESTINATION ${VLLM_ASCEND_INSTALL_PATH})
|
||||
target_link_options(vllm_ascend_C PRIVATE "-Wl,-rpath,$ORIGIN:$ORIGIN/lib:$ORIGIN/_cann_ops_custom/vendors/custom_transformer/op_api/lib")
|
||||
|
||||
if(SOC_VERSION MATCHES "ascend310p.*|ascend950")
|
||||
install(TARGETS vllm_ascend_C DESTINATION ${VLLM_ASCEND_INSTALL_PATH})
|
||||
else()
|
||||
install(TARGETS vllm_ascend_C vllm_ascend_kernels DESTINATION ${VLLM_ASCEND_INSTALL_PATH})
|
||||
endif()
|
||||
|
||||
Reference in New Issue
Block a user