diff --git a/.devcontainer/cuda12.9-pip/devcontainer.json b/.devcontainer/cuda12.9-pip/devcontainer.json index 7d4103d..9ab1c9f 100644 --- a/.devcontainer/cuda12.9-pip/devcontainer.json +++ b/.devcontainer/cuda12.9-pip/devcontainer.json @@ -19,10 +19,10 @@ "features": { "ghcr.io/rapidsai/devcontainers/features/cuda:26.4": { "version": "12.9", - "installcuBLAS": true, - "installcuSOLVER": true, - "installcuRAND": true, - "installcuSPARSE": true + "installcuBLAS": false, + "installcuSOLVER": false, + "installcuRAND": false, + "installcuSPARSE": false }, "ghcr.io/rapidsai/devcontainers/features/rapids-build-utils:26.4": {} }, diff --git a/.devcontainer/cuda13.1-pip/devcontainer.json b/.devcontainer/cuda13.1-pip/devcontainer.json index 174b5fe..ee0b06e 100644 --- a/.devcontainer/cuda13.1-pip/devcontainer.json +++ b/.devcontainer/cuda13.1-pip/devcontainer.json @@ -19,10 +19,10 @@ "features": { "ghcr.io/rapidsai/devcontainers/features/cuda:26.4": { "version": "13.1", - "installcuBLAS": true, - "installcuSOLVER": true, - "installcuRAND": true, - "installcuSPARSE": true + "installcuBLAS": false, + "installcuSOLVER": false, + "installcuRAND": false, + "installcuSPARSE": false }, "ghcr.io/rapidsai/devcontainers/features/rapids-build-utils:26.4": {} }, diff --git a/ci/test_wheel.sh b/ci/test_wheel.sh index 4676532..1bb1731 100755 --- a/ci/test_wheel.sh +++ b/ci/test_wheel.sh @@ -14,14 +14,14 @@ mkdir -p "${RAPIDS_TESTS_DIR}" # generate constraints, the constraints will limit the version of the # dependencies that can be installed later on when installing the wheel -rapids-generate-pip-constraints test_python ./constraints.txt +rapids-generate-pip-constraints test_python "${PIP_CONSTRAINT}" # Install just minimal dependencies first rapids-pip-retry install \ + --prefer-binary \ + --constraint "${PIP_CONSTRAINT}" \ "${LIBNVFOREST_WHEELHOUSE}"/libnvforest*.whl \ - "${NVFOREST_WHEELHOUSE}"/nvforest*.whl \ - --constraint ./constraints.txt \ - --constraint "${PIP_CONSTRAINT}" + "${NVFOREST_WHEELHOUSE}"/nvforest*.whl # Try to import nvforest with just a minimal install" rapids-logger "Importing nvforest with minimal dependencies" @@ -34,10 +34,10 @@ python -c "import nvforest" # ignored if any other --constraint are passed via the CLI # rapids-pip-retry install \ - "${LIBNVFOREST_WHEELHOUSE}"/libnvforest*.whl \ - "$(echo "${NVFOREST_WHEELHOUSE}"/nvforest*.whl)[test]" \ - --constraint ./constraints.txt \ - --constraint "${PIP_CONSTRAINT}" + --prefer-binary \ + --constraint "${PIP_CONSTRAINT}" \ + "${LIBNVFOREST_WHEELHOUSE}"/libnvforest*.whl \ + "$(echo "${NVFOREST_WHEELHOUSE}"/nvforest*.whl)[test]" EXITCODE=0 trap "EXITCODE=1" ERR diff --git a/conda/environments/all_cuda-129_arch-aarch64.yaml b/conda/environments/all_cuda-129_arch-aarch64.yaml index 1371865..0d5806e 100644 --- a/conda/environments/all_cuda-129_arch-aarch64.yaml +++ b/conda/environments/all_cuda-129_arch-aarch64.yaml @@ -20,11 +20,6 @@ dependencies: - doxygen - gcc_linux-aarch64=14.* - graphviz -- libcublas-dev -- libcufft-dev -- libcurand-dev -- libcusolver-dev -- libcusparse-dev - libraft==26.4.*,>=0.0.0a0 - librmm==26.4.*,>=0.0.0a0 - ninja diff --git a/conda/environments/all_cuda-129_arch-x86_64.yaml b/conda/environments/all_cuda-129_arch-x86_64.yaml index 4e03f07..075e692 100644 --- a/conda/environments/all_cuda-129_arch-x86_64.yaml +++ b/conda/environments/all_cuda-129_arch-x86_64.yaml @@ -20,11 +20,6 @@ dependencies: - doxygen - gcc_linux-64=14.* - graphviz -- libcublas-dev -- libcufft-dev -- libcurand-dev -- libcusolver-dev -- libcusparse-dev - libraft==26.4.*,>=0.0.0a0 - librmm==26.4.*,>=0.0.0a0 - ninja diff --git a/conda/environments/all_cuda-131_arch-aarch64.yaml b/conda/environments/all_cuda-131_arch-aarch64.yaml index 7e0039c..3df9838 100644 --- a/conda/environments/all_cuda-131_arch-aarch64.yaml +++ b/conda/environments/all_cuda-131_arch-aarch64.yaml @@ -20,11 +20,6 @@ dependencies: - doxygen - gcc_linux-aarch64=14.* - graphviz -- libcublas-dev -- libcufft-dev -- libcurand-dev -- libcusolver-dev -- libcusparse-dev - libraft==26.4.*,>=0.0.0a0 - librmm==26.4.*,>=0.0.0a0 - ninja diff --git a/conda/environments/all_cuda-131_arch-x86_64.yaml b/conda/environments/all_cuda-131_arch-x86_64.yaml index 53361da..07db4aa 100644 --- a/conda/environments/all_cuda-131_arch-x86_64.yaml +++ b/conda/environments/all_cuda-131_arch-x86_64.yaml @@ -20,11 +20,6 @@ dependencies: - doxygen - gcc_linux-64=14.* - graphviz -- libcublas-dev -- libcufft-dev -- libcurand-dev -- libcusolver-dev -- libcusparse-dev - libraft==26.4.*,>=0.0.0a0 - librmm==26.4.*,>=0.0.0a0 - ninja diff --git a/conda/environments/clang_tidy_cuda-129_arch-x86_64.yaml b/conda/environments/clang_tidy_cuda-129_arch-x86_64.yaml index e41899b..b9c1e04 100644 --- a/conda/environments/clang_tidy_cuda-129_arch-x86_64.yaml +++ b/conda/environments/clang_tidy_cuda-129_arch-x86_64.yaml @@ -15,11 +15,6 @@ dependencies: - cuda-version=12.9 - cxx-compiler - gcc_linux-64=14.* -- libcublas-dev -- libcufft-dev -- libcurand-dev -- libcusolver-dev -- libcusparse-dev - libraft-headers==26.4.*,>=0.0.0a0 - librmm==26.4.*,>=0.0.0a0 - llvm-openmp==15.0.7 diff --git a/conda/environments/clang_tidy_cuda-131_arch-x86_64.yaml b/conda/environments/clang_tidy_cuda-131_arch-x86_64.yaml index 26ea655..5019913 100644 --- a/conda/environments/clang_tidy_cuda-131_arch-x86_64.yaml +++ b/conda/environments/clang_tidy_cuda-131_arch-x86_64.yaml @@ -15,11 +15,6 @@ dependencies: - cuda-version=13.1 - cxx-compiler - gcc_linux-64=14.* -- libcublas-dev -- libcufft-dev -- libcurand-dev -- libcusolver-dev -- libcusparse-dev - libraft-headers==26.4.*,>=0.0.0a0 - librmm==26.4.*,>=0.0.0a0 - llvm-openmp==15.0.7 diff --git a/conda/environments/cpp_all_cuda-129_arch-x86_64.yaml b/conda/environments/cpp_all_cuda-129_arch-x86_64.yaml index c0ca22d..ff6b4aa 100644 --- a/conda/environments/cpp_all_cuda-129_arch-x86_64.yaml +++ b/conda/environments/cpp_all_cuda-129_arch-x86_64.yaml @@ -13,11 +13,6 @@ dependencies: - cuda-version=12.9 - cxx-compiler - gcc_linux-64=14.* -- libcublas-dev -- libcufft-dev -- libcurand-dev -- libcusolver-dev -- libcusparse-dev - libraft-headers==26.4.*,>=0.0.0a0 - librmm==26.4.*,>=0.0.0a0 - ninja diff --git a/conda/environments/cpp_all_cuda-131_arch-x86_64.yaml b/conda/environments/cpp_all_cuda-131_arch-x86_64.yaml index 632cbe3..8b336d1 100644 --- a/conda/environments/cpp_all_cuda-131_arch-x86_64.yaml +++ b/conda/environments/cpp_all_cuda-131_arch-x86_64.yaml @@ -13,11 +13,6 @@ dependencies: - cuda-version=13.1 - cxx-compiler - gcc_linux-64=14.* -- libcublas-dev -- libcufft-dev -- libcurand-dev -- libcusolver-dev -- libcusparse-dev - libraft-headers==26.4.*,>=0.0.0a0 - librmm==26.4.*,>=0.0.0a0 - ninja diff --git a/conda/recipes/libnvforest/recipe.yaml b/conda/recipes/libnvforest/recipe.yaml index 41f8788..5777e5a 100644 --- a/conda/recipes/libnvforest/recipe.yaml +++ b/conda/recipes/libnvforest/recipe.yaml @@ -76,11 +76,6 @@ cache: - rapids-logger =0.2 - treelite ${{ treelite_version }} - cuda-cudart-dev - - libcublas-dev - - libcufft-dev - - libcurand-dev - - libcusolver-dev - - libcusparse-dev outputs: - package: @@ -107,19 +102,9 @@ outputs: - librmm =${{ minor_version }} - treelite ${{ treelite_version }} - cuda-cudart-dev - - libcublas - - libcufft - - libcurand - - libcusolver - - libcusparse run: - ${{ pin_compatible("cuda-version", upper_bound="x", lower_bound="x") }} - cuda-cudart - - libcublas - - libcufft - - libcurand - - libcusolver - - libcusparse - librmm =${{ minor_version }} - rapids-logger =0.2 - treelite ${{ treelite_version }} @@ -127,11 +112,7 @@ outputs: by_name: - cuda-cudart - cuda-version - - libcurand - librmm - - libcusparse - - libcufft - - libcublas - libcusolver about: homepage: ${{ load_from_file("python/libnvforest/pyproject.toml").project.urls.Homepage }} @@ -163,11 +144,6 @@ outputs: by_name: - cuda-cudart - cuda-version - - libcublas - - libcufft - - libcurand - - libcusolver - - libcusparse - librmm about: homepage: ${{ load_from_file("python/libnvforest/pyproject.toml").project.urls.Homepage }} diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index 03d08d7..72913df 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -141,13 +141,6 @@ endif() # ###################################################################################################################### # * compiler options --------------------------------------------------------- -set(_ctk_static_suffix "") -set(_ctk_fft_static_suffix "") -if(CUDA_STATIC_MATH_LIBRARIES) - set(_ctk_static_suffix "_static") - set(_ctk_fft_static_suffix "_static_nocallback") -endif() - if(NOT DISABLE_OPENMP) find_package(OpenMP) if(OpenMP_FOUND) @@ -273,10 +266,7 @@ set_target_properties( POSITION_INDEPENDENT_CODE ON INTERFACE_POSITION_INDEPENDENT_CODE ON) -target_compile_definitions( - ${NVFOREST_CPP_TARGET} - PUBLIC DISABLE_CUSPARSE_DEPRECATED - PRIVATE NVFOREST_CPP_API) +target_compile_definitions(${NVFOREST_CPP_TARGET} PRIVATE NVFOREST_CPP_API) target_compile_options(${NVFOREST_CPP_TARGET} PRIVATE "$<$:${NVFOREST_CXX_FLAGS}>" "$<$:${NVFOREST_CUDA_FLAGS}>") diff --git a/dependencies.yaml b/dependencies.yaml index 47986ff..8a903cd 100644 --- a/dependencies.yaml +++ b/dependencies.yaml @@ -123,7 +123,6 @@ files: extras: table: project includes: - - cuda_wheels - depends_on_cuda_python - depends_on_cupy - depends_on_libnvforest @@ -162,7 +161,6 @@ files: extras: table: project includes: - - cuda_wheels - depends_on_libraft - depends_on_librmm - depends_on_rapids_logger @@ -243,6 +241,8 @@ dependencies: - packaging - &scikit_learn scikit-learn>=1.5 - *treelite + # 'cuda_version' intentionally does not contain fallback entries... we want + # a loud error if an unsupported 'cuda' value is passed cuda_version: specific: - output_types: conda @@ -271,41 +271,57 @@ dependencies: cuda: "13.1" packages: - cuda-version=13.1 - cuda: - common: - - output_types: [conda] - packages: - - cuda-cudart-dev - - cuda-profiler-api - - libcublas-dev - - libcufft-dev - - libcurand-dev - - libcusolver-dev - - libcusparse-dev - cuda_wheels: - specific: - - output_types: [requirements, pyproject] + - output_types: requirements matrices: + # if use_cuda_wheels=false is provided, do not add dependencies on any CUDA wheels + # (e.g. for DLFW and pip devcontainers) - matrix: - cuda: "12.*" + use_cuda_wheels: "false" + packages: + - matrix: + arch: aarch64 + cuda: "12.2" use_cuda_wheels: "true" packages: - - cuda-toolkit==12.* + # some components (like nvidia-cublas-cu12 and nvidia-cuda-nvcc-cu12) didn't have + # aarch64 wheels until CTK 12.3, so allow a slightly looser bound here + - cuda-toolkit>=12.2,<12.4 - matrix: - cuda: "13.*" + cuda: "12.2" use_cuda_wheels: "true" packages: - - cuda-toolkit==13.* - # if use_cuda_wheels=false is provided, do not add dependencies on any CUDA wheels - # (e.g. for DLFW and pip devcontainers) + - cuda-toolkit==12.2.* - matrix: - use_cuda_wheels: "false" + cuda: "12.5" + use_cuda_wheels: "true" + packages: + - cuda-toolkit==12.5.* + - matrix: + cuda: "12.8" + use_cuda_wheels: "true" + packages: + - cuda-toolkit==12.8.* + - matrix: + cuda: "12.9" + use_cuda_wheels: "true" + packages: + - cuda-toolkit==12.9.* + - matrix: + cuda: "13.0" + use_cuda_wheels: "true" packages: - # if no matching matrix selectors passed, list the unsuffixed packages - # (just as a source of documentation, as this populates pyproject.toml in source control) + - cuda-toolkit==13.0.* - matrix: + cuda: "13.1" + use_cuda_wheels: "true" packages: - - cuda-toolkit>=12,<14 + - cuda-toolkit==13.1.* + cuda: + common: + - output_types: [conda] + packages: + - cuda-cudart-dev + - cuda-profiler-api docs: common: - output_types: [conda, requirements] diff --git a/python/libnvforest/CMakeLists.txt b/python/libnvforest/CMakeLists.txt index 5a9e904..c076293 100644 --- a/python/libnvforest/CMakeLists.txt +++ b/python/libnvforest/CMakeLists.txt @@ -44,21 +44,9 @@ set(NVFOREST_EXCLUDE_TREELITE_FROM_ALL ON) # --- CUDA --- # set(CUDA_STATIC_RUNTIME ON) -set(CUDA_STATIC_MATH_LIBRARIES OFF) add_subdirectory(../../cpp nvforest-cpp) -# assumes libnvforest++ is installed 2 levels deep, e.g. site-packages/nvforest/lib64/libnvforest++.so -if(CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL 13.0) - # starting with CTK 13 wheels, all libraries except NCCL are grouped in this 'nvidia/cu13/lib' directory - set(rpaths "$ORIGIN/../../nvidia/cu13/lib") -else() - set(rpaths - "$ORIGIN/../../nvidia/cublas/lib" "$ORIGIN/../../nvidia/cufft/lib" "$ORIGIN/../../nvidia/curand/lib" - "$ORIGIN/../../nvidia/cusolver/lib" "$ORIGIN/../../nvidia/cusparse/lib" "$ORIGIN/../../nvidia/nvjitlink/lib") -endif() -list(APPEND rpaths "$ORIGIN/../../nvidia/nccl/lib") - set_property( TARGET ${NVFOREST_CPP_TARGET} PROPERTY INSTALL_RPATH ${rpaths} diff --git a/python/libnvforest/pyproject.toml b/python/libnvforest/pyproject.toml index 3cf5b3b..c37a604 100644 --- a/python/libnvforest/pyproject.toml +++ b/python/libnvforest/pyproject.toml @@ -25,7 +25,6 @@ classifiers = [ "Environment :: GPU :: NVIDIA CUDA", ] dependencies = [ - "cuda-toolkit>=12,<14", "libraft==26.4.*,>=0.0.0a0", "librmm==26.4.*,>=0.0.0a0", "rapids-logger==0.2.*,>=0.0.0a0", diff --git a/python/nvforest/pyproject.toml b/python/nvforest/pyproject.toml index 9c24b4c..cdeacce 100644 --- a/python/nvforest/pyproject.toml +++ b/python/nvforest/pyproject.toml @@ -28,7 +28,6 @@ license = "Apache-2.0" requires-python = ">=3.11" dependencies = [ "cuda-python>=13.0.1,<14.0a0", - "cuda-toolkit>=12,<14", "cupy-cuda13x>=13.6.0", "libnvforest==26.4.*,>=0.0.0a0", "numpy>=1.23,<3.0a0",