diff --git a/ci/test_self_hosted_service.sh b/ci/test_self_hosted_service.sh index 43d549d55..601b45326 100755 --- a/ci/test_self_hosted_service.sh +++ b/ci/test_self_hosted_service.sh @@ -14,8 +14,18 @@ CUOPT_SERVER_WHEELHOUSE=$(RAPIDS_PY_WHEEL_NAME="cuopt_server_${RAPIDS_PY_CUDA_SU CUOPT_WHEELHOUSE=$(RAPIDS_PY_WHEEL_NAME="cuopt_${RAPIDS_PY_CUDA_SUFFIX}" rapids-download-wheels-from-github python) LIBCUOPT_WHEELHOUSE=$(RAPIDS_PY_WHEEL_NAME="libcuopt_${RAPIDS_PY_CUDA_SUFFIX}" rapids-download-wheels-from-github cpp) -# echo to expand wildcard before adding `[extra]` requires for pip +# generate constraints (possibly pinning to oldest support versions of dependencies) +rapids-generate-pip-constraints test_python "${PIP_CONSTRAINT}" + +# notes: +# +# * echo to expand wildcard before adding `[test]` requires for pip +# * just providing --constraint="${PIP_CONSTRAINT}" to be explicit, and because +# that environment variable is ignored if any other --constraint are passed via the CLI +# rapids-pip-retry install \ + --prefer-binary \ + --constraint "${PIP_CONSTRAINT}" \ "${CUOPT_MPS_PARSER_WHEELHOUSE}"/cuopt_mps_parser*.whl \ "${CUOPT_WHEELHOUSE}"/cuopt*.whl \ "${LIBCUOPT_WHEELHOUSE}"/libcuopt*.whl \ diff --git a/ci/test_wheel_cuopt.sh b/ci/test_wheel_cuopt.sh index d761b2721..38a68367b 100755 --- a/ci/test_wheel_cuopt.sh +++ b/ci/test_wheel_cuopt.sh @@ -25,8 +25,18 @@ cuopt-sh-client @ file://$(echo ${CUOPT_SH_CLIENT_WHEELHOUSE}/cuopt_sh_client-*. libcuopt-${RAPIDS_PY_CUDA_SUFFIX} @ file://$(echo ${LIBCUOPT_WHEELHOUSE}/libcuopt_${RAPIDS_PY_CUDA_SUFFIX}-*.whl) EOF -# echo to expand wildcard before adding `[extra]` requires for pip +# generate constraints (possibly pinning to oldest support versions of dependencies) +rapids-generate-pip-constraints test_python "${PIP_CONSTRAINT}" + +# notes: +# +# * echo to expand wildcard before adding `[test]` requires for pip +# * just providing --constraint="${PIP_CONSTRAINT}" to be explicit, and because +# that environment variable is ignored if any other --constraint are passed via the CLI +# rapids-pip-retry install \ + --prefer-binary \ + --constraint "${PIP_CONSTRAINT}" \ --constraint "${PIP_CONSTRAINT}" \ "${CUOPT_MPS_PARSER_WHEELHOUSE}"/cuopt_mps_parser*.whl \ "$(echo "${CUOPT_WHEELHOUSE}"/cuopt*.whl)[test]" \ diff --git a/ci/test_wheel_cuopt_server.sh b/ci/test_wheel_cuopt_server.sh index 83de85c8a..a76969b96 100755 --- a/ci/test_wheel_cuopt_server.sh +++ b/ci/test_wheel_cuopt_server.sh @@ -15,8 +15,18 @@ CUOPT_WHEELHOUSE=$(RAPIDS_PY_WHEEL_NAME="cuopt_${RAPIDS_PY_CUDA_SUFFIX}" rapids- CUOPT_SH_CLIENT_WHEELHOUSE=$(RAPIDS_PY_WHEEL_NAME="cuopt_sh_client" RAPIDS_PY_WHEEL_PURE="1" rapids-download-wheels-from-github python) LIBCUOPT_WHEELHOUSE=$(RAPIDS_PY_WHEEL_NAME="libcuopt_${RAPIDS_PY_CUDA_SUFFIX}" rapids-download-wheels-from-github cpp) -# echo to expand wildcard before adding `[extra]` requires for pip +# generate constraints (possibly pinning to oldest support versions of dependencies) +rapids-generate-pip-constraints test_python "${PIP_CONSTRAINT}" + +# notes: +# +# * echo to expand wildcard before adding `[test]` requires for pip +# * just providing --constraint="${PIP_CONSTRAINT}" to be explicit, and because +# that environment variable is ignored if any other --constraint are passed via the CLI +# rapids-pip-retry install \ + --prefer-binary \ + --constraint "${PIP_CONSTRAINT}" \ "${CUOPT_MPS_PARSER_WHEELHOUSE}"/cuopt_mps_parser*.whl \ "$(echo "${CUOPT_SERVER_WHEELHOUSE}"/cuopt_server*.whl)[test]" \ "${CUOPT_WHEELHOUSE}"/cuopt*.whl \ diff --git a/dependencies.yaml b/dependencies.yaml index 014889c7d..36497960f 100644 --- a/dependencies.yaml +++ b/dependencies.yaml @@ -633,22 +633,16 @@ dependencies: - matrix: packages: - *pylibraft_unsuffixed + # '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 matrices: - - matrix: - cuda: "12.0" - packages: - - cuda-version=12.0 - matrix: cuda: "12.2" packages: - cuda-version=12.2 - - matrix: - cuda: "12.4" - packages: - - cuda-version=12.4 - matrix: cuda: "12.5" packages: @@ -669,6 +663,51 @@ dependencies: cuda: "13.1" packages: - cuda-version=13.1 + - 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: + use_cuda_wheels: "false" + packages: + - matrix: + arch: aarch64 + cuda: "12.2" + use_cuda_wheels: "true" + packages: + # 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: "12.2" + use_cuda_wheels: "true" + packages: + - cuda-toolkit==12.2.* + - matrix: + 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: + - cuda-toolkit==13.0.* + - matrix: + cuda: "13.1" + use_cuda_wheels: "true" + packages: + - cuda-toolkit==13.1.* cuda: common: - output_types: [conda] @@ -682,37 +721,40 @@ dependencies: cuda_wheels: specific: + # cuOpt needs 'nvJitLink>={whatever-cuopt-was-built-against}' at runtime, and mixing + # old-CTK with new-nvJitLink is supported, so maintain 1 entry here per CUDA major.minor + # cuOpt is built against. + # + # nvJitLink has historically roughly followed the CTK's minor versioning scheme, + # but check at https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html - output_types: [requirements, pyproject] matrices: + # if use_cuda_wheels=false is provided, do not add dependencies on any CUDA wheels + # (e.g. for DLFW and pip devcontainers) + - matrix: + use_cuda_wheels: "false" + packages: - matrix: cuda: "12.*" use_cuda_wheels: "true" packages: - - cuda-toolkit[cublas,cudart,curand,cusolver,cusparse,nvjitlink,nvtx]==12.* + - cuda-toolkit[cublas,cudart,curand,cusolver,cusparse,nvtx]==12.* - nvidia-cudss-cu12 + - nvidia-nvjitlink-cu12>=12.9,<13 - matrix: cuda: "13.*" use_cuda_wheels: "true" packages: - - cuda-toolkit[cublas,cudart,curand,cusolver,cusparse,nvjitlink,nvtx]==13.* - - nvidia-cudss-cu13 - # if use_cuda_wheels=false is provided, do not add dependencies on any CUDA wheels - # (e.g. for DLFW and pip devcontainers) - - matrix: - use_cuda_wheels: "false" - packages: [] - # if no matching matrix selectors passed, list the unsuffixed packages + - &ctk_cu13 cuda-toolkit[cublas,cudart,curand,cusolver,cusparse,nvtx]==13.* + - &cudss_cu13 nvidia-cudss-cu13 + - &nvjitlink_cu13 nvidia-nvjitlink>=13.0,<14 + # if no matching matrix selectors passed, list the CUDA 13 requirement # (just as a source of documentation, as this populates pyproject.toml in source control) - matrix: packages: - - nvidia-cudart - - nvidia-cublas - - nvidia-cudss - - nvidia-curand - - nvidia-cusparse - - nvidia-nvjitlink - - nvidia-cusolver - - nvidia-nvtx + - *ctk_cu13 + - *cudss_cu13 + - *nvjitlink_cu13 develop: common: - output_types: [conda, requirements] diff --git a/python/libcuopt/pyproject.toml b/python/libcuopt/pyproject.toml index 2507971a0..de9680aef 100644 --- a/python/libcuopt/pyproject.toml +++ b/python/libcuopt/pyproject.toml @@ -30,16 +30,11 @@ classifiers = [ "Programming Language :: Python :: 3.14", ] dependencies = [ + "cuda-toolkit[cublas,cudart,curand,cusolver,cusparse,nvtx]==13.*", "cuopt-mps-parser==26.4.*,>=0.0.0a0", "librmm==26.4.*,>=0.0.0a0", - "nvidia-cublas", - "nvidia-cudart", - "nvidia-cudss", - "nvidia-curand", - "nvidia-cusolver", - "nvidia-cusparse", - "nvidia-nvjitlink", - "nvidia-nvtx", + "nvidia-cudss-cu13", + "nvidia-nvjitlink>=13.0,<14", "rapids-logger==0.2.*,>=0.0.0a0", ] # This list was generated by `rapids-dependency-file-generator`. To make changes, edit ../../dependencies.yaml and run `rapids-dependency-file-generator`.