@@ -4,6 +4,7 @@ option(USE_CUDA "Support NVIDIA CUDA" OFF)
44option (PROFILE_MODE "ENABLE PROFILE MODE" OFF )
55option (USE_OMP "Use OpenMP as backend for Eigen" ON )
66option (USE_NCCL "Build project for distributed running" ON )
7+ option (USE_INFINIOPS "Use InfiniOps as an optional kernel provider" OFF )
78option (BUILD_TEST "Build InfiniTrain tests" OFF )
89
910project (infini_train VERSION 0.5.0 LANGUAGES CXX )
@@ -51,6 +52,32 @@ include_directories(${PROJECT_SOURCE_DIR}/third_party/eigen)
5152
5253include_directories (${PROJECT_SOURCE_DIR } )
5354
55+ if (USE_INFINIOPS)
56+ add_compile_definitions (USE_INFINIOPS=1 )
57+
58+ set (INFINIOPS_SOURCE_DIR "${PROJECT_SOURCE_DIR } /third_party/InfiniOps" )
59+ if (NOT EXISTS "${INFINIOPS_SOURCE_DIR } /CMakeLists.txt" )
60+ message (FATAL_ERROR
61+ "USE_INFINIOPS=ON requires InfiniOps under third_party/InfiniOps. "
62+ "Run: git submodule update --init third_party/InfiniOps" )
63+ endif ()
64+
65+ set (INFINIOPS_WITH_CPU OFF )
66+ if (NOT USE_CUDA)
67+ set (INFINIOPS_WITH_CPU ON )
68+ endif ()
69+
70+ set (WITH_CPU ${INFINIOPS_WITH_CPU} CACHE BOOL "Enable InfiniOps CPU backend" FORCE )
71+ set (WITH_NVIDIA ${USE_CUDA} CACHE BOOL "Enable InfiniOps NVIDIA backend" FORCE )
72+ add_subdirectory (${INFINIOPS_SOURCE_DIR } ${CMAKE_BINARY_DIR } /third_party/InfiniOps EXCLUDE_FROM_ALL )
73+ if (NOT TARGET infiniops)
74+ message (FATAL_ERROR "InfiniOps third-party project did not define target `infiniops`" )
75+ endif ()
76+ if (NOT TARGET InfiniOps::infiniops)
77+ add_library (InfiniOps::infiniops ALIAS infiniops )
78+ endif ()
79+ endif ()
80+
5481if (PROFILE_MODE)
5582 add_compile_definitions (PROFILE_MODE=1 )
5683endif ()
@@ -62,9 +89,13 @@ endif()
6289# Framework core sources (*.cc), excluding cpu kernels (they are built separately)
6390file (GLOB_RECURSE SRC ${PROJECT_SOURCE_DIR } /infini_train/src/*.cc )
6491list (FILTER SRC EXCLUDE REGEX ".*kernels/cpu/.*" )
92+ if (NOT USE_INFINIOPS)
93+ list (FILTER SRC EXCLUDE REGEX ".*infini_train/src/core/kernel_provider/infiniops/.*\. cc$" )
94+ endif ()
6595if (NOT USE_CUDA)
6696 list (FILTER SRC EXCLUDE REGEX ".*runtime/cuda/.*" )
6797 list (FILTER SRC EXCLUDE REGEX ".*ccl/cuda/.*" )
98+ list (FILTER SRC EXCLUDE REGEX ".*infini_train/src/core/kernel_provider/infiniops/cuda/.*" )
6899endif ()
69100if (NOT USE_NCCL)
70101 list (FILTER SRC EXCLUDE REGEX ".*infini_train/src/core/ccl/cuda/.*" )
@@ -100,8 +131,14 @@ if(USE_CUDA)
100131
101132 # Only compile CUDA kernels / cuda sources here (your original used src/*.cu)
102133 file (GLOB_RECURSE CUDA_KERNELS ${PROJECT_SOURCE_DIR } /infini_train/src/*.cu )
134+ if (NOT USE_INFINIOPS)
135+ list (FILTER CUDA_KERNELS EXCLUDE REGEX ".*infini_train/src/core/kernel_provider/infiniops/.*\. cu$" )
136+ endif ()
103137
104138 add_library (infini_train_cuda_kernels STATIC ${CUDA_KERNELS} )
139+ if (USE_INFINIOPS)
140+ target_link_libraries (infini_train_cuda_kernels PUBLIC InfiniOps::infiniops )
141+ endif ()
105142 set_target_properties (infini_train_cuda_kernels PROPERTIES CUDA_ARCHITECTURES "75;80;90" )
106143
107144 target_link_libraries (infini_train_cuda_kernels
@@ -126,6 +163,9 @@ endif()
126163# ------------------------------------------------------------------------------
127164
128165add_library (infini_train STATIC ${SRC} )
166+ if (USE_INFINIOPS)
167+ target_link_libraries (infini_train PUBLIC InfiniOps::infiniops )
168+ endif ()
129169target_link_libraries (infini_train
130170 PUBLIC
131171 glog
0 commit comments