From 429da867f17e2f2e820cce3927eba709ac9508a6 Mon Sep 17 00:00:00 2001 From: "yuxi.hong.research@gmail.com" Date: Thu, 4 Jun 2026 02:10:53 +0000 Subject: [PATCH 1/4] use cuda128 for build --- .github/workflows/buildcupy.yaml | 42 ++++++++++++-------------------- 1 file changed, 16 insertions(+), 26 deletions(-) diff --git a/.github/workflows/buildcupy.yaml b/.github/workflows/buildcupy.yaml index 56f917f8..73966f1e 100644 --- a/.github/workflows/buildcupy.yaml +++ b/.github/workflows/buildcupy.yaml @@ -22,35 +22,25 @@ jobs: python-version: 3.11 - name: Install dependencies and pylops run: | - srun --account=yuxilab -n 1 -N 1 --gres=gpu:L40S:1 bash -c ' - uv sync --locked --extra advanced \ - --extra stat --extra gpu-cu12 \ - --extra deep-cu128 --all-groups - ' + uv sync --locked --extra advanced \ + --extra stat --extra gpu-cu12 \ + --extra deep-cu128 --all-groups echo "done!" - - name: Install CUDA 12.8 toolkit + - name: Use local CUDA 12.8 toolkit run: | - srun --account=yuxilab -n 1 -N 1 --gres=gpu:L40S:1 bash -c ' - # Currently, the NVIDIA GPU drivers on the self-hosted runner - # and the CUDA installation in CUDA_HOME require different PTX versions - # (8.7 and 8.8, respectively). CUDA and NVCC are temporarely - # installed in the uv environment, and the CUDA paths are set in - # the test command, to work around this issue. - uv add nvidia-cuda-nvcc-cu12==12.8.* - # Numba resolves libNVVM via CUDA_HOME and needs a versioned - # libnvvm.so.N (the pip wheel only ships a bare libnvvm.so), so - # add the symlink once here against the wheel-provided toolkit. - ln -sf libnvvm.so .venv/lib/python3.11/site-packages/nvidia/cuda_nvcc/nvvm/lib64/libnvvm.so.4 - ' + if [ ! -d "$HOME/local/cuda" ]; then + echo "CUDA 12.8 toolkit not found at $HOME/local/cuda" + exit 1 + fi + echo "CUDA_HOME=$HOME/local/cuda" >> "$GITHUB_ENV" echo "done!" - name: Test with pytest run: | - srun --account=yuxilab -n 1 -N 1 --gres=gpu:L40S:1 bash -c ' - # Use the pip-installed CUDA 12.8 toolkit (matches the 12.8 driver), - # not any system CUDA on the runner, so numba emits PTX <= 8.7. - export CUDA_HOME="$PWD/.venv/lib/python3.11/site-packages/nvidia/cuda_nvcc" - export CUPY_PYLOPS=1 - export TEST_CUPY_PYLOPS=1 - uv run pytest --color=yes pytests/ - ' + # Use the local CUDA 12.8 toolchain from $HOME/local/cuda. + export CUDA_HOME="${CUDA_HOME:-$HOME/local/cuda}" + export CUPY_PYLOPS=1 + export TEST_CUPY_PYLOPS=1 + export PATH="$CUDA_HOME/bin:$PATH" + export LD_LIBRARY_PATH="$CUDA_HOME/lib64:$LD_LIBRARY_PATH" + uv run pytest --color=yes pytests/ echo "done!" From ed04f7fe991ea59ae5010125b31f7608ecc19077 Mon Sep 17 00:00:00 2001 From: Matteo Ravasi Date: Thu, 4 Jun 2026 09:01:58 +0100 Subject: [PATCH 2/4] Update build environment to include 'exouser' --- .github/workflows/buildcupy.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/buildcupy.yaml b/.github/workflows/buildcupy.yaml index 73966f1e..fc8c5e12 100644 --- a/.github/workflows/buildcupy.yaml +++ b/.github/workflows/buildcupy.yaml @@ -10,7 +10,9 @@ on: jobs: build: - runs-on: self-hosted + runs-on: + - self-hosted + - exouser steps: - name: Check out source repository uses: actions/checkout@v6 From 029e74e55073c1f0dd77f9dc96f9f0329cf3c358 Mon Sep 17 00:00:00 2001 From: yuxihong Date: Thu, 4 Jun 2026 17:37:10 +0000 Subject: [PATCH 3/4] add a new exouser runner --- .github/workflows/buildcupy-exouser.yaml | 77 ++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 .github/workflows/buildcupy-exouser.yaml diff --git a/.github/workflows/buildcupy-exouser.yaml b/.github/workflows/buildcupy-exouser.yaml new file mode 100644 index 00000000..5ac5185a --- /dev/null +++ b/.github/workflows/buildcupy-exouser.yaml @@ -0,0 +1,77 @@ +name: PyLops Testing (CuPy Exouser) + +on: + pull_request: + types: [opened, synchronize, reopened] + push: + branches: + - main + - dev + +jobs: + build: + runs-on: + - self-hosted + - exouser + steps: + - name: Check out source repository + uses: actions/checkout@v6 + with: + fetch-depth: 0 + - name: Install uv with Python 3.11 + uses: astral-sh/setup-uv@v6 + with: + python-version: 3.11 + - name: Install dependencies and pylops + run: | + uv sync --extra advanced \ + --extra stat --extra gpu-cu12 \ + --group dev + uv pip install \ + --default-index https://download.pytorch.org/whl/cu128 \ + torch==2.11.0+cu128 + uv pip install \ + nvidia-cuda-nvcc-cu12==12.2.128 \ + nvidia-cuda-nvrtc-cu12==12.8.93 \ + nvidia-cuda-runtime-cu12==12.8.90 + echo "done!" + + - name: Configure CUDA NVVM from uv wheels + run: | + CUDA_HOME="$PWD/.venv/lib/python3.11/site-packages/nvidia/cuda_nvcc" + CUDA_RUNTIME_ROOT="$PWD/.venv/lib/python3.11/site-packages/nvidia/cuda_runtime" + CUDA_NVRTC_ROOT="$PWD/.venv/lib/python3.11/site-packages/nvidia/cuda_nvrtc" + + if [ ! -f "$CUDA_HOME/nvvm/lib64/libnvvm.so" ]; then + echo "libnvvm.so not found in $CUDA_HOME/nvvm/lib64" + exit 1 + fi + if [ ! -f "$CUDA_RUNTIME_ROOT/lib/libcudart.so.12" ]; then + echo "libcudart.so.12 not found in $CUDA_RUNTIME_ROOT/lib" + exit 1 + fi + if [ ! -f "$CUDA_NVRTC_ROOT/lib/libnvrtc.so.12" ]; then + echo "libnvrtc.so.12 not found in $CUDA_NVRTC_ROOT/lib" + exit 1 + fi + + mkdir -p "$CUDA_HOME/lib64" + ln -sf "$CUDA_HOME/nvvm/lib64/libnvvm.so" "$CUDA_HOME/nvvm/lib64/libnvvm.so.4" + ln -sf "$CUDA_HOME/nvvm/lib64/libnvvm.so" "$CUDA_HOME/lib64/libnvvm.so" + ln -sf "$CUDA_RUNTIME_ROOT/lib/libcudart.so.12" "$CUDA_HOME/lib64/libcudart.so.12" + ln -sf "$CUDA_RUNTIME_ROOT/lib/libcudart.so.12" "$CUDA_HOME/lib64/libcudart.so" + ln -sf "$CUDA_NVRTC_ROOT/lib/libnvrtc.so.12" "$CUDA_HOME/lib64/libnvrtc.so.12" + ln -sf "$CUDA_HOME/lib64/libnvrtc.so.12" "$CUDA_HOME/lib64/libnvrtc.so" + + echo "CUDA_HOME=$CUDA_HOME" >> "$GITHUB_ENV" + echo "CUDA_NVVM_LIB=$CUDA_HOME/nvvm/lib64" >> "$GITHUB_ENV" + echo "done!" + - name: Test with pytest + run: | + export CUDA_HOME="${CUDA_HOME:-$PWD/.venv/lib/python3.11/site-packages/nvidia/cuda_nvcc}" + export CUPY_PYLOPS=1 + export TEST_CUPY_PYLOPS=1 + export LD_LIBRARY_PATH="$CUDA_HOME/lib64:$CUDA_NVVM_LIB:$LD_LIBRARY_PATH" + export NUMBA_CUDA_NVVM="$CUDA_NVVM_LIB/libnvvm.so" + uv run --no-sync pytest --color=yes pytests/ + echo "done!" From e17548dd681ccd9370c7c4fb649602dc62acd5b4 Mon Sep 17 00:00:00 2001 From: mrava87 Date: Thu, 4 Jun 2026 20:31:28 +0100 Subject: [PATCH 4/4] ci: reorganized buildcupy actions --- .github/workflows/buildcupy-exouser.yaml | 77 ------------------------ .github/workflows/buildcupy.yaml | 53 ++++++++++++---- .github/workflows/buildcupy1.yaml | 58 ++++++++++++++++++ 3 files changed, 99 insertions(+), 89 deletions(-) delete mode 100644 .github/workflows/buildcupy-exouser.yaml create mode 100644 .github/workflows/buildcupy1.yaml diff --git a/.github/workflows/buildcupy-exouser.yaml b/.github/workflows/buildcupy-exouser.yaml deleted file mode 100644 index 5ac5185a..00000000 --- a/.github/workflows/buildcupy-exouser.yaml +++ /dev/null @@ -1,77 +0,0 @@ -name: PyLops Testing (CuPy Exouser) - -on: - pull_request: - types: [opened, synchronize, reopened] - push: - branches: - - main - - dev - -jobs: - build: - runs-on: - - self-hosted - - exouser - steps: - - name: Check out source repository - uses: actions/checkout@v6 - with: - fetch-depth: 0 - - name: Install uv with Python 3.11 - uses: astral-sh/setup-uv@v6 - with: - python-version: 3.11 - - name: Install dependencies and pylops - run: | - uv sync --extra advanced \ - --extra stat --extra gpu-cu12 \ - --group dev - uv pip install \ - --default-index https://download.pytorch.org/whl/cu128 \ - torch==2.11.0+cu128 - uv pip install \ - nvidia-cuda-nvcc-cu12==12.2.128 \ - nvidia-cuda-nvrtc-cu12==12.8.93 \ - nvidia-cuda-runtime-cu12==12.8.90 - echo "done!" - - - name: Configure CUDA NVVM from uv wheels - run: | - CUDA_HOME="$PWD/.venv/lib/python3.11/site-packages/nvidia/cuda_nvcc" - CUDA_RUNTIME_ROOT="$PWD/.venv/lib/python3.11/site-packages/nvidia/cuda_runtime" - CUDA_NVRTC_ROOT="$PWD/.venv/lib/python3.11/site-packages/nvidia/cuda_nvrtc" - - if [ ! -f "$CUDA_HOME/nvvm/lib64/libnvvm.so" ]; then - echo "libnvvm.so not found in $CUDA_HOME/nvvm/lib64" - exit 1 - fi - if [ ! -f "$CUDA_RUNTIME_ROOT/lib/libcudart.so.12" ]; then - echo "libcudart.so.12 not found in $CUDA_RUNTIME_ROOT/lib" - exit 1 - fi - if [ ! -f "$CUDA_NVRTC_ROOT/lib/libnvrtc.so.12" ]; then - echo "libnvrtc.so.12 not found in $CUDA_NVRTC_ROOT/lib" - exit 1 - fi - - mkdir -p "$CUDA_HOME/lib64" - ln -sf "$CUDA_HOME/nvvm/lib64/libnvvm.so" "$CUDA_HOME/nvvm/lib64/libnvvm.so.4" - ln -sf "$CUDA_HOME/nvvm/lib64/libnvvm.so" "$CUDA_HOME/lib64/libnvvm.so" - ln -sf "$CUDA_RUNTIME_ROOT/lib/libcudart.so.12" "$CUDA_HOME/lib64/libcudart.so.12" - ln -sf "$CUDA_RUNTIME_ROOT/lib/libcudart.so.12" "$CUDA_HOME/lib64/libcudart.so" - ln -sf "$CUDA_NVRTC_ROOT/lib/libnvrtc.so.12" "$CUDA_HOME/lib64/libnvrtc.so.12" - ln -sf "$CUDA_HOME/lib64/libnvrtc.so.12" "$CUDA_HOME/lib64/libnvrtc.so" - - echo "CUDA_HOME=$CUDA_HOME" >> "$GITHUB_ENV" - echo "CUDA_NVVM_LIB=$CUDA_HOME/nvvm/lib64" >> "$GITHUB_ENV" - echo "done!" - - name: Test with pytest - run: | - export CUDA_HOME="${CUDA_HOME:-$PWD/.venv/lib/python3.11/site-packages/nvidia/cuda_nvcc}" - export CUPY_PYLOPS=1 - export TEST_CUPY_PYLOPS=1 - export LD_LIBRARY_PATH="$CUDA_HOME/lib64:$CUDA_NVVM_LIB:$LD_LIBRARY_PATH" - export NUMBA_CUDA_NVVM="$CUDA_NVVM_LIB/libnvvm.so" - uv run --no-sync pytest --color=yes pytests/ - echo "done!" diff --git a/.github/workflows/buildcupy.yaml b/.github/workflows/buildcupy.yaml index fc8c5e12..5ebb952d 100644 --- a/.github/workflows/buildcupy.yaml +++ b/.github/workflows/buildcupy.yaml @@ -1,4 +1,4 @@ -name: PyLops Testing (CuPy) +name: PyLops Testing with CuPy on: pull_request: @@ -24,25 +24,54 @@ jobs: python-version: 3.11 - name: Install dependencies and pylops run: | - uv sync --locked --extra advanced \ + uv sync --extra advanced \ --extra stat --extra gpu-cu12 \ - --extra deep-cu128 --all-groups + --group dev + uv pip install \ + --default-index https://download.pytorch.org/whl/cu128 \ + torch==2.11.0+cu128 + uv pip install \ + nvidia-cuda-nvcc-cu12==12.2.128 \ + nvidia-cuda-nvrtc-cu12==12.8.93 \ + nvidia-cuda-runtime-cu12==12.8.90 echo "done!" - - name: Use local CUDA 12.8 toolkit + + - name: Configure CUDA NVVM from uv wheels run: | - if [ ! -d "$HOME/local/cuda" ]; then - echo "CUDA 12.8 toolkit not found at $HOME/local/cuda" + CUDA_HOME="$PWD/.venv/lib/python3.11/site-packages/nvidia/cuda_nvcc" + CUDA_RUNTIME_ROOT="$PWD/.venv/lib/python3.11/site-packages/nvidia/cuda_runtime" + CUDA_NVRTC_ROOT="$PWD/.venv/lib/python3.11/site-packages/nvidia/cuda_nvrtc" + + if [ ! -f "$CUDA_HOME/nvvm/lib64/libnvvm.so" ]; then + echo "libnvvm.so not found in $CUDA_HOME/nvvm/lib64" + exit 1 + fi + if [ ! -f "$CUDA_RUNTIME_ROOT/lib/libcudart.so.12" ]; then + echo "libcudart.so.12 not found in $CUDA_RUNTIME_ROOT/lib" exit 1 fi - echo "CUDA_HOME=$HOME/local/cuda" >> "$GITHUB_ENV" + if [ ! -f "$CUDA_NVRTC_ROOT/lib/libnvrtc.so.12" ]; then + echo "libnvrtc.so.12 not found in $CUDA_NVRTC_ROOT/lib" + exit 1 + fi + + mkdir -p "$CUDA_HOME/lib64" + ln -sf "$CUDA_HOME/nvvm/lib64/libnvvm.so" "$CUDA_HOME/nvvm/lib64/libnvvm.so.4" + ln -sf "$CUDA_HOME/nvvm/lib64/libnvvm.so" "$CUDA_HOME/lib64/libnvvm.so" + ln -sf "$CUDA_RUNTIME_ROOT/lib/libcudart.so.12" "$CUDA_HOME/lib64/libcudart.so.12" + ln -sf "$CUDA_RUNTIME_ROOT/lib/libcudart.so.12" "$CUDA_HOME/lib64/libcudart.so" + ln -sf "$CUDA_NVRTC_ROOT/lib/libnvrtc.so.12" "$CUDA_HOME/lib64/libnvrtc.so.12" + ln -sf "$CUDA_HOME/lib64/libnvrtc.so.12" "$CUDA_HOME/lib64/libnvrtc.so" + + echo "CUDA_HOME=$CUDA_HOME" >> "$GITHUB_ENV" + echo "CUDA_NVVM_LIB=$CUDA_HOME/nvvm/lib64" >> "$GITHUB_ENV" echo "done!" - name: Test with pytest run: | - # Use the local CUDA 12.8 toolchain from $HOME/local/cuda. - export CUDA_HOME="${CUDA_HOME:-$HOME/local/cuda}" + export CUDA_HOME="${CUDA_HOME:-$PWD/.venv/lib/python3.11/site-packages/nvidia/cuda_nvcc}" export CUPY_PYLOPS=1 export TEST_CUPY_PYLOPS=1 - export PATH="$CUDA_HOME/bin:$PATH" - export LD_LIBRARY_PATH="$CUDA_HOME/lib64:$LD_LIBRARY_PATH" - uv run pytest --color=yes pytests/ + export LD_LIBRARY_PATH="$CUDA_HOME/lib64:$CUDA_NVVM_LIB:$LD_LIBRARY_PATH" + export NUMBA_CUDA_NVVM="$CUDA_NVVM_LIB/libnvvm.so" + uv run --no-sync pytest --color=yes pytests/ echo "done!" diff --git a/.github/workflows/buildcupy1.yaml b/.github/workflows/buildcupy1.yaml new file mode 100644 index 00000000..71c4fbff --- /dev/null +++ b/.github/workflows/buildcupy1.yaml @@ -0,0 +1,58 @@ +name: PyLops Testing (CuPy) + +on: + pull_request: + types: [opened, synchronize, reopened] + push: + branches: + - main + - dev + +jobs: + build: + runs-on: + - self-hosted + - uni + steps: + - name: Check out source repository + uses: actions/checkout@v6 + with: + fetch-depth: 0 + - name: Install uv with Python 3.11 + uses: astral-sh/setup-uv@v6 + with: + python-version: 3.11 + - name: Install dependencies and pylops + run: | + srun --account=yuxilab -n 1 -N 1 --gres=gpu:L40S:1 bash -c ' + uv sync --locked --extra advanced \ + --extra stat --extra gpu-cu12 \ + --extra deep-cu128 --all-groups + ' + echo "done!" + - name: Install CUDA 12.8 toolkit + run: | + srun --account=yuxilab -n 1 -N 1 --gres=gpu:L40S:1 bash -c ' + # Currently, the NVIDIA GPU drivers on the self-hosted runner + # and the CUDA installation in CUDA_HOME require different PTX versions + # (8.7 and 8.8, respectively). CUDA and NVCC are temporarely + # installed in the uv environment, and the CUDA paths are set in + # the test command, to work around this issue. + uv add nvidia-cuda-nvcc-cu12==12.8.* + # Numba resolves libNVVM via CUDA_HOME and needs a versioned + # libnvvm.so.N (the pip wheel only ships a bare libnvvm.so), so + # add the symlink once here against the wheel-provided toolkit. + ln -sf libnvvm.so .venv/lib/python3.11/site-packages/nvidia/cuda_nvcc/nvvm/lib64/libnvvm.so.4 + ' + echo "done!" + - name: Test with pytest + run: | + srun --account=yuxilab -n 1 -N 1 --gres=gpu:L40S:1 bash -c ' + # Use the pip-installed CUDA 12.8 toolkit (matches the 12.8 driver), + # not any system CUDA on the runner, so numba emits PTX <= 8.7. + export CUDA_HOME="$PWD/.venv/lib/python3.11/site-packages/nvidia/cuda_nvcc" + export CUPY_PYLOPS=1 + export TEST_CUPY_PYLOPS=1 + uv run pytest --color=yes pytests/ + ' + echo "done!"