2024-10-18 00:21:04 +08:00
include ( FetchContent )
set ( CMAKE_CXX_STANDARD_REQUIRED ON )
set ( CMAKE_CXX_EXTENSIONS ON )
2024-04-02 13:07:30 +08:00
set ( CMAKE_EXPORT_COMPILE_COMMANDS ON )
2025-01-08 05:35:49 -03:00
if ( ${ CMAKE_SYSTEM_NAME } MATCHES "Darwin" )
set ( MACOSX_FOUND TRUE )
endif ( )
2024-04-02 13:07:30 +08:00
#
# Define environment variables for special configurations
#
if ( DEFINED ENV{VLLM_CPU_AVX512BF16} )
set ( ENABLE_AVX512BF16 ON )
endif ( )
include_directories ( "${CMAKE_SOURCE_DIR}/csrc" )
2025-01-08 05:35:49 -03:00
set ( ENABLE_NUMA TRUE )
2024-04-02 13:07:30 +08:00
#
# Check the compile flags
#
2024-11-26 08:02:39 +05:30
if ( CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64" )
2024-11-19 23:04:57 +05:30
list ( APPEND CXX_COMPILE_FLAGS
" - m f 1 6 c "
2024-11-26 08:02:39 +05:30
)
2024-11-19 23:04:57 +05:30
endif ( )
2024-04-02 13:07:30 +08:00
2025-01-08 05:35:49 -03:00
if ( MACOSX_FOUND )
list ( APPEND CXX_COMPILE_FLAGS
" - X p r e p r o c e s s o r "
" - f o p e n m p "
" - D V L L M _ C P U _ E X T E N S I O N " )
else ( )
list ( APPEND CXX_COMPILE_FLAGS
" - f o p e n m p "
" - D V L L M _ C P U _ E X T E N S I O N " )
endif ( )
2024-04-02 13:07:30 +08:00
2025-01-08 05:35:49 -03:00
if ( NOT MACOSX_FOUND )
execute_process ( COMMAND cat /proc/cpuinfo
R E S U L T _ V A R I A B L E C P U I N F O _ R E T
O U T P U T _ V A R I A B L E C P U I N F O )
if ( NOT CPUINFO_RET EQUAL 0 )
message ( FATAL_ERROR "Failed to check CPU features via /proc/cpuinfo" )
endif ( )
2024-04-02 13:07:30 +08:00
endif ( )
2025-01-08 05:35:49 -03:00
2024-04-02 13:07:30 +08:00
function ( find_isa CPUINFO TARGET OUT )
string ( FIND ${ CPUINFO } ${ TARGET } ISA_FOUND )
if ( NOT ISA_FOUND EQUAL -1 )
set ( ${ OUT } ON PARENT_SCOPE )
else ( )
set ( ${ OUT } OFF PARENT_SCOPE )
endif ( )
endfunction ( )
2024-06-18 02:36:10 +08:00
function ( is_avx512_disabled OUT )
set ( DISABLE_AVX512 $ENV{ VLLM_CPU_DISABLE_AVX512 } )
if ( DISABLE_AVX512 AND DISABLE_AVX512 STREQUAL "true" )
set ( ${ OUT } ON PARENT_SCOPE )
else ( )
set ( ${ OUT } OFF PARENT_SCOPE )
endif ( )
endfunction ( )
is_avx512_disabled ( AVX512_DISABLED )
2025-01-08 05:35:49 -03:00
if ( MACOSX_FOUND AND CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64" )
set ( APPLE_SILICON_FOUND TRUE )
else ( )
find_isa ( ${ CPUINFO } "avx2" AVX2_FOUND )
find_isa ( ${ CPUINFO } "avx512f" AVX512_FOUND )
find_isa ( ${ CPUINFO } "POWER10" POWER10_FOUND )
find_isa ( ${ CPUINFO } "POWER9" POWER9_FOUND )
find_isa ( ${ CPUINFO } "asimd" ASIMD_FOUND ) # Check for ARM NEON support
find_isa ( ${ CPUINFO } "bf16" ARM_BF16_FOUND ) # Check for ARM BF16 support
2025-03-06 22:10:53 +05:30
find_isa ( ${ CPUINFO } "S390" S390_FOUND )
2025-01-08 05:35:49 -03:00
endif ( )
2024-04-02 13:07:30 +08:00
2024-06-18 02:36:10 +08:00
if ( AVX512_FOUND AND NOT AVX512_DISABLED )
2024-04-02 13:07:30 +08:00
list ( APPEND CXX_COMPILE_FLAGS
" - m a v x 5 1 2 f "
" - m a v x 5 1 2 v l "
" - m a v x 5 1 2 b w "
" - m a v x 5 1 2 d q " )
find_isa ( ${ CPUINFO } "avx512_bf16" AVX512BF16_FOUND )
if ( AVX512BF16_FOUND OR ENABLE_AVX512BF16 )
2024-06-09 16:23:30 -04:00
if ( CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND
C M A K E _ C X X _ C O M P I L E R _ V E R S I O N V E R S I O N _ G R E A T E R _ E Q U A L 1 2 . 3 )
2024-04-02 13:07:30 +08:00
list ( APPEND CXX_COMPILE_FLAGS "-mavx512bf16" )
else ( )
message ( WARNING "Disable AVX512-BF16 ISA support, requires gcc/g++ >= 12.3" )
endif ( )
else ( )
message ( WARNING "Disable AVX512-BF16 ISA support, no avx512_bf16 found in local CPU flags." " If cross-compilation is required, please set env VLLM_CPU_AVX512BF16=1." )
endif ( )
2024-11-26 08:02:39 +05:30
2024-06-14 07:22:24 +08:00
elseif ( AVX2_FOUND )
list ( APPEND CXX_COMPILE_FLAGS "-mavx2" )
message ( WARNING "vLLM CPU backend using AVX2 ISA" )
2024-11-26 08:02:39 +05:30
2024-06-26 17:53:04 -04:00
elseif ( POWER9_FOUND OR POWER10_FOUND )
message ( STATUS "PowerPC detected" )
# Check for PowerPC VSX support
list ( APPEND CXX_COMPILE_FLAGS
" - m v s x "
" - m c p u = n a t i v e "
" - m t u n e = n a t i v e " )
2024-11-26 08:02:39 +05:30
elseif ( ASIMD_FOUND )
message ( STATUS "ARMv8 or later architecture detected" )
if ( ARM_BF16_FOUND )
message ( STATUS "BF16 extension detected" )
set ( MARCH_FLAGS "-march=armv8.2-a+bf16+dotprod+fp16" )
add_compile_definitions ( ARM_BF16_SUPPORT )
else ( )
message ( WARNING "BF16 functionality is not available" )
set ( MARCH_FLAGS "-march=armv8.2-a+dotprod+fp16" )
endif ( )
list ( APPEND CXX_COMPILE_FLAGS ${ MARCH_FLAGS } )
2025-01-08 05:35:49 -03:00
elseif ( APPLE_SILICON_FOUND )
message ( STATUS "Apple Silicon Detected" )
set ( ENABLE_NUMA OFF )
2025-03-06 22:10:53 +05:30
elseif ( S390_FOUND )
message ( STATUS "S390 detected" )
# Check for S390 VXE support
list ( APPEND CXX_COMPILE_FLAGS
" - m v x "
" - m z v e c t o r "
" - m a r c h = n a t i v e "
" - m t u n e = n a t i v e " )
2024-04-02 13:07:30 +08:00
else ( )
2025-03-06 22:10:53 +05:30
message ( FATAL_ERROR "vLLM CPU backend requires AVX512, AVX2, Power9+ ISA, S390X ISA or ARMv8 support." )
2024-04-02 13:07:30 +08:00
endif ( )
2024-10-18 00:21:04 +08:00
#
# Build oneDNN for W8A8 GEMM kernels (only for x86-AVX512 platforms)
#
if ( AVX512_FOUND AND NOT AVX512_DISABLED )
FetchContent_Declare (
o n e D N N
G I T _ R E P O S I T O R Y h t t p s : / / g i t h u b . c o m / o n e a p i - s r c / o n e D N N . g i t
2024-11-07 18:42:50 +08:00
G I T _ T A G v 3 . 6
2024-10-18 00:21:04 +08:00
G I T _ P R O G R E S S T R U E
G I T _ S H A L L O W T R U E
)
set ( ONEDNN_LIBRARY_TYPE "STATIC" )
set ( ONEDNN_BUILD_DOC "OFF" )
set ( ONEDNN_BUILD_EXAMPLES "OFF" )
set ( ONEDNN_BUILD_TESTS "OFF" )
set ( ONEDNN_ENABLE_WORKLOAD "INFERENCE" )
set ( ONEDNN_ENABLE_PRIMITIVE "MATMUL;REORDER" )
set ( ONEDNN_BUILD_GRAPH "OFF" )
set ( ONEDNN_ENABLE_JIT_PROFILING "OFF" )
set ( ONEDNN_ENABLE_ITT_TASKS "OFF" )
set ( ONEDNN_ENABLE_MAX_CPU_ISA "OFF" )
set ( ONEDNN_ENABLE_CPU_ISA_HINTS "OFF" )
set ( CMAKE_POLICY_DEFAULT_CMP0077 NEW )
FetchContent_MakeAvailable ( oneDNN )
list ( APPEND LIBS dnnl )
endif ( )
2024-04-02 13:07:30 +08:00
message ( STATUS "CPU extension compile flags: ${CXX_COMPILE_FLAGS}" )
2025-01-08 05:35:49 -03:00
if ( ENABLE_NUMA )
list ( APPEND LIBS numa )
else ( )
message ( STATUS "NUMA is disabled" )
add_compile_definitions ( -DVLLM_NUMA_DISABLED )
endif ( )
2024-10-04 22:54:42 +05:30
2024-04-02 13:07:30 +08:00
#
# _C extension
#
set ( VLLM_EXT_SRC
" c s r c / c p u / a c t i v a t i o n . c p p "
" c s r c / c p u / a t t e n t i o n . c p p "
" c s r c / c p u / c a c h e . c p p "
2024-07-27 04:50:10 +08:00
" c s r c / c p u / u t i l s . c p p "
2024-04-02 13:07:30 +08:00
" c s r c / c p u / l a y e r n o r m . c p p "
" c s r c / c p u / p o s _ e n c o d i n g . c p p "
2024-06-09 16:23:30 -04:00
" c s r c / c p u / t o r c h _ b i n d i n g s . c p p " )
2024-04-02 13:07:30 +08:00
2024-09-12 00:46:46 +08:00
if ( AVX512_FOUND AND NOT AVX512_DISABLED )
set ( VLLM_EXT_SRC
" c s r c / c p u / q u a n t . c p p "
$ { V L L M _ E X T _ S R C } )
endif ( )
#
# Define extension targets
#
2024-04-02 13:07:30 +08:00
define_gpu_extension_target (
_ C
D E S T I N A T I O N v l l m
L A N G U A G E C X X
S O U R C E S $ { V L L M _ E X T _ S R C }
2024-07-27 04:50:10 +08:00
L I B R A R I E S $ { L I B S }
2024-04-02 13:07:30 +08:00
C O M P I L E _ F L A G S $ { C X X _ C O M P I L E _ F L A G S }
2024-06-09 16:23:30 -04:00
U S E _ S A B I 3
W I T H _ S O A B I
2024-04-02 13:07:30 +08:00
)
2024-11-26 08:02:39 +05:30
message ( STATUS "Enabling C extension." )