Skip to content

Commit 7df3bbd

Browse files
Use CUDA math wheels (#5966)
Use CUDA math wheels to reduce wheel size by not statically linking CUDA math libraries. Contributes to rapidsai/build-planning#35 Authors: - Kyle Edwards (https://github.com/KyleFromNVIDIA) Approvers: - Bradley Dice (https://github.com/bdice) - Vyas Ramasubramani (https://github.com/vyasr) URL: #5966
1 parent f677791 commit 7df3bbd

File tree

4 files changed

+71
-4
lines changed

4 files changed

+71
-4
lines changed

ci/build_wheel.sh

+21-2
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,33 @@ rapids-generate-version > ./VERSION
1818

1919
cd ${package_dir}
2020

21-
SKBUILD_CMAKE_ARGS="-DDETECT_CONDA_ENV=OFF;-DDISABLE_DEPRECATION_WARNINGS=ON;-DCPM_cumlprims_mg_SOURCE=${GITHUB_WORKSPACE}/cumlprims_mg/" \
21+
case "${RAPIDS_CUDA_VERSION}" in
22+
12.*)
23+
EXCLUDE_ARGS=(
24+
--exclude "libcublas.so.12"
25+
--exclude "libcublasLt.so.12"
26+
--exclude "libcufft.so.11"
27+
--exclude "libcurand.so.10"
28+
--exclude "libcusolver.so.11"
29+
--exclude "libcusparse.so.12"
30+
--exclude "libnvJitLink.so.12"
31+
)
32+
EXTRA_CMAKE_ARGS=";-DUSE_CUDA_MATH_WHEELS=ON"
33+
;;
34+
11.*)
35+
EXCLUDE_ARGS=()
36+
EXTRA_CMAKE_ARGS=";-DUSE_CUDA_MATH_WHEELS=OFF"
37+
;;
38+
esac
39+
40+
SKBUILD_CMAKE_ARGS="-DDETECT_CONDA_ENV=OFF;-DDISABLE_DEPRECATION_WARNINGS=ON;-DCPM_cumlprims_mg_SOURCE=${GITHUB_WORKSPACE}/cumlprims_mg/${EXTRA_CMAKE_ARGS}" \
2241
python -m pip wheel . \
2342
-w dist \
2443
-vvv \
2544
--no-deps \
2645
--disable-pip-version-check
2746

2847
mkdir -p final_dist
29-
python -m auditwheel repair -w final_dist dist/*
48+
python -m auditwheel repair -w final_dist "${EXCLUDE_ARGS[@]}" dist/*
3049

3150
RAPIDS_PY_WHEEL_NAME="cuml_${RAPIDS_PY_CUDA_SUFFIX}" rapids-upload-wheels-to-s3 final_dist

dependencies.yaml

+21
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ files:
8888
extras:
8989
table: project
9090
includes:
91+
- cuda
9192
- py_run
9293
py_test:
9394
output: pyproject
@@ -406,6 +407,26 @@ dependencies:
406407
- *libcusolver114
407408
- *libcusparse_dev114
408409
- *libcusparse114
410+
- output_types: pyproject
411+
matrices:
412+
- matrix:
413+
cuda: "12.*"
414+
packages:
415+
- nvidia-cublas-cu12
416+
- nvidia-cufft-cu12
417+
- nvidia-curand-cu12
418+
- nvidia-cusparse-cu12
419+
- nvidia-cusolver-cu12
420+
- matrix:
421+
cuda: "11.*"
422+
packages:
423+
- matrix:
424+
packages:
425+
- nvidia-cublas
426+
- nvidia-cufft
427+
- nvidia-curand
428+
- nvidia-cusparse
429+
- nvidia-cusolver
409430
docs:
410431
common:
411432
- output_types: [conda, requirements]

python/cuml/CMakeLists.txt

+24-2
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ project(
3838
option(CUML_UNIVERSAL "Build all cuML Python components." ON)
3939
option(FIND_CUML_CPP "Search for existing CUML C++ installations before defaulting to local files" OFF)
4040
option(SINGLEGPU "Disable all mnmg components and comms libraries" OFF)
41+
option(USE_CUDA_MATH_WHEELS "Use the CUDA math wheels instead of the system libraries" OFF)
4142
set(CUML_RAFT_CLONE_ON_PIN OFF)
4243

4344

@@ -72,8 +73,10 @@ include(rapids-cython-core)
7273

7374
set(CUML_PYTHON_TREELITE_TARGET treelite::treelite)
7475

75-
if(NOT ${CUML_CPU})
76+
if(NOT CUML_CPU)
7677
if(NOT cuml_FOUND)
78+
find_package(CUDAToolkit REQUIRED)
79+
7780
set(BUILD_CUML_TESTS OFF)
7881
set(BUILD_PRIMS_TESTS OFF)
7982
set(BUILD_CUML_C_LIBRARY OFF)
@@ -85,11 +88,19 @@ if(NOT ${CUML_CPU})
8588

8689
# Statically link dependencies if building wheels
8790
set(CUDA_STATIC_RUNTIME ON)
88-
set(CUDA_STATIC_MATH_LIBRARIES ON)
8991
set(CUML_USE_RAFT_STATIC ON)
9092
set(CUML_USE_FAISS_STATIC ON)
9193
set(CUML_USE_TREELITE_STATIC ON)
9294
set(CUML_USE_CUMLPRIMS_MG_STATIC ON)
95+
# Link to the CUDA wheels with shared libraries for CUDA 12+
96+
if(CUDAToolkit_VERSION VERSION_GREATER_EQUAL 12.0)
97+
set(CUDA_STATIC_MATH_LIBRARIES OFF)
98+
else()
99+
if(USE_CUDA_MATH_WHEELS)
100+
message(FATAL_ERROR "Cannot use CUDA math wheels with CUDA < 12.0")
101+
endif()
102+
set(CUDA_STATIC_MATH_LIBRARIES ON)
103+
endif()
93104
# Don't install the static libs into wheels
94105
set(CUML_EXCLUDE_RAFT_FROM_ALL ON)
95106
set(RAFT_EXCLUDE_FAISS_FROM_ALL ON)
@@ -98,6 +109,17 @@ if(NOT ${CUML_CPU})
98109

99110
add_subdirectory(${CUML_CPP_SRC} cuml-cpp EXCLUDE_FROM_ALL)
100111

112+
if(NOT CUDA_STATIC_MATH_LIBRARIES AND USE_CUDA_MATH_WHEELS)
113+
set_property(TARGET ${CUML_CPP_TARGET} PROPERTY INSTALL_RPATH
114+
"$ORIGIN/../nvidia/cublas/lib"
115+
"$ORIGIN/../nvidia/cufft/lib"
116+
"$ORIGIN/../nvidia/curand/lib"
117+
"$ORIGIN/../nvidia/cusolver/lib"
118+
"$ORIGIN/../nvidia/cusparse/lib"
119+
"$ORIGIN/../nvidia/nvjitlink/lib"
120+
)
121+
endif()
122+
101123
set(cython_lib_dir cuml)
102124
install(TARGETS ${CUML_CPP_TARGET} DESTINATION ${cython_lib_dir})
103125
endif()

python/cuml/pyproject.toml

+5
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,11 @@ dependencies = [
8686
"dask-cudf==24.10.*,>=0.0.0a0",
8787
"joblib>=0.11",
8888
"numba>=0.57",
89+
"nvidia-cublas",
90+
"nvidia-cufft",
91+
"nvidia-curand",
92+
"nvidia-cusolver",
93+
"nvidia-cusparse",
8994
"packaging",
9095
"pylibraft==24.10.*,>=0.0.0a0",
9196
"raft-dask==24.10.*,>=0.0.0a0",

0 commit comments

Comments
 (0)