Skip to content

Commit d5001d4

Browse files
committed
try to reuse cuda-bindings wheels for 3.13t/3.14/3.14t
1 parent 9e799e4 commit d5001d4

File tree

2 files changed

+75
-40
lines changed

2 files changed

+75
-40
lines changed

.github/workflows/build-wheel.yml

Lines changed: 75 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -119,17 +119,13 @@ jobs:
119119
host-platform: ${{ inputs.host-platform }}
120120
cuda-version: ${{ inputs.cuda-version }}
121121

122-
# TODO: this currently builds against the public cuda.bindings wheel. Consider
123-
# building against the wheel from main instead (the below step).
124-
- name: Build cuda.core wheel
122+
- name: Build cuda.bindings wheel
125123
uses: pypa/cibuildwheel@c923d83ad9c1bc00211c5041d0c3f73294ff88f6 # v3.1.4
126124
with:
127-
package-dir: ./cuda_core/
128-
output-dir: ${{ env.CUDA_CORE_ARTIFACTS_DIR }}
125+
package-dir: ./cuda_bindings/
126+
output-dir: ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }}
129127
env:
130128
CIBW_BUILD: ${{ env.CIBW_BUILD }}
131-
CIBW_ENVIRONMENT: >
132-
CUDA_CORE_BUILD_MAJOR=${{ env.BUILD_CUDA_MAJOR }}
133129
# CIBW mounts the host filesystem under /host
134130
CIBW_ENVIRONMENT_LINUX: >
135131
CUDA_PATH=/host/${{ env.CUDA_PATH }}
@@ -138,63 +134,68 @@ jobs:
138134
CUDA_PATH="$(cygpath -w ${{ env.CUDA_PATH }})"
139135
CUDA_PYTHON_PARALLEL_LEVEL=${{ env.CUDA_PYTHON_PARALLEL_LEVEL }}
140136
141-
- name: List the cuda.core artifacts directory and rename
137+
- name: List the cuda.bindings artifacts directory
142138
run: |
143139
if [[ "${{ inputs.host-platform }}" == win* ]]; then
144140
export CHOWN=chown
145141
else
146142
export CHOWN="sudo chown"
147143
fi
148-
$CHOWN -R $(whoami) ${{ env.CUDA_CORE_ARTIFACTS_DIR }}
144+
$CHOWN -R $(whoami) ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }}
145+
ls -lahR ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }}
149146
150-
# Rename wheel to include CUDA version suffix
151-
mkdir -p "${{ env.CUDA_CORE_ARTIFACTS_DIR }}/cu${BUILD_CUDA_MAJOR}"
152-
for wheel in ${{ env.CUDA_CORE_ARTIFACTS_DIR }}/*.whl; do
153-
if [[ -f "${wheel}" ]]; then
154-
base_name=$(basename "${wheel}" .whl)
155-
new_name="${base_name}.cu${BUILD_CUDA_MAJOR}.whl"
156-
mv "${wheel}" "${{ env.CUDA_CORE_ARTIFACTS_DIR }}/cu${BUILD_CUDA_MAJOR}/${new_name}"
157-
echo "Renamed wheel to: ${new_name}"
158-
fi
159-
done
147+
- name: Check cuda.bindings wheel
148+
run: |
149+
twine check --strict ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }}/*.whl
160150
161-
ls -lahR ${{ env.CUDA_CORE_ARTIFACTS_DIR }}
151+
- name: Upload cuda.bindings build artifacts
152+
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
153+
with:
154+
name: ${{ env.CUDA_BINDINGS_ARTIFACT_NAME }}
155+
path: ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }}/*.whl
156+
if-no-files-found: error
162157

163-
- name: Build cuda.bindings wheel
158+
# TODO: ideally we want to build against public cuda-bindings
159+
- name: Build cuda.core wheel
164160
uses: pypa/cibuildwheel@c923d83ad9c1bc00211c5041d0c3f73294ff88f6 # v3.1.4
165161
with:
166-
package-dir: ./cuda_bindings/
167-
output-dir: ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }}
162+
package-dir: ./cuda_core/
163+
output-dir: ${{ env.CUDA_CORE_ARTIFACTS_DIR }}
168164
env:
169165
CIBW_BUILD: ${{ env.CIBW_BUILD }}
170166
# CIBW mounts the host filesystem under /host
171167
CIBW_ENVIRONMENT_LINUX: >
172168
CUDA_PATH=/host/${{ env.CUDA_PATH }}
173169
CUDA_PYTHON_PARALLEL_LEVEL=${{ env.CUDA_PYTHON_PARALLEL_LEVEL }}
170+
CUDA_CORE_BUILD_MAJOR=${{ env.BUILD_CUDA_MAJOR }}
171+
PIP_FIND_LINKS=/host/${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }}
174172
CIBW_ENVIRONMENT_WINDOWS: >
175173
CUDA_PATH="$(cygpath -w ${{ env.CUDA_PATH }})"
176174
CUDA_PYTHON_PARALLEL_LEVEL=${{ env.CUDA_PYTHON_PARALLEL_LEVEL }}
175+
CUDA_CORE_BUILD_MAJOR=${{ env.BUILD_CUDA_MAJOR }}
176+
PIP_FIND_LINKS="$(cygpath -w ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }})"
177177
178-
- name: List the cuda.bindings artifacts directory
178+
- name: List the cuda.core artifacts directory and rename
179179
run: |
180180
if [[ "${{ inputs.host-platform }}" == win* ]]; then
181181
export CHOWN=chown
182182
else
183183
export CHOWN="sudo chown"
184184
fi
185-
$CHOWN -R $(whoami) ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }}
186-
ls -lahR ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }}
185+
$CHOWN -R $(whoami) ${{ env.CUDA_CORE_ARTIFACTS_DIR }}
187186
188-
- name: Check cuda.bindings wheel
189-
run: |
190-
twine check --strict ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }}/*.whl
187+
# Rename wheel to include CUDA version suffix
188+
mkdir -p "${{ env.CUDA_CORE_ARTIFACTS_DIR }}/cu${BUILD_CUDA_MAJOR}"
189+
for wheel in ${{ env.CUDA_CORE_ARTIFACTS_DIR }}/*.whl; do
190+
if [[ -f "${wheel}" ]]; then
191+
base_name=$(basename "${wheel}" .whl)
192+
new_name="${base_name}.cu${BUILD_CUDA_MAJOR}.whl"
193+
mv "${wheel}" "${{ env.CUDA_CORE_ARTIFACTS_DIR }}/cu${BUILD_CUDA_MAJOR}/${new_name}"
194+
echo "Renamed wheel to: ${new_name}"
195+
fi
196+
done
191197
192-
- name: Upload cuda.bindings build artifacts
193-
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
194-
with:
195-
name: ${{ env.CUDA_BINDINGS_ARTIFACT_NAME }}
196-
path: ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }}/*.whl
197-
if-no-files-found: error
198+
ls -lahR ${{ env.CUDA_CORE_ARTIFACTS_DIR }}
198199
199200
# We only need/want a single pure python wheel, pick linux-64 index 0.
200201
- name: Build and check cuda-python wheel
@@ -288,24 +289,59 @@ jobs:
288289
cuda-version: ${{ inputs.prev-cuda-version }}
289290
cuda-path: "./cuda_toolkit_prev"
290291

291-
# TODO: this currently builds against the public cuda.bindings wheel. Consider
292-
# building against the wheel from the backport branch instead.
292+
# TODO: ideally we want to build against public cuda-bindings
293+
- name: Download cuda.bindings build artifacts from the prior branch
294+
if: ${{ matrix.python-version == '3.13t'
295+
|| matrix.python-version == '3.14'
296+
|| matrix.python-version == '3.14t' }}
297+
env:
298+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
299+
run: |
300+
if ! (command -v gh 2>&1 >/dev/null); then
301+
# See https://github.com/cli/cli/blob/trunk/docs/install_linux.md#debian-ubuntu-linux-raspberry-pi-os-apt.
302+
# gh is needed for artifact fetching.
303+
mkdir -p -m 755 /etc/apt/keyrings \
304+
&& out=$(mktemp) && wget -nv -O$out https://cli.github.com/packages/githubcli-archive-keyring.gpg \
305+
&& cat $out | tee /etc/apt/keyrings/githubcli-archive-keyring.gpg > /dev/null \
306+
&& chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg \
307+
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | tee /etc/apt/sources.list.d/github-cli.list > /dev/null \
308+
&& apt update \
309+
&& apt install gh -y
310+
fi
311+
312+
OLD_BRANCH=$(cat .github/BACKPORT_BRANCH)
313+
OLD_BASENAME="cuda-bindings-python${PYTHON_VERSION_FORMATTED}-cuda*-${{ inputs.host-platform }}*"
314+
LATEST_PRIOR_RUN_ID=$(gh run list -b ${OLD_BRANCH} -L 1 -w "ci.yml" -s completed -R NVIDIA/cuda-python --json databaseId | jq '.[]| .databaseId')
315+
if [[ "$LATEST_PRIOR_RUN_ID" == "" ]]; then
316+
echo "LATEST_PRIOR_RUN_ID not found!"
317+
exit 1
318+
fi
319+
320+
gh run download $LATEST_PRIOR_RUN_ID -p ${OLD_BASENAME} -R NVIDIA/cuda-python
321+
rm -rf ${OLD_BASENAME}-tests # exclude cython test artifacts
322+
ls -al $OLD_BASENAME
323+
mkdir -p "${{ env.CUDA_CORE_ARTIFACTS_DIR }}"
324+
mv $OLD_BASENAME/*.whl "${{ env.CUDA_CORE_ARTIFACTS_DIR }}"
325+
rmdir $OLD_BASENAME
326+
293327
- name: Build cuda.core wheel
294328
uses: pypa/cibuildwheel@c923d83ad9c1bc00211c5041d0c3f73294ff88f6 # v3.1.4
295329
with:
296330
package-dir: ./cuda_core/
297331
output-dir: ${{ env.CUDA_CORE_ARTIFACTS_DIR }}
298332
env:
299333
CIBW_BUILD: ${{ env.CIBW_BUILD }}
300-
CIBW_ENVIRONMENT: >
301-
CUDA_CORE_BUILD_MAJOR=${{ env.BUILD_PREV_CUDA_MAJOR }}
302334
# CIBW mounts the host filesystem under /host
303335
CIBW_ENVIRONMENT_LINUX: >
304336
CUDA_PATH=/host/${{ env.CUDA_PATH }}
305337
CUDA_PYTHON_PARALLEL_LEVEL=${{ env.CUDA_PYTHON_PARALLEL_LEVEL }}
338+
CUDA_CORE_BUILD_MAJOR=${{ env.BUILD_PREV_CUDA_MAJOR }}
339+
PIP_FIND_LINKS=/host/${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }}
306340
CIBW_ENVIRONMENT_WINDOWS: >
307341
CUDA_PATH="$(cygpath -w ${{ env.CUDA_PATH }})"
308342
CUDA_PYTHON_PARALLEL_LEVEL=${{ env.CUDA_PYTHON_PARALLEL_LEVEL }}
343+
CUDA_CORE_BUILD_MAJOR=${{ env.BUILD_PREV_CUDA_MAJOR }}
344+
PIP_FIND_LINKS="$(cygpath -w ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }})"
309345
310346
- name: List the cuda.core artifacts directory and rename
311347
run: |

cuda_core/pyproject.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@ readme = { file = ["DESCRIPTION.rst"], content-type = "text/x-rst" }
7979
skip = "*-musllinux_*"
8080
enable = "cpython-freethreading"
8181
build-verbosity = 1
82-
environment-pass = ["CUDA_PATH", "CUDA_PYTHON_PARALLEL_LEVEL"]
8382

8483
[tool.cibuildwheel.linux]
8584
archs = "native"

0 commit comments

Comments
 (0)