422 lines
10 KiB
CMake
422 lines
10 KiB
CMake
configure_file(config.h.in ${CMAKE_CURRENT_SOURCE_DIR}/config.h)
|
|
|
|
# phi auto cmake utils
|
|
include(phi)
|
|
|
|
set(common_srcs CACHE INTERNAL "" FORCE)
|
|
set(api_srcs CACHE INTERNAL "" FORCE)
|
|
set(capi_srcs CACHE INTERNAL "" FORCE)
|
|
set(core_srcs CACHE INTERNAL "" FORCE)
|
|
set(backends_srcs CACHE INTERNAL "" FORCE)
|
|
set(kernels_srcs CACHE INTERNAL "" FORCE)
|
|
set(infermeta_srcs CACHE INTERNAL "" FORCE)
|
|
#set(excluded_srcs CACHE INTERNAL "" FORCE)
|
|
|
|
# paddle experimental common components
|
|
add_subdirectory(common)
|
|
# phi (low level) api headers: include
|
|
# phi (high level) api
|
|
add_subdirectory(api)
|
|
# phi core components
|
|
add_subdirectory(core)
|
|
# phi components of specific backends
|
|
add_subdirectory(backends)
|
|
# phi kernels for diff device
|
|
add_subdirectory(kernels)
|
|
# phi infermeta
|
|
add_subdirectory(infermeta)
|
|
# phi capi
|
|
if(WITH_CUSTOM_DEVICE)
|
|
add_subdirectory(capi)
|
|
endif()
|
|
|
|
if(WIN32)
|
|
file(GLOB_RECURSE YAML_FILE "${CMAKE_CURRENT_SOURCE_DIR}/ops/yaml/*.yaml")
|
|
set_property(
|
|
DIRECTORY
|
|
APPEND
|
|
PROPERTY CMAKE_CONFIGURE_DEPENDS ${YAML_FILE})
|
|
endif()
|
|
|
|
set(PHI_DEPS
|
|
phi_profiler_proto
|
|
auto_parallel_proto
|
|
glog
|
|
libuv
|
|
warpctc
|
|
warprnnt
|
|
eigen3
|
|
xxhash
|
|
cblas
|
|
utf8proc
|
|
common)
|
|
|
|
if(WITH_SLEEF)
|
|
list(APPEND PHI_DEPS sleef)
|
|
endif()
|
|
if(WITH_CINN)
|
|
list(APPEND PHI_DEPS ap_phi)
|
|
endif()
|
|
|
|
list(
|
|
APPEND
|
|
PHI_DEPS
|
|
framework_proto
|
|
pass_desc_proto
|
|
data_feed_proto
|
|
trainer_desc_proto
|
|
heter_service_proto)
|
|
|
|
set(INFERENCE_DEPS phi_profiler_proto auto_parallel_proto)
|
|
|
|
if(WITH_GPU)
|
|
list(APPEND PHI_DEPS external_error_proto)
|
|
endif()
|
|
|
|
if(WITH_ASCEND_CL)
|
|
list(APPEND PHI_DEPS npu_hccl)
|
|
endif()
|
|
|
|
if(WITH_FLASHATTN)
|
|
list(APPEND PHI_DEPS flashattn)
|
|
endif()
|
|
|
|
if(WITH_XBYAK)
|
|
list(APPEND PHI_DEPS xbyak)
|
|
endif()
|
|
|
|
if(WITH_ONEDNN)
|
|
list(APPEND PHI_DEPS onednn)
|
|
endif()
|
|
|
|
if(WITH_GLOO)
|
|
list(APPEND PHI_DEPS gloo)
|
|
endif()
|
|
|
|
if(WITH_FLAGCX)
|
|
list(APPEND PHI_DEPS flagcx)
|
|
endif()
|
|
|
|
if(WITH_CUDNN_FRONTEND)
|
|
list(APPEND PHI_DEPS cudnn-frontend)
|
|
endif()
|
|
|
|
if(WITH_POCKETFFT)
|
|
list(APPEND PHI_DEPS pocketfft)
|
|
endif()
|
|
|
|
if(WITH_MKLML)
|
|
list(APPEND PHI_DEPS pocketfft dynload_mklml)
|
|
list(APPEND INFERENCE_DEPS dynload_mklml)
|
|
endif()
|
|
|
|
if(WITH_HML)
|
|
list(APPEND PHI_DEPS dynload_hml)
|
|
list(APPEND INFERENCE_DEPS dynload_hml)
|
|
endif()
|
|
|
|
if(WITH_XPU)
|
|
list(APPEND PHI_DEPS xpulib)
|
|
if(WITH_XPU_PLUGIN)
|
|
add_subdirectory(kernels/xpu/plugin)
|
|
list(APPEND PHI_DEPS xpuplugin)
|
|
endif()
|
|
endif()
|
|
|
|
if(WITH_IPU)
|
|
list(APPEND PHI_DEPS popart-only)
|
|
endif()
|
|
|
|
if(WITH_DGC)
|
|
list(APPEND PHI_DEPS dgc)
|
|
endif()
|
|
|
|
set(PHI_CORE_SRCS
|
|
${common_srcs}
|
|
${api_srcs}
|
|
${core_srcs}
|
|
${backends_srcs}
|
|
${kernels_srcs}
|
|
${infermeta_srcs}
|
|
${capi_srcs})
|
|
|
|
set(CUSTOM_DEVICE_EXTRA_SRCS
|
|
""
|
|
CACHE STRING "Extra custom device sources to compile into phi_core")
|
|
|
|
if(WITH_CUSTOM_DEVICE_SUB_BUILD)
|
|
file(GLOB_RECURSE CUSTOM_DEVICE_REPO_SRCS
|
|
"${PADDLE_SOURCE_DIR}/../common/*.cu"
|
|
"${PADDLE_SOURCE_DIR}/../common/*.cc")
|
|
list(APPEND PHI_CORE_SRCS ${CUSTOM_DEVICE_REPO_SRCS}
|
|
${CUSTOM_DEVICE_EXTRA_SRCS})
|
|
endif()
|
|
|
|
set(PHI_GPU_SRCS ${kernels_gpu_srcs})
|
|
|
|
if(WITH_SHARED_PHI)
|
|
set(PHI_BUILD_TYPE
|
|
SHARED
|
|
CACHE INTERNAL "" FORCE)
|
|
else()
|
|
set(PHI_BUILD_TYPE
|
|
STATIC
|
|
CACHE INTERNAL "" FORCE)
|
|
endif()
|
|
|
|
if(WITH_AVX
|
|
AND AVX512F_FOUND
|
|
AND AVX512F_FLAG
|
|
AND WITH_MKL)
|
|
set_source_files_properties(
|
|
kernels/fusion/cpu/fused_layer_norm_avx_kernel.cc
|
|
kernels/fusion/cpu/fused_rms_norm_quant_avx_kernel.cc
|
|
PROPERTIES
|
|
COMPILE_FLAGS
|
|
"${Wno_Maybe_Uninitialized} ${FMA_FLAG} ${AVX512F_FLAG} ${NO_INLINE}")
|
|
set_source_files_properties(
|
|
kernels/fusion/cpu/self_dp_attention_kernel.cc
|
|
PROPERTIES COMPILE_FLAGS
|
|
"${Wno_Maybe_Uninitialized} ${FMA_FLAG} ${AVX512F_FLAG}")
|
|
endif()
|
|
|
|
if(WITH_GPU)
|
|
set_source_files_properties(
|
|
backends/gpu/gpu_resources.cc
|
|
PROPERTIES COMPILE_FLAGS
|
|
"-DCUDA_REAL_ARCHS=\"${NVCC_FLAGS_EXTRA_real_archs}\"")
|
|
if(WIN32)
|
|
nv_library(
|
|
phi ${PHI_BUILD_TYPE}
|
|
SRCS ${PHI_CORE_SRCS} ${PHI_GPU_SRCS}
|
|
DEPS ${PHI_DEPS} cuda_graph_lib dynload_cudnn dynload_cublas)
|
|
else()
|
|
nv_library(
|
|
phi_core ${PHI_BUILD_TYPE}
|
|
SRCS ${PHI_CORE_SRCS}
|
|
DEPS ${PHI_DEPS})
|
|
nv_library(
|
|
phi_gpu ${PHI_BUILD_TYPE}
|
|
SRCS ${PHI_GPU_SRCS}
|
|
DEPS ${PHI_DEPS} phi_core)
|
|
endif()
|
|
elseif(WITH_ROCM)
|
|
hip_library(
|
|
phi_core ${PHI_BUILD_TYPE}
|
|
SRCS ${PHI_CORE_SRCS}
|
|
DEPS ${PHI_DEPS})
|
|
hip_library(
|
|
phi_gpu ${PHI_BUILD_TYPE}
|
|
SRCS ${PHI_GPU_SRCS}
|
|
DEPS ${PHI_DEPS} phi_core)
|
|
if(WITH_MAGMA
|
|
AND EXISTS "${ROCM_PATH}/lib/librocsolver.so"
|
|
AND EXISTS "${ROCM_PATH}/lib/librocblas.so")
|
|
target_link_libraries(
|
|
phi_gpu ${ROCM_PATH}/lib/librocsolver.so ${ROCM_PATH}/lib/librocblas.so
|
|
-Wl,--exclude-libs,libomp.so)
|
|
else()
|
|
message(WARNING "rocsolver.so or rocblas.so not found, skipping linking.")
|
|
endif()
|
|
elseif(WITH_XPU_KP)
|
|
xpu_library(
|
|
phi_core ${PHI_BUILD_TYPE}
|
|
SRCS ${PHI_CORE_SRCS}
|
|
DEPS ${PHI_DEPS})
|
|
else()
|
|
if(WIN32)
|
|
cc_library(
|
|
phi ${PHI_BUILD_TYPE}
|
|
SRCS ${PHI_CORE_SRCS}
|
|
DEPS ${PHI_DEPS} dynload_common)
|
|
else()
|
|
cc_library(
|
|
phi_core ${PHI_BUILD_TYPE}
|
|
SRCS ${PHI_CORE_SRCS}
|
|
DEPS ${PHI_DEPS})
|
|
endif()
|
|
endif()
|
|
|
|
include(${PROJECT_SOURCE_DIR}/cmake/architecture.cmake)
|
|
paddle_detect_cuda_target_dir(CUDA_TARGET_DIR)
|
|
set(NVTX3_PATH
|
|
"${CUDA_TOOLKIT_ROOT_DIR}/targets/${CUDA_TARGET_DIR}/include/nvtx3")
|
|
get_filename_component(NVTX3_PATH "${NVTX3_PATH}" ABSOLUTE)
|
|
|
|
if(EXISTS "${NVTX3_PATH}")
|
|
if(WIN32)
|
|
target_include_directories(phi PUBLIC "${NVTX3_PATH}")
|
|
else()
|
|
target_include_directories(phi_core PUBLIC "${NVTX3_PATH}")
|
|
endif()
|
|
endif()
|
|
|
|
# core/memory/allocation uses shm_unlink and requires the rt library
|
|
if(UNIX AND NOT APPLE)
|
|
target_link_libraries(phi_core rt)
|
|
endif()
|
|
|
|
set(PHI_DUMMY_FILE ${CMAKE_CURRENT_BINARY_DIR}/phi_dummy.cpp)
|
|
if(MSVC)
|
|
set(PHI_DUMMY_FILE_CONTENT
|
|
"__declspec(dllexport) int phi_dummy_placeholder_function(){ return 0\\; }"
|
|
)
|
|
else()
|
|
set(PHI_DUMMY_FILE_CONTENT "")
|
|
endif()
|
|
file(WRITE ${PHI_DUMMY_FILE} ${PHI_DUMMY_FILE_CONTENT})
|
|
|
|
if(WIN32)
|
|
if(WITH_GPU OR WITH_ROCM)
|
|
target_link_libraries(phi ${ROCM_HIPRTC_LIB})
|
|
endif()
|
|
else()
|
|
add_library(phi ${PHI_BUILD_TYPE} ${PHI_DUMMY_FILE})
|
|
target_link_libraries(phi phi_core)
|
|
if(WITH_GPU OR WITH_ROCM)
|
|
target_link_libraries(phi phi_gpu)
|
|
target_link_libraries(phi_gpu ${ROCM_HIPRTC_LIB})
|
|
target_link_libraries(phi_core ${ROCM_HIPRTC_LIB})
|
|
endif()
|
|
endif()
|
|
|
|
# Note(silverling): some functions in phi_core depend on phi_gpu,
|
|
# when phi is built to dynamic library, it's fine. But when phi
|
|
# is built to static library, phi_gpu should be linked to phi_core.
|
|
# By the way, cyclic dependency is allowed in static library.
|
|
if((WITH_GPU OR WITH_ROCM) AND NOT WITH_SHARED_PHI)
|
|
target_link_libraries(phi_core phi_gpu)
|
|
endif()
|
|
|
|
if(WIN32)
|
|
target_compile_definitions(phi PUBLIC PHI_INNER)
|
|
else()
|
|
target_compile_definitions(phi_core PUBLIC PHI_INNER)
|
|
endif()
|
|
|
|
if(WIN32)
|
|
target_link_libraries(phi shlwapi.lib)
|
|
endif()
|
|
|
|
if(WIN32)
|
|
if(WITH_SHARED_PHI)
|
|
set_property(TARGET phi PROPERTY WINDOWS_EXPORT_ALL_SYMBOLS OFF)
|
|
set(PHI_NAME
|
|
phi.dll
|
|
CACHE INTERNAL "" FORCE)
|
|
else()
|
|
set(PHI_NAME
|
|
phi.lib
|
|
CACHE INTERNAL "" FORCE)
|
|
endif()
|
|
elseif(APPLE)
|
|
if(WITH_SHARED_PHI)
|
|
set(PHI_NAME
|
|
libphi.dylib
|
|
CACHE INTERNAL "" FORCE)
|
|
else()
|
|
set(PHI_NAME
|
|
libphi.a
|
|
CACHE INTERNAL "" FORCE)
|
|
endif()
|
|
else()
|
|
if(WITH_SHARED_PHI)
|
|
set(PHI_NAME
|
|
libphi.so
|
|
CACHE INTERNAL "" FORCE)
|
|
else()
|
|
set(PHI_NAME
|
|
libphi.a
|
|
CACHE INTERNAL "" FORCE)
|
|
endif()
|
|
endif()
|
|
|
|
set(PHI_LIB
|
|
"${CMAKE_CURRENT_BINARY_DIR}/${PHI_NAME}"
|
|
CACHE FILEPATH "PHI Dummy Library" FORCE)
|
|
|
|
if(WIN32)
|
|
set(PHI_LINK
|
|
"${CMAKE_CURRENT_BINARY_DIR}/phi.lib"
|
|
CACHE FILEPATH "PHI Import Library" FORCE)
|
|
endif()
|
|
|
|
string(REPLACE "phi" "phi_core" PHI_CORE_NAME ${PHI_NAME})
|
|
set(PHI_CORE_NAME
|
|
${PHI_CORE_NAME}
|
|
CACHE INTERNAL "" FORCE)
|
|
set(PHI_CORE_LIB
|
|
"${CMAKE_CURRENT_BINARY_DIR}/${PHI_CORE_NAME}"
|
|
CACHE FILEPATH "PHI CPU Library" FORCE)
|
|
|
|
if(WITH_GPU OR WITH_ROCM)
|
|
string(REPLACE "phi" "phi_gpu" PHI_GPU_NAME ${PHI_NAME})
|
|
set(PHI_GPU_NAME
|
|
${PHI_GPU_NAME}
|
|
CACHE INTERNAL "" FORCE)
|
|
set(PHI_GPU_LIB
|
|
"${CMAKE_CURRENT_BINARY_DIR}/${PHI_GPU_NAME}"
|
|
CACHE FILEPATH "PHI GPU Library" FORCE)
|
|
endif()
|
|
|
|
if(MKL_FOUND AND WITH_ONEMKL)
|
|
if(WIN32)
|
|
target_include_directories(phi PRIVATE ${MKL_INCLUDE})
|
|
else()
|
|
target_include_directories(phi_core PRIVATE ${MKL_INCLUDE})
|
|
endif()
|
|
endif()
|
|
|
|
add_dependencies(phi extern_lapack)
|
|
if(WITH_MAGMA)
|
|
add_dependencies(phi extern_magma)
|
|
endif()
|
|
if(WITH_CUTLASS)
|
|
add_definitions("-DPADDLE_WITH_MEMORY_EFFICIENT_ATTENTION"
|
|
)# for memory_efficient_attention.h
|
|
endif()
|
|
# PADDLE_WARP_SIZE: warp size for the target GPU platform.
|
|
# Default 32 (NVIDIA). ROCm (AMD/Hygon) wavefront size is 64.
|
|
# Override via -DPADDLE_WARP_SIZE for other platforms.
|
|
if(NOT DEFINED PADDLE_WARP_SIZE)
|
|
if(WITH_ROCM)
|
|
set(PADDLE_WARP_SIZE 64)
|
|
else()
|
|
set(PADDLE_WARP_SIZE 32)
|
|
endif()
|
|
endif()
|
|
math(EXPR PADDLE_WARP_MASK "${PADDLE_WARP_SIZE} - 1")
|
|
if(PADDLE_WARP_SIZE EQUAL 64)
|
|
set(PADDLE_WARP_SHIFT 6)
|
|
else()
|
|
set(PADDLE_WARP_SHIFT 5)
|
|
endif()
|
|
add_definitions(-DPADDLE_WARP_SIZE=${PADDLE_WARP_SIZE})
|
|
add_definitions(-DPADDLE_WARP_MASK=${PADDLE_WARP_MASK})
|
|
add_definitions(-DPADDLE_WARP_SHIFT=${PADDLE_WARP_SHIFT})
|
|
if(WITH_FLASHATTN)
|
|
add_dependencies(phi flashattn)
|
|
endif()
|
|
|
|
# for inference static library
|
|
if(NOT WITH_SHARED_PHI)
|
|
get_property(phi_modules GLOBAL PROPERTY PHI_MODULES)
|
|
set(phi_modules ${phi_modules} ${INFERENCE_DEPS} phi)
|
|
set_property(GLOBAL PROPERTY PHI_MODULES "${phi_modules}")
|
|
endif()
|
|
|
|
set(phi_extension_header_file
|
|
${CMAKE_CURRENT_SOURCE_DIR}/extension.h
|
|
CACHE INTERNAL "phi/extension.h file")
|
|
file(
|
|
WRITE ${phi_extension_header_file}
|
|
"// Header file generated by paddle/phi/CMakeLists.txt for external users,\n// DO NOT edit or include it within paddle.\n\n#pragma once\n\n"
|
|
)
|
|
|
|
file(APPEND ${phi_extension_header_file} "#include \"paddle/phi/config.h\"\n\n")
|
|
# generate inner headers include dir for users
|
|
generate_unify_header(backends EXCLUDES context_pool_utils.h)
|
|
generate_unify_header(core EXCLUDES cuda_stream.h)
|
|
generate_unify_header(infermeta)
|
|
generate_unify_header(kernels SKIP_SUFFIX grad_kernel)
|