2024-04-02 13:07:30 +08:00
set ( CMAKE_EXPORT_COMPILE_COMMANDS ON )
2024-09-12 00:46:46 +08:00
set ( CMAKE_CXX_STANDARD 17 )
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" )
#
# Check the compile flags
#
2024-06-09 16:23:30 -04:00
list ( APPEND CXX_COMPILE_FLAGS
2024-04-02 13:07:30 +08:00
" - f o p e n m p "
" - D V L L M _ C P U _ E X T E N S I O N " )
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 ( )
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 )
2024-06-14 07:22:24 +08:00
find_isa ( ${ CPUINFO } "avx2" AVX2_FOUND )
2024-04-02 13:07:30 +08:00
find_isa ( ${ CPUINFO } "avx512f" AVX512_FOUND )
2024-06-26 17:53:04 -04:00
find_isa ( ${ CPUINFO } "POWER10" POWER10_FOUND )
find_isa ( ${ CPUINFO } "POWER9" POWER9_FOUND )
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-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-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-04-02 13:07:30 +08:00
else ( )
2024-06-26 17:53:04 -04:00
message ( FATAL_ERROR "vLLM CPU backend requires AVX512 or AVX2 or Power9+ ISA support." )
2024-04-02 13:07:30 +08:00
endif ( )
message ( STATUS "CPU extension compile flags: ${CXX_COMPILE_FLAGS}" )
2024-10-04 22:54:42 +05:30
list ( APPEND LIBS numa )
# Appending the dnnl library for the AVX2 and AVX512, as it is not utilized by Power architecture.
if ( AVX2_FOUND OR AVX512_FOUND )
list ( APPEND LIBS dnnl )
endif ( )
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
)
message ( STATUS "Enabling C extension." )