mirror of
https://github.com/ggerganov/llama.cpp.git
synced 2025-01-03 23:34:35 +00:00
605fa66c50
* CANN: Fix the bug build fail on Ascend310P under two cases: 1) Manual specify SOC_TYPE 2) Under some unusual compile environment * Update the cann backend News content: Support F16 and F32 data type model for Ascend 310P NPU. * fix CANN compile fail bug: the assert in ascend kernel function doesn't supportted on some CANN version
77 lines
2.8 KiB
CMake
77 lines
2.8 KiB
CMake
if ("cann${CANN_INSTALL_DIR}" STREQUAL "cann" AND DEFINED ENV{ASCEND_TOOLKIT_HOME})
|
|
set(CANN_INSTALL_DIR $ENV{ASCEND_TOOLKIT_HOME})
|
|
message(STATUS "CANN: updated CANN_INSTALL_DIR from ASCEND_TOOLKIT_HOME=$ENV{ASCEND_TOOLKIT_HOME}")
|
|
endif()
|
|
|
|
# Auto-detech Soc type and Soc version, if detect failed, will abort build
|
|
set(SOC_VERSION "")
|
|
function(detect_ascend_soc_type SOC_VERSION)
|
|
execute_process(
|
|
COMMAND bash -c "npu-smi info|awk -F' ' 'NF > 0 && NR==7 {print $3}'"
|
|
OUTPUT_VARIABLE npu_info
|
|
RESULT_VARIABLE npu_result
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
)
|
|
if("${npu_info}" STREQUAL "" OR ${npu_result})
|
|
message(FATAL_ERROR "Auto-detech ascend soc type failed, please specify manually or check ascend device working normally.")
|
|
endif()
|
|
set(${SOC_VERSION} "Ascend${npu_info}" PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
if(NOT SOC_TYPE)
|
|
detect_ascend_soc_type(SOC_VERSION)
|
|
set(SOC_TYPE "${SOC_VERSION}")
|
|
message(STATUS "CANN: SOC_VERSION auto-detected is:${SOC_VERSION}")
|
|
endif()
|
|
|
|
string(TOLOWER ${SOC_TYPE} SOC_VERSION) # SOC_VERSION need lower
|
|
|
|
# Construct Soc specify compile option: ASCEND_#Soc_Major_SN. Such as ASCEND_910B, ASCEND_310P.
|
|
string(REGEX MATCH "[0-9]+[a-zA-Z]" SOC_TYPE_MAJOR_SN "${SOC_VERSION}")
|
|
set(SOC_TYPE_COMPILE_OPTION "ASCEND_${SOC_TYPE_MAJOR_SN}")
|
|
string(TOUPPER ${SOC_TYPE_COMPILE_OPTION} SOC_TYPE_COMPILE_OPTION)
|
|
|
|
if (CANN_INSTALL_DIR)
|
|
# Only Support Linux.
|
|
if (NOT UNIX)
|
|
message(FATAL_ERROR "CANN: CANN toolkit supports unix but not ${CMAKE_SYSTEM_NAME}")
|
|
endif()
|
|
|
|
# Supported platforms: x86-64, arm64
|
|
if (CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")
|
|
elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "amd64")
|
|
else()
|
|
message(FATAL_ERROR "CANN: CANN toolkit supports x86-64 and arm64 but not ${CMAKE_SYSTEM_PROCESSOR}")
|
|
endif()
|
|
|
|
# Set header and libs
|
|
set(CANN_INCLUDE_DIRS
|
|
${CANN_INSTALL_DIR}/include
|
|
${CANN_INSTALL_DIR}/include/aclnn
|
|
${CANN_INSTALL_DIR}/acllib/include
|
|
)
|
|
|
|
add_subdirectory(kernels)
|
|
list(APPEND CANN_LIBRARIES
|
|
ascendcl
|
|
nnopbase
|
|
opapi
|
|
acl_op_compiler
|
|
ascendc_kernels
|
|
)
|
|
|
|
file(GLOB GGML_SOURCES_CANN "*.cpp")
|
|
|
|
ggml_add_backend_library(ggml-cann ${GGML_SOURCES_CANN})
|
|
target_link_libraries(ggml-cann PRIVATE ${CANN_LIBRARIES})
|
|
target_include_directories(ggml-cann PRIVATE ${CANN_INCLUDE_DIRS})
|
|
target_link_directories(ggml-cann PRIVATE ${CANN_INSTALL_DIR}/lib64)
|
|
|
|
target_compile_definitions(ggml-cann PRIVATE "-D${SOC_TYPE_COMPILE_OPTION}")
|
|
|
|
message(STATUS "CANN: CANN_INCLUDE_DIRS = ${CANN_INCLUDE_DIRS}")
|
|
message(STATUS "CANN: CANN_LIBRARIES = ${CANN_LIBRARIES}")
|
|
else()
|
|
message(FATAL_ERROR "CANN: Can't find CANN_INSTALL_DIR, did you forget to source set_var.sh?")
|
|
endif()
|