Skip to content

Commit

Permalink
Experimental option to build libcuml++ only with FIL (#4225)
Browse files Browse the repository at this point in the history
cc @wphicks

Authors:
  - Dante Gama Dessavre (https://github.com/dantegd)

Approvers:
  - William Hicks (https://github.com/wphicks)
  - Corey J. Nolet (https://github.com/cjnolet)

URL: #4225
  • Loading branch information
dantegd authored Sep 30, 2021
1 parent 079e9e9 commit 835a9ae
Show file tree
Hide file tree
Showing 2 changed files with 139 additions and 100 deletions.
160 changes: 96 additions & 64 deletions cpp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,10 @@ option(NVTX "Enable nvtx markers" OFF)
option(SINGLEGPU "Disable all mnmg components and comms libraries" OFF)
option(USE_CCACHE "Cache build artifacts with ccache" OFF)

set(CUML_CPP_ALGORITHMS "ALL" CACHE STRING "Experimental: Choose which algorithms are built into libcuml++.so. Only 'FIL' and 'ALL' are supported right now.")
set_property(CACHE CUML_CPP_ALGORITHMS PROPERTY STRINGS "ALL" "FIL")
message(VERBOSE "CUML: Building libcuml++ with algoriths: '${CUML_CPP_ALGORITHMS}'.")

message(VERBOSE "CUML: Building libcuml_c shared library. Contains the cuML C API: ${BUILD_CUML_C_LIBRARY}")
message(VERBOSE "CUML: Building libcuml shared library: ${BUILD_CUML_CPP_LIBRARY}")
message(VERBOSE "CUML: Building cuML algorithm tests: ${BUILD_CUML_TESTS}")
Expand Down Expand Up @@ -148,6 +152,15 @@ if(NOT BUILD_CUML_CPP_LIBRARY)
set(BUILD_CUML_EXAMPLES OFF)
endif()

if(CUML_CPP_ALGORITHMS STREQUAL "ALL")
set(LINK_FAISS ON)
elseif(CUML_CPP_ALGORITHMS STREQUAL "FIL")
set(SINGLEGPU ON)
set(BUILD_CUML_C_LIBRARY OFF)
set(BUILD_CUML_EXAMPLES OFF)
set(LINK_FAISS OFF)
endif()

# SingleGPU build disables cumlprims_mg and comms components
if(SINGLEGPU)
message(STATUS "Detected SINGLEGPU build option")
Expand Down Expand Up @@ -178,7 +191,11 @@ rapids_cpm_init()

include(cmake/thirdparty/get_thrust.cmake)
include(cmake/thirdparty/get_rmm.cmake)
include(cmake/thirdparty/get_faiss.cmake)

if(LINK_FAISS)
include(cmake/thirdparty/get_faiss.cmake)
endif()

include(cmake/thirdparty/get_treelite.cmake)
include(cmake/thirdparty/get_raft.cmake)

Expand Down Expand Up @@ -216,69 +233,84 @@ endif()
if(BUILD_CUML_CPP_LIBRARY)

# single GPU components

# common components
add_library(${CUML_CPP_TARGET} SHARED
src/arima/batched_arima.cu
src/arima/batched_kalman.cu
src/common/logger.cpp
src/common/nvtx.cu
src/datasets/make_arima.cu
src/datasets/make_blobs.cu
src/datasets/make_regression.cu
src/dbscan/dbscan.cu
src/decisiontree/decisiontree.cu
src/explainer/kernel_shap.cu
src/explainer/permutation_shap.cu
src/fil/fil.cu
src/fil/infer.cu
src/glm/glm.cu
src/genetic/genetic.cu
src/genetic/node.cu
src/hdbscan/hdbscan.cu
src/hdbscan/condensed_hierarchy.cu
src/holtwinters/holtwinters.cu
src/kmeans/kmeans.cu
src/knn/knn.cu
src/knn/knn_sparse.cu
src/hierarchy/linkage.cu
src/metrics/accuracy_score.cu
src/metrics/adjusted_rand_index.cu
src/metrics/completeness_score.cu
src/metrics/entropy.cu
src/metrics/homogeneity_score.cu
src/metrics/kl_divergence.cu
src/metrics/mutual_info_score.cu
src/metrics/pairwise_distance.cu
src/metrics/pairwise_distance_canberra.cu
src/metrics/pairwise_distance_chebyshev.cu
src/metrics/pairwise_distance_correlation.cu
src/metrics/pairwise_distance_cosine.cu
src/metrics/pairwise_distance_euclidean.cu
src/metrics/pairwise_distance_hamming.cu
src/metrics/pairwise_distance_hellinger.cu
src/metrics/pairwise_distance_jensen_shannon.cu
src/metrics/pairwise_distance_kl_divergence.cu
src/metrics/pairwise_distance_l1.cu
src/metrics/pairwise_distance_minkowski.cu
src/metrics/pairwise_distance_russell_rao.cu
src/metrics/r2_score.cu
src/metrics/rand_index.cu
src/metrics/silhouette_score.cu
src/metrics/trustworthiness.cu
src/metrics/v_measure.cu
src/pca/pca.cu
src/randomforest/randomforest.cu
src/random_projection/rproj.cu
src/solver/lars.cu
src/solver/solver.cu
src/spectral/spectral.cu
src/svm/svc.cu
src/svm/svr.cu
src/svm/ws_util.cu
src/tsa/auto_arima.cu
src/tsa/stationarity.cu
src/tsne/tsne.cu
src/tsvd/tsvd.cu
src/umap/umap.cu)
src/common/logger.cpp
src/common/nvtx.cu)


# FIL components
target_sources(${CUML_CPP_TARGET}
PRIVATE
src/fil/fil.cu
src/fil/infer.cu)

# Rest of the algorithms
if(CUML_CPP_ALGORITHMS STREQUAL "ALL")
target_sources(${CUML_CPP_TARGET}
PRIVATE
src/arima/batched_arima.cu
src/arima/batched_kalman.cu
src/datasets/make_arima.cu
src/datasets/make_blobs.cu
src/datasets/make_regression.cu
src/dbscan/dbscan.cu
src/decisiontree/decisiontree.cu
src/explainer/kernel_shap.cu
src/explainer/permutation_shap.cu
src/fil/fil.cu
src/fil/infer.cu
src/glm/glm.cu
src/genetic/genetic.cu
src/genetic/node.cu
src/hdbscan/hdbscan.cu
src/hdbscan/condensed_hierarchy.cu
src/holtwinters/holtwinters.cu
src/kmeans/kmeans.cu
src/knn/knn.cu
src/knn/knn_sparse.cu
src/hierarchy/linkage.cu
src/metrics/accuracy_score.cu
src/metrics/adjusted_rand_index.cu
src/metrics/completeness_score.cu
src/metrics/entropy.cu
src/metrics/homogeneity_score.cu
src/metrics/kl_divergence.cu
src/metrics/mutual_info_score.cu
src/metrics/pairwise_distance.cu
src/metrics/pairwise_distance_canberra.cu
src/metrics/pairwise_distance_chebyshev.cu
src/metrics/pairwise_distance_correlation.cu
src/metrics/pairwise_distance_cosine.cu
src/metrics/pairwise_distance_euclidean.cu
src/metrics/pairwise_distance_hamming.cu
src/metrics/pairwise_distance_hellinger.cu
src/metrics/pairwise_distance_jensen_shannon.cu
src/metrics/pairwise_distance_kl_divergence.cu
src/metrics/pairwise_distance_l1.cu
src/metrics/pairwise_distance_minkowski.cu
src/metrics/pairwise_distance_russell_rao.cu
src/metrics/r2_score.cu
src/metrics/rand_index.cu
src/metrics/silhouette_score.cu
src/metrics/trustworthiness.cu
src/metrics/v_measure.cu
src/pca/pca.cu
src/randomforest/randomforest.cu
src/random_projection/rproj.cu
src/solver/lars.cu
src/solver/solver.cu
src/spectral/spectral.cu
src/svm/svc.cu
src/svm/svr.cu
src/svm/ws_util.cu
src/tsa/auto_arima.cu
src/tsa/stationarity.cu
src/tsne/tsne.cu
src/tsvd/tsvd.cu
src/umap/umap.cu)
endif()

# multi GPU components
# todo: separate mnmg that require cumlprims from those that don't
Expand Down Expand Up @@ -352,7 +384,7 @@ if(BUILD_CUML_CPP_LIBRARY)
CUDA::cudart
CUDA::cusparse
$<$<BOOL:${NVTX}>:CUDA::nvToolsExt>
FAISS::FAISS
$<$<BOOL:${LINK_FAISS}>:FAISS::FAISS>
$<IF:$<BOOL:${Treelite_ADDED}>,treelite::treelite_static,treelite::treelite>
$<IF:$<BOOL:${Treelite_ADDED}>,treelite::treelite_runtime_static,treelite::treelite_runtime>
$<$<BOOL:${OpenMP_FOUND}>:OpenMP::OpenMP_CXX>
Expand Down
79 changes: 43 additions & 36 deletions cpp/test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ set(COMMON_TEST_LINK_LIBRARIES
CUDA::cufft
rmm::rmm
raft::raft
FAISS::FAISS
$<$<BOOL:${LINK_FAISS}>:FAISS::FAISS>
GTest::gtest
GTest::gtest_main
OpenMP::OpenMP_CXX
Expand All @@ -38,39 +38,46 @@ set(COMMON_TEST_LINK_LIBRARIES

if(BUILD_CUML_TESTS)
# (please keep the filenames in alphabetical order)

# Separable executable for each test targetted for 21.12, meanwhile
# we can just separate FIL here, full algorithm support in progress
add_executable(${CUML_CPP_TEST_TARGET}
sg/cd_test.cu
sg/fil_child_index_test.cu
sg/dbscan_test.cu
sg/fil_test.cu
sg/fnv_hash_test.cpp
sg/genetic/node_test.cpp
sg/genetic/param_test.cu
sg/handle_test.cu
sg/hdbscan_test.cu
sg/holtwinters_test.cu
sg/kmeans_test.cu
sg/knn_test.cu
sg/lars_test.cu
sg/linkage_test.cu
sg/logger.cpp
sg/multi_sum_test.cu
sg/nvtx_test.cpp
sg/ols.cu
sg/pca_test.cu
sg/quasi_newton.cu
sg/rf_test.cu
sg/ridge.cu
sg/rproj_test.cu
sg/sgd.cu
sg/shap_kernel.cu
sg/svc_test.cu
sg/trustworthiness_test.cu
sg/tsne_test.cu
sg/tsvd_test.cu
sg/umap_parametrizable_test.cu
$<$<BOOL:BUILD_CUML_C_LIBRARY>:sg/handle_test.cu>
)
sg/fil_test.cu)

if(CUML_CPP_ALGORITHMS STREQUAL "ALL")
target_sources(${CUML_CPP_TEST_TARGET}
PRIVATE
sg/cd_test.cu
sg/dbscan_test.cu
sg/fnv_hash_test.cpp
sg/genetic/node_test.cpp
sg/genetic/param_test.cu
sg/hdbscan_test.cu
sg/holtwinters_test.cu
sg/kmeans_test.cu
sg/knn_test.cu
sg/lars_test.cu
sg/linkage_test.cu
sg/logger.cpp
sg/multi_sum_test.cu
sg/nvtx_test.cpp
sg/ols.cu
sg/pca_test.cu
sg/quasi_newton.cu
sg/rf_test.cu
sg/ridge.cu
sg/rproj_test.cu
sg/sgd.cu
sg/shap_kernel.cu
sg/svc_test.cu
sg/trustworthiness_test.cu
sg/tsne_test.cu
sg/tsvd_test.cu
sg/umap_parametrizable_test.cu
$<$<BOOL:${BUILD_CUML_C_LIBRARY}>:sg/handle_test.cu>
)
endif()

target_compile_options(${CUML_CPP_TEST_TARGET}
PRIVATE "$<$<COMPILE_LANGUAGE:CXX>:${CUML_CXX_FLAGS}>"
Expand All @@ -87,8 +94,8 @@ if(BUILD_CUML_TESTS)

target_link_libraries(${CUML_CPP_TEST_TARGET}
PRIVATE
cuml
$<$<BOOL:BUILD_CUML_C_LIBRARY>:${CUML_C_TARGET}>
${CUML_CPP_TARGET}
$<$<BOOL:${BUILD_CUML_C_LIBRARY}>:${CUML_C_TARGET}>
${COMMON_TEST_LINK_LIBRARIES}
)

Expand Down Expand Up @@ -122,7 +129,7 @@ if(BUILD_CUML_MG_TESTS)
)

target_link_libraries(${CUML_MG_TEST_TARGET}
cuml
${CUML_CPP_TARGET}
${COMMON_TEST_LINK_LIBRARIES}
NCCL::NCCL
${MPI_CXX_LIBRARIES}
Expand Down Expand Up @@ -214,7 +221,7 @@ if(BUILD_PRIMS_TESTS)

target_link_libraries(${PRIMS_TEST_TARGET}
PRIVATE
cuml
${CUML_CPP_TARGET}
${COMMON_TEST_LINK_LIBRARIES}
)

Expand Down

0 comments on commit 835a9ae

Please sign in to comment.