Skip to content

Commit 245093f

Browse files
committed
2 parents 8f7249f + 848ecd2 commit 245093f

30 files changed

Lines changed: 408 additions & 121 deletions

.github/workflows/build-wheel.yml

Lines changed: 68 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ jobs:
3333
- "3.11"
3434
- "3.12"
3535
- "3.13"
36-
- "3.13t"
3736
- "3.14"
3837
- "3.14t"
3938
name: py${{ matrix.python-version }}
@@ -46,6 +45,19 @@ jobs:
4645
with:
4746
fetch-depth: 0
4847

48+
# The env vars ACTIONS_CACHE_SERVICE_V2, ACTIONS_RESULTS_URL, and ACTIONS_RUNTIME_TOKEN
49+
# are exposed by this action.
50+
- name: Enable sccache
51+
uses: mozilla-actions/sccache-action@7d986dd989559c6ecdb630a3fd2557667be217ad # 0.0.9
52+
53+
# xref: https://github.com/orgs/community/discussions/42856#discussioncomment-7678867
54+
- name: Adding addtional GHA cache-related env vars
55+
uses: actions/github-script@v7
56+
with:
57+
script: |
58+
core.exportVariable('ACTIONS_CACHE_URL', process.env['ACTIONS_CACHE_URL'])
59+
core.exportVariable('ACTIONS_RUNTIME_URL', process.env['ACTIONS_RUNTIME_URL'])
60+
4961
- name: Setup proxy cache
5062
uses: nv-gha-runners/setup-proxy-cache@main
5163
continue-on-error: true
@@ -130,9 +142,27 @@ jobs:
130142
CIBW_ENVIRONMENT_LINUX: >
131143
CUDA_PATH=/host/${{ env.CUDA_PATH }}
132144
CUDA_PYTHON_PARALLEL_LEVEL=${{ env.CUDA_PYTHON_PARALLEL_LEVEL }}
145+
CC="/host/${{ env.SCCACHE_PATH }} cc"
146+
CXX="/host/${{ env.SCCACHE_PATH }} c++"
147+
SCCACHE_GHA_ENABLED=true
148+
ACTIONS_RUNTIME_TOKEN=${{ env.ACTIONS_RUNTIME_TOKEN }}
149+
ACTIONS_RUNTIME_URL=${{ env.ACTIONS_RUNTIME_URL }}
150+
ACTIONS_RESULTS_URL=${{ env.ACTIONS_RESULTS_URL }}
151+
ACTIONS_CACHE_URL=${{ env.ACTIONS_CACHE_URL }}
152+
ACTIONS_CACHE_SERVICE_V2=${{ env.ACTIONS_CACHE_SERVICE_V2 }}
153+
SCCACHE_DIR=/host/${{ env.SCCACHE_DIR }}
154+
SCCACHE_CACHE_SIZE=${{ env.SCCACHE_CACHE_SIZE }}
133155
CIBW_ENVIRONMENT_WINDOWS: >
134156
CUDA_PATH="$(cygpath -w ${{ env.CUDA_PATH }})"
135157
CUDA_PYTHON_PARALLEL_LEVEL=${{ env.CUDA_PYTHON_PARALLEL_LEVEL }}
158+
# check cache stats before leaving cibuildwheel
159+
CIBW_BEFORE_TEST_LINUX: >
160+
"/host/${{ env.SCCACHE_PATH }}" --show-stats
161+
# force the test stage to be run (so that before-test is not skipped)
162+
# TODO: we might want to think twice on adding this, it does a lot of
163+
# things before reaching this command.
164+
CIBW_TEST_COMMAND: >
165+
echo "ok!"
136166
137167
- name: List the cuda.bindings artifacts directory
138168
run: |
@@ -168,11 +198,29 @@ jobs:
168198
CUDA_PYTHON_PARALLEL_LEVEL=${{ env.CUDA_PYTHON_PARALLEL_LEVEL }}
169199
CUDA_CORE_BUILD_MAJOR=${{ env.BUILD_CUDA_MAJOR }}
170200
PIP_FIND_LINKS=/host/${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }}
201+
CC="/host/${{ env.SCCACHE_PATH }} cc"
202+
CXX="/host/${{ env.SCCACHE_PATH }} c++"
203+
SCCACHE_GHA_ENABLED=true
204+
ACTIONS_RUNTIME_TOKEN=${{ env.ACTIONS_RUNTIME_TOKEN }}
205+
ACTIONS_RUNTIME_URL=${{ env.ACTIONS_RUNTIME_URL }}
206+
ACTIONS_RESULTS_URL=${{ env.ACTIONS_RESULTS_URL }}
207+
ACTIONS_CACHE_URL=${{ env.ACTIONS_CACHE_URL }}
208+
ACTIONS_CACHE_SERVICE_V2=${{ env.ACTIONS_CACHE_SERVICE_V2 }}
209+
SCCACHE_DIR=/host/${{ env.SCCACHE_DIR }}
210+
SCCACHE_CACHE_SIZE=${{ env.SCCACHE_CACHE_SIZE }}
171211
CIBW_ENVIRONMENT_WINDOWS: >
172212
CUDA_PATH="$(cygpath -w ${{ env.CUDA_PATH }})"
173213
CUDA_PYTHON_PARALLEL_LEVEL=${{ env.CUDA_PYTHON_PARALLEL_LEVEL }}
174214
CUDA_CORE_BUILD_MAJOR=${{ env.BUILD_CUDA_MAJOR }}
175215
PIP_FIND_LINKS="$(cygpath -w ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }})"
216+
# check cache stats before leaving cibuildwheel
217+
CIBW_BEFORE_TEST_LINUX: >
218+
"/host${{ env.SCCACHE_PATH }}" --show-stats
219+
# force the test stage to be run (so that before-test is not skipped)
220+
# TODO: we might want to think twice on adding this, it does a lot of
221+
# things before reaching this command.
222+
CIBW_TEST_COMMAND: >
223+
echo "ok!"
176224
177225
- name: List the cuda.core artifacts directory and rename
178226
run: |
@@ -287,9 +335,7 @@ jobs:
287335
cuda-path: "./cuda_toolkit_prev"
288336

289337
- name: Download cuda.bindings build artifacts from the prior branch
290-
if: ${{ matrix.python-version == '3.13t'
291-
|| matrix.python-version == '3.14'
292-
|| matrix.python-version == '3.14t' }}
338+
if: startsWith(matrix.python-version, '3.14')
293339
env:
294340
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
295341
run: |
@@ -333,11 +379,29 @@ jobs:
333379
CUDA_PYTHON_PARALLEL_LEVEL=${{ env.CUDA_PYTHON_PARALLEL_LEVEL }}
334380
CUDA_CORE_BUILD_MAJOR=${{ env.BUILD_PREV_CUDA_MAJOR }}
335381
PIP_FIND_LINKS=/host/${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }}
382+
CC="/host/${{ env.SCCACHE_PATH }} cc"
383+
CXX="/host/${{ env.SCCACHE_PATH }} c++"
384+
SCCACHE_GHA_ENABLED=true
385+
ACTIONS_RUNTIME_TOKEN=${{ env.ACTIONS_RUNTIME_TOKEN }}
386+
ACTIONS_RUNTIME_URL=${{ env.ACTIONS_RUNTIME_URL }}
387+
ACTIONS_RESULTS_URL=${{ env.ACTIONS_RESULTS_URL }}
388+
ACTIONS_CACHE_URL=${{ env.ACTIONS_CACHE_URL }}
389+
ACTIONS_CACHE_SERVICE_V2=${{ env.ACTIONS_CACHE_SERVICE_V2 }}
390+
SCCACHE_DIR=/host/${{ env.SCCACHE_DIR }}
391+
SCCACHE_CACHE_SIZE=${{ env.SCCACHE_CACHE_SIZE }}
336392
CIBW_ENVIRONMENT_WINDOWS: >
337393
CUDA_PATH="$(cygpath -w ${{ env.CUDA_PATH }})"
338394
CUDA_PYTHON_PARALLEL_LEVEL=${{ env.CUDA_PYTHON_PARALLEL_LEVEL }}
339395
CUDA_CORE_BUILD_MAJOR=${{ env.BUILD_PREV_CUDA_MAJOR }}
340396
PIP_FIND_LINKS="$(cygpath -w ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }})"
397+
# check cache stats before leaving cibuildwheel
398+
CIBW_BEFORE_TEST_LINUX: >
399+
"/host${{ env.SCCACHE_PATH }}" --show-stats
400+
# force the test stage to be run (so that before-test is not skipped)
401+
# TODO: we might want to think twice on adding this, it does a lot of
402+
# things before reaching this command.
403+
CIBW_TEST_COMMAND: >
404+
echo "ok!"
341405
342406
- name: List the cuda.core artifacts directory and rename
343407
run: |

.github/workflows/ci.yml

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,4 +202,28 @@ jobs:
202202
- doc
203203
steps:
204204
- name: Exit
205-
run: exit 0
205+
run: |
206+
# if any dependencies were cancelled, that's a failure
207+
#
208+
# see https://docs.github.com/en/actions/reference/workflows-and-actions/expressions#always
209+
# and https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/troubleshooting-required-status-checks#handling-skipped-but-required-checks
210+
# for why this cannot be encoded in the job-level `if:` field
211+
#
212+
# TL; DR: `$REASONS`
213+
#
214+
# The intersection of skipped-as-success and required status checks
215+
# creates a scenario where if you DON'T `always()` run this job, the
216+
# status check UI will block merging and if you DO `always()` run and
217+
# a dependency is _cancelled_ (due to a critical failure, which is
218+
# somehow not considered a failure ¯\_(ツ)_/¯) then the critically
219+
# failing job(s) will timeout causing a cancellation here and the
220+
# build to succeed which we don't want (originally this was just
221+
# 'exit 0')
222+
if ${{ needs.test-linux-64.result == 'cancelled' ||
223+
needs.test-linux-aarch64.result == 'cancelled' ||
224+
needs.test-windows.result == 'cancelled' ||
225+
needs.doc.result == 'cancelled' }}; then
226+
exit 1
227+
else
228+
exit 0
229+
fi

ci/test-matrix.json

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
{ "ARCH": "amd64", "PY_VER": "3.12", "CUDA_VER": "13.0.2", "LOCAL_CTK": "0", "GPU": "l4", "DRIVER": "latest" },
1515
{ "ARCH": "amd64", "PY_VER": "3.13", "CUDA_VER": "12.9.1", "LOCAL_CTK": "0", "GPU": "l4", "DRIVER": "latest" },
1616
{ "ARCH": "amd64", "PY_VER": "3.13", "CUDA_VER": "13.0.2", "LOCAL_CTK": "1", "GPU": "l4", "DRIVER": "latest" },
17-
{ "ARCH": "amd64", "PY_VER": "3.13t", "CUDA_VER": "13.0.2", "LOCAL_CTK": "1", "GPU": "l4", "DRIVER": "latest" },
1817
{ "ARCH": "amd64", "PY_VER": "3.14", "CUDA_VER": "13.0.2", "LOCAL_CTK": "1", "GPU": "l4", "DRIVER": "latest" },
1918
{ "ARCH": "amd64", "PY_VER": "3.14t", "CUDA_VER": "13.0.2", "LOCAL_CTK": "1", "GPU": "l4", "DRIVER": "latest" },
2019
{ "ARCH": "arm64", "PY_VER": "3.9", "CUDA_VER": "12.9.1", "LOCAL_CTK": "0", "GPU": "a100", "DRIVER": "latest" },
@@ -27,7 +26,6 @@
2726
{ "ARCH": "arm64", "PY_VER": "3.12", "CUDA_VER": "13.0.2", "LOCAL_CTK": "0", "GPU": "a100", "DRIVER": "latest" },
2827
{ "ARCH": "arm64", "PY_VER": "3.13", "CUDA_VER": "12.9.1", "LOCAL_CTK": "0", "GPU": "a100", "DRIVER": "latest" },
2928
{ "ARCH": "arm64", "PY_VER": "3.13", "CUDA_VER": "13.0.2", "LOCAL_CTK": "1", "GPU": "a100", "DRIVER": "latest" },
30-
{ "ARCH": "arm64", "PY_VER": "3.13t", "CUDA_VER": "13.0.2", "LOCAL_CTK": "1", "GPU": "a100", "DRIVER": "latest" },
3129
{ "ARCH": "arm64", "PY_VER": "3.14", "CUDA_VER": "13.0.2", "LOCAL_CTK": "1", "GPU": "a100", "DRIVER": "latest" },
3230
{ "ARCH": "arm64", "PY_VER": "3.14t", "CUDA_VER": "13.0.2", "LOCAL_CTK": "1", "GPU": "a100", "DRIVER": "latest" }
3331
],
@@ -95,8 +93,6 @@
9593
{ "ARCH": "amd64", "PY_VER": "3.12", "CUDA_VER": "12.9.1", "LOCAL_CTK": "1", "GPU": "t4", "DRIVER": "latest" },
9694
{ "ARCH": "amd64", "PY_VER": "3.13", "CUDA_VER": "13.0.2", "LOCAL_CTK": "0", "GPU": "t4", "DRIVER": "latest" },
9795
{ "ARCH": "amd64", "PY_VER": "3.13", "CUDA_VER": "13.0.2", "LOCAL_CTK": "1", "GPU": "l4", "DRIVER": "latest" },
98-
{ "ARCH": "amd64", "PY_VER": "3.13t", "CUDA_VER": "13.0.2", "LOCAL_CTK": "0", "GPU": "t4", "DRIVER": "latest" },
99-
{ "ARCH": "amd64", "PY_VER": "3.13t", "CUDA_VER": "13.0.2", "LOCAL_CTK": "1", "GPU": "l4", "DRIVER": "latest" },
10096
{ "ARCH": "amd64", "PY_VER": "3.14", "CUDA_VER": "13.0.2", "LOCAL_CTK": "0", "GPU": "t4", "DRIVER": "latest" },
10197
{ "ARCH": "amd64", "PY_VER": "3.14", "CUDA_VER": "13.0.2", "LOCAL_CTK": "1", "GPU": "l4", "DRIVER": "latest" },
10298
{ "ARCH": "amd64", "PY_VER": "3.14t", "CUDA_VER": "13.0.2", "LOCAL_CTK": "0", "GPU": "t4", "DRIVER": "latest" },
@@ -106,9 +102,7 @@
106102
{ "ARCH": "amd64", "PY_VER": "3.12", "CUDA_VER": "11.8.0", "LOCAL_CTK": "0", "GPU": "l4", "DRIVER": "latest" },
107103
{ "ARCH": "amd64", "PY_VER": "3.12", "CUDA_VER": "11.8.0", "LOCAL_CTK": "1", "GPU": "t4", "DRIVER": "latest" },
108104
{ "ARCH": "amd64", "PY_VER": "3.12", "CUDA_VER": "12.9.1", "LOCAL_CTK": "0", "GPU": "t4", "DRIVER": "latest" },
109-
{ "ARCH": "amd64", "PY_VER": "3.12", "CUDA_VER": "12.9.1", "LOCAL_CTK": "1", "GPU": "l4", "DRIVER": "latest" },
110-
{ "ARCH": "amd64", "PY_VER": "3.13t", "CUDA_VER": "13.0.2", "LOCAL_CTK": "0", "GPU": "t4", "DRIVER": "latest" },
111-
{ "ARCH": "amd64", "PY_VER": "3.13t", "CUDA_VER": "13.0.2", "LOCAL_CTK": "1", "GPU": "l4", "DRIVER": "latest" }
105+
{ "ARCH": "amd64", "PY_VER": "3.12", "CUDA_VER": "12.9.1", "LOCAL_CTK": "1", "GPU": "l4", "DRIVER": "latest" }
112106
]
113107
}
114108
}

ci/tools/env-vars

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ if [[ "${1}" == "build" ]]; then
4545
echo "BUILD_CUDA_MAJOR=${BUILD_CUDA_MAJOR}" >> $GITHUB_ENV
4646
echo "BUILD_PREV_CUDA_MAJOR=$((${BUILD_CUDA_MAJOR} - 1))" >> $GITHUB_ENV
4747
CUDA_BINDINGS_ARTIFACT_BASENAME="cuda-bindings-python${PYTHON_VERSION_FORMATTED}-cuda${CUDA_VER}-${HOST_PLATFORM}"
48+
# Enforce an explicit cache dir so that we can reuse this path later
49+
echo "SCCACHE_DIR=${HOME}/.cache/sccache" >> $GITHUB_ENV
50+
echo "SCCACHE_CACHE_SIZE=1G" >> $GITHUB_ENV
4851
elif [[ "${1}" == "test" ]]; then
4952
BUILD_CUDA_MAJOR="$(cut -d '.' -f 1 <<< ${BUILD_CUDA_VER})"
5053
TEST_CUDA_MAJOR="$(cut -d '.' -f 1 <<< ${CUDA_VER})"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
# SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
22
# SPDX-License-Identifier: LicenseRef-NVIDIA-SOFTWARE-LICENSE
33

4-
__version__ = "13.0.2"
4+
__version__ = "13.0.3"

cuda_bindings/docs/nv-versions.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33
"version": "latest",
44
"url": "https://nvidia.github.io/cuda-python/cuda-bindings/latest/"
55
},
6+
{
7+
"version": "13.0.3",
8+
"url": "https://nvidia.github.io/cuda-python/cuda-bindings/13.0.3/"
9+
},
610
{
711
"version": "13.0.2",
812
"url": "https://nvidia.github.io/cuda-python/cuda-bindings/13.0.2/"

cuda_bindings/docs/source/conf.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,11 @@
99

1010
# -- Path setup --------------------------------------------------------------
1111

12-
# If extensions (or modules to document with autodoc) are in another directory,
13-
# add these directories to sys.path here. If the directory is relative to the
14-
# documentation root, use os.path.abspath to make it absolute, like shown here.
1512
import os
13+
import sys
14+
from pathlib import Path
1615

17-
# import sys
18-
# sys.path.insert(0, os.path.abspath('.'))
16+
sys.path.insert(0, str((Path(__file__).parents[3] / "cuda_python" / "docs" / "exts").absolute()))
1917

2018

2119
# -- Project information -----------------------------------------------------
@@ -41,6 +39,7 @@
4139
"myst_nb",
4240
"enum_tools.autoenum",
4341
"sphinx_copybutton",
42+
"release_toc",
4443
]
4544

4645
nb_execution_mode = "off"

cuda_bindings/docs/source/release.rst

Lines changed: 2 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -6,36 +6,6 @@ Release Notes
66

77
.. toctree::
88
:maxdepth: 3
9+
:glob:
910

10-
13.0.2 <release/13.0.2-notes.rst>
11-
13.0.1 <release/13.0.1-notes.rst>
12-
13.0.0 <release/13.0.0-notes.rst>
13-
12.9.3 <release/12.9.3-notes.rst>
14-
12.9.2 <release/12.9.2-notes.rst>
15-
12.9.1 <release/12.9.1-notes.rst>
16-
12.9.0 <release/12.9.0-notes.rst>
17-
12.8.0 <release/12.8.0-notes.rst>
18-
12.6.2 <release/12.6.2-notes.rst>
19-
12.6.1 <release/12.6.1-notes.rst>
20-
12.6.0 <release/12.6.0-notes.rst>
21-
12.5.0 <release/12.5.0-notes.rst>
22-
12.4.0 <release/12.4.0-notes.rst>
23-
12.3.0 <release/12.3.0-notes.rst>
24-
12.2.1 <release/12.2.1-notes.rst>
25-
12.2.0 <release/12.2.0-notes.rst>
26-
12.1.0 <release/12.1.0-notes.rst>
27-
12.0.0 <release/12.0.0-notes.rst>
28-
11.8.7 <release/11.8.7-notes.rst>
29-
11.8.6 <release/11.8.6-notes.rst>
30-
11.8.5 <release/11.8.5-notes.rst>
31-
11.8.4 <release/11.8.4-notes.rst>
32-
11.8.3 <release/11.8.3-notes.rst>
33-
11.8.2 <release/11.8.2-notes.rst>
34-
11.8.1 <release/11.8.1-notes.rst>
35-
11.8.0 <release/11.8.0-notes.rst>
36-
11.7.1 <release/11.7.1-notes.rst>
37-
11.7.0 <release/11.7.0-notes.rst>
38-
11.6.1 <release/11.6.1-notes.rst>
39-
11.6.0 <release/11.6.0-notes.rst>
40-
11.5.0 <release/11.5.0-notes.rst>
41-
11.4.0 <release/11.4.0-notes.rst>
11+
release/*[0-9]-notes

cuda_bindings/docs/source/release/12.9.3-notes.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,4 @@ Known issues
2626
------------
2727

2828
* Updating from older versions (v12.6.2.post1 and below) via ``pip install -U cuda-python`` might not work. Please do a clean re-installation by uninstalling ``pip uninstall -y cuda-python`` followed by installing ``pip install cuda-python``.
29+
* The graphics APIs in ``cuda.bindings.runtime`` are inadvertently disabled in 12.9.3. Users needing these APIs should update to 12.9.4.
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
.. SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2+
.. SPDX-License-Identifier: LicenseRef-NVIDIA-SOFTWARE-LICENSE
3+
4+
.. module:: cuda.bindings
5+
6+
``cuda-bindings`` 12.9.4 Release notes
7+
======================================
8+
9+
10+
11+
Highlights
12+
----------
13+
14+
15+
Bug fixes
16+
---------
17+
18+
* The graphics APIs in ``cuda.bindings.runtime`` were inadvertently disabled in 12.9.3. This has been fixed.
19+
20+
Known issues
21+
------------
22+
23+
* Updating from older versions (v12.6.2.post1 and below) via ``pip install -U cuda-python`` might not work. Please do a clean re-installation by uninstalling ``pip uninstall -y cuda-python`` followed by installing ``pip install cuda-python``.

0 commit comments

Comments
 (0)