-
Notifications
You must be signed in to change notification settings - Fork 69
feat: add stable install tests #837
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 3 commits
a4c7a73
68e59ef
9bc9fbf
5c3d9bc
188e5c8
eac7264
e6e8f51
f000c6d
ca836f0
858fa3e
b6bf46d
1597c63
80050f1
cd8e485
0e78bc0
a72cc90
0d44f2d
5b128ac
0d88656
4476022
d2dfd6b
d518002
78daa33
7ed84f4
5ab9e43
1be7ebf
f1bb840
17a1749
076fcf3
7f96dcf
dd30e2b
c1a663d
50721f0
b359965
3cd80a8
8a6ac7d
b4ffdcf
34bb97a
c542852
1fec84b
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -28,3 +28,63 @@ jobs: | |
| script: "ci/test_conda_nightly_env.sh" | ||
| # just using the workflow to get the matrix, this isn't actually building anything we want to upload | ||
| upload-artifacts: false | ||
| test-stable-install-pip-cuda-12-amd64: | ||
| secrets: inherit | ||
| uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main | ||
| with: | ||
| build_type: pull-request | ||
| node_type: "cpu4" | ||
| arch: "amd64" | ||
| container_image: "nvidia/cuda:12.9.1-base-ubuntu-24.04" | ||
| script: | | ||
| ./ci/stable_install/install_and_test_pip.sh --cuda cu12 | ||
| test-stable-install-pip-cuda-13-amd64: | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We could cut the number of jobs here in half by having Will you consider that?
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. That language was a little imprecise... cut the number of configurations in half. The number of jobs would be unchanged. |
||
| secrets: inherit | ||
| uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main | ||
| with: | ||
| build_type: pull-request | ||
| node_type: "cpu4" | ||
| arch: "amd64" | ||
| container_image: "nvidia/cuda:13.2.0-base-ubuntu-24.04" | ||
| script: | | ||
| ./ci/stable_install/install_and_test_pip.sh --cuda cu13 | ||
| test-stable-install-pip-cuda-12-arm64: | ||
| secrets: inherit | ||
| uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main | ||
| with: | ||
| build_type: pull-request | ||
| node_type: "cpu4" | ||
| arch: "arm64" | ||
| container_image: "nvidia/cuda:12.9.1-base-ubuntu-24.04" | ||
| script: | | ||
| ./ci/stable_install/install_and_test_pip.sh --cuda cu12 | ||
| test-stable-install-pip-cuda-13-arm64: | ||
| secrets: inherit | ||
| uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main | ||
| with: | ||
| build_type: pull-request | ||
| node_type: "cpu4" | ||
| arch: "arm64" | ||
| container_image: "nvidia/cuda:13.2.0-base-ubuntu-24.04" | ||
| script: | | ||
| ./ci/stable_install/install_and_test_pip.sh --cuda cu13 | ||
| test-stable-install-conda-amd64: | ||
| secrets: inherit | ||
| uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main | ||
| with: | ||
| build_type: pull-request | ||
| node_type: "cpu4" | ||
| arch: "amd64" | ||
| container_image: "rapidsai/ci-conda:26.04-latest" | ||
| script: | | ||
| ./ci/stable_install/install_and_test_conda.sh | ||
| test-stable-install-conda-arm64: | ||
| secrets: inherit | ||
| uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main | ||
| with: | ||
| build_type: pull-request | ||
| node_type: "cpu4" | ||
| arch: "arm64" | ||
| container_image: "rapidsai/ci-conda:26.04-latest" | ||
| script: | | ||
| ./ci/stable_install/install_and_test_conda.sh | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,16 @@ | ||
| #!/bin/bash | ||
| # Copyright (c) 2026, NVIDIA CORPORATION. | ||
|
|
||
| set -euo pipefail | ||
|
|
||
| apt update && apt install -y curl | ||
|
|
||
| echo "installing 'gha-tools'" | ||
| curl -fsSL https://github.com/rapidsai/gha-tools/releases/latest/download/tools.tar.gz | tar -xz -C /usr/local/bin/ | ||
| echo "done installing 'gha-tools' to '/usr/local/bin'" | ||
|
|
||
| echo "installing 'uv'" | ||
| curl -LsSf https://astral.sh/uv/install.sh | sh | ||
| echo "done installing 'uv'" | ||
|
|
||
| source "$HOME"/.local/bin/env |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,68 @@ | ||
| #!/bin/bash | ||
| # Copyright (c) 2026, NVIDIA CORPORATION. | ||
|
|
||
| # By default, this script attempts to install the latest stable RAPIDS version | ||
| # in a clean conda environment for all supported versions of Python and CUDA | ||
| # | ||
| # The Python version, CUDA version, and RAPIDS version can be overridden by | ||
| # supplying the value to test to the appropriate flag (--python, --rapids, and | ||
| # --cuda, respectively). | ||
|
|
||
| set -euo pipefail | ||
|
|
||
| STABLE_RAPIDS_VERSION="26.4.*" | ||
|
gforsyth marked this conversation as resolved.
|
||
| SUPPORTED_PYTHON_VERSIONS=(3.11 3.12 3.13 3.14) | ||
| SUPPORTED_CUDA_VERSIONS=("12.9" "13.1") | ||
|
gforsyth marked this conversation as resolved.
Outdated
|
||
|
|
||
| while [[ $# -gt 0 ]]; do | ||
| case $1 in | ||
| --python) | ||
| shift | ||
| SUPPORTED_PYTHON_VERSIONS=("$1") | ||
| shift | ||
| ;; | ||
| --rapids) | ||
| shift | ||
| STABLE_RAPIDS_VERSION="$1" | ||
| shift | ||
| ;; | ||
| --cuda) | ||
| shift | ||
| SUPPORTED_CUDA_VERSIONS=("$1") | ||
| shift | ||
| ;; | ||
| -*) | ||
| rapids-echo-stderr "Unknown flag: $1. Supported flags: --python, --rapids, --cuda" | ||
| exit 1 | ||
| ;; | ||
| esac | ||
| done | ||
|
|
||
| function testImports { | ||
| while [[ $# -gt 0 ]]; do | ||
| rapids-logger "Import test for $1" | ||
| python -c "import $1" | ||
| shift | ||
| done | ||
| } | ||
|
|
||
| . /opt/conda/etc/profile.d/conda.sh | ||
|
|
||
| for CUDA_VERSION in "${SUPPORTED_CUDA_VERSIONS[@]}"; do | ||
| for PY_VER in "${SUPPORTED_PYTHON_VERSIONS[@]}"; do | ||
| envName="rapids_${PY_VER}_${CUDA_VERSION}" | ||
|
|
||
| rapids-logger "Testing stable version install with Python $PY_VER and CUDA version $CUDA_VERSION" | ||
|
|
||
| # use `-O` to override channels so we don't include `rapidsai-nightly` | ||
| conda create -n "$envName" -O -c rapidsai -c conda-forge \ | ||
| rapids="$STABLE_RAPIDS_VERSION" python="$PY_VER" "cuda-version>=${CUDA_VERSION}" -y | ||
|
gforsyth marked this conversation as resolved.
Outdated
|
||
|
|
||
| conda activate "$envName" | ||
|
|
||
| testImports cudf dask_cudf cuml pylibraft raft_dask cugraph nx_cugraph cuxfilter cucim cuvs | ||
|
gforsyth marked this conversation as resolved.
Outdated
|
||
|
|
||
| conda deactivate | ||
| conda env remove -n "$envName" | ||
| done | ||
| done | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,97 @@ | ||
| #!/bin/bash | ||
| # Copyright (c) 2026, NVIDIA CORPORATION. | ||
|
|
||
| # By default, this script attempts to install the latest stable RAPIDS version | ||
| # in a clean Python venv for all supported versions of Python and CUDA | ||
| # | ||
| # The Python version, CUDA version, and RAPIDS version can be overridden by | ||
| # supplying the value to test to the appropriate flag (--python, --rapids, and | ||
| # --cuda, respectively). | ||
| # | ||
| # Note that the CUDA version should be specified as a -cu* suffix, e.g. `--cuda cu13` | ||
|
|
||
| set -euo pipefail | ||
|
|
||
| STABLE_RAPIDS_VERSION="26.4.*" | ||
| SUPPORTED_PYTHON_VERSIONS=(3.11 3.12 3.13 3.14) | ||
| SUPPORTED_CUDA_VERSIONS=("cu12" "cu13") | ||
|
gforsyth marked this conversation as resolved.
Outdated
|
||
|
|
||
| source ./bootstrap/pip.sh | ||
|
|
||
| while [[ $# -gt 0 ]]; do | ||
| case $1 in | ||
| --python) | ||
| shift | ||
| SUPPORTED_PYTHON_VERSIONS=("$1") | ||
| shift | ||
| ;; | ||
| --rapids) | ||
| shift | ||
| STABLE_RAPIDS_VERSION="$1" | ||
| shift | ||
| ;; | ||
| --cuda) | ||
| shift | ||
| SUPPORTED_CUDA_VERSIONS=("$1") | ||
| shift | ||
| ;; | ||
| -*) | ||
| rapids-echo-stderr "Unknown flag: $1. Supported flags: --python, --rapids, --cuda" | ||
| exit 1 | ||
| ;; | ||
| esac | ||
| done | ||
|
|
||
| function testImports { | ||
| while [[ $# -gt 0 ]]; do | ||
| rapids-logger "Import test for $1" | ||
| python -c "import $1" | ||
| shift | ||
| done | ||
| } | ||
|
|
||
| function createPyEnv { | ||
| PY_VER=$1 | ||
| INSTALL_DIR=$(mktemp -d) | ||
| pushd "$INSTALL_DIR" | ||
|
|
||
| rapids-logger "Creating virtualenv for Python $PY_VER" | ||
| uv venv --python="$PY_VER" --seed | ||
|
gforsyth marked this conversation as resolved.
|
||
| source "${INSTALL_DIR}/.venv/bin/activate" | ||
| } | ||
|
|
||
|
|
||
| for CUDA_SUFFIX in "${SUPPORTED_CUDA_VERSIONS[@]}"; do | ||
|
|
||
| PIP_INSTALL_PYPI=( | ||
| "cudf-${CUDA_SUFFIX}==${STABLE_RAPIDS_VERSION}" | ||
| "dask-cudf-${CUDA_SUFFIX}==${STABLE_RAPIDS_VERSION}" | ||
| "cuml-${CUDA_SUFFIX}==${STABLE_RAPIDS_VERSION}" | ||
| "pylibraft-${CUDA_SUFFIX}==${STABLE_RAPIDS_VERSION}" | ||
| "raft-dask-${CUDA_SUFFIX}==${STABLE_RAPIDS_VERSION}" | ||
| ) | ||
|
|
||
| PIP_INSTALL_NVIDIA_PYPI=("${PIP_INSTALL_PYPI[@]}" | ||
| "cugraph-${CUDA_SUFFIX}==${STABLE_RAPIDS_VERSION}" | ||
| "nx-cugraph-${CUDA_SUFFIX}==${STABLE_RAPIDS_VERSION}" | ||
| "cuxfilter-${CUDA_SUFFIX}==${STABLE_RAPIDS_VERSION}" | ||
| "cucim-${CUDA_SUFFIX}==${STABLE_RAPIDS_VERSION}" | ||
| "cuvs-${CUDA_SUFFIX}==${STABLE_RAPIDS_VERSION}" | ||
| --extra-index-url=https://pypi.nvidia.com | ||
| ) | ||
|
|
||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Similar to my comments on conda, I think this would be a more powerful test if it combined all the imports into one. I'd structure it roughly like this: # get all the pypi.nvidia.com stuff
wheels_dir=$(mktemp -d)
pip download \
--isolated \
--index-url https://pypi.nvidia.com \
--prefer-binary \
--no-deps \
-d "${wheels_dir}" \
"cucim-${CUDA_SUFFIX}==${STABLE_RAPIDS_VERSION}" \
"cugraph-${CUDA_SUFFIX}==${STABLE_RAPIDS_VERSION}" \
"cuvs-${CUDA_SUFFIX}==${STABLE_RAPIDS_VERSION}" \
"cuxfilter-${CUDA_SUFFIX}==${STABLE_RAPIDS_VERSION}" \
"libcugraph-${CUDA_SUFFIX}==${STABLE_RAPIDS_VERSION}" \
"libcuvs-${CUDA_SUFFIX}==${STABLE_RAPIDS_VERSION}" \
"pylibcugraph-${CUDA_SUFFIX}==${STABLE_RAPIDS_VERSION}"
pip install \
--isolated \
--index-url https://pypi.org/simple \
--prefer-binary \
"${PIP_INSTALL_PYPI[@]}" \
"${wheels_dir}"/*.whl
python -c "import cudf; import dask_cudf; ...; import cuvs"Would you consider something like that? |
||
| for PY_VER in "${SUPPORTED_PYTHON_VERSIONS[@]}"; do | ||
|
|
||
| createPyEnv "$PY_VER" | ||
| rapids-logger "Testing stable version install with Python $PY_VER and CUDA suffix $CUDA_SUFFIX without NVIDIA PyPI index" | ||
| python -m pip install "${PIP_INSTALL_PYPI[@]}" | ||
| testImports cudf dask_cudf cuml pylibraft raft_dask | ||
| popd | ||
|
|
||
| createPyEnv "$PY_VER" | ||
| rapids-logger "Testing stable version install with Python $PY_VER and CUDA suffix $CUDA_SUFFIX and NVIDIA PyPI index" | ||
| python -m pip install "${PIP_INSTALL_NVIDIA_PYPI[@]}" | ||
| testImports cudf dask_cudf cuml pylibraft raft_dask cugraph nx_cugraph cuxfilter cucim cuvs | ||
| popd | ||
| done | ||
| done | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,13 @@ | ||
| #!/bin/bash | ||
| # Copyright (c) 2026, NVIDIA CORPORATION. | ||
| # | ||
| # This script expects N arguments, each the import name of an installed RAPIDS | ||
| # library in the currently active virtualenv or conda environment. | ||
|
|
||
| set -euo pipefail | ||
|
|
||
| while [[ $# -gt 0 ]]; do | ||
| rapids-logger "Import test for $1" | ||
| python -c "import $1" | ||
| shift | ||
| done |
Uh oh!
There was an error while loading. Please reload this page.