Skip to content

Main merge release/26.10 - #2606

Open
robertmaynard wants to merge 8 commits into
NVIDIA:mainfrom
robertmaynard:main-merge-release/26.10
Open

robertmaynard wants to merge 8 commits into
NVIDIA:mainfrom
robertmaynard:main-merge-release/26.10

Conversation

@robertmaynard

Copy link
Copy Markdown
Contributor

No description provided.

jameslamb and others added 7 commits September 10, 2026 17:44
…NVIDIA#2564)

Follow-up to NVIDIA#2548

Contributes to rapidsai/build-planning#324

* switches to wheel builds and `pip` devcontainers getting `tileiras`
from the system-installed CTK, not `cuda-toolkit` wheels.

## Notes for Reviewers

### Benefits of the `tileiras` change

* one less version to need to remember to update when we bump the CTK
version we build against
* consistent with how we get NVCC from the system install, not wheels
* removes a source of patching in DLFW builds (where a system CTK is
always preferred to one provided by wheels)

### How I tested this

relied on CI
…DIA#2526)

- remove stream pool creation from individual wrappers

Authors:
  - Tarang Jain (https://github.com/tarang-jain)
  - Mike Sarahan (https://github.com/msarahan)

Approvers:
  - Artem M. Chirkin (https://github.com/achirkin)
  - Bradley Dice (https://github.com/bdice)

URL: NVIDIA#2526
…2556)

`testMergeTwoSegsWithASingleDocPerSeg` and `testTwoVectorFieldsPerDoc` asserted that ordinal i of the merged segment holds the i-th document's vector. Lucene does not offer that: `MockRandomMergePolicy` shuffles the segments of a forced merge on purpose, so the document committed second can land at ordinal 0. Stock `Lucene99HnswVectorsFormat` fails the same tests on the same seeds, so no cuVS writer is involved.

The assertions now resolve each ordinal to its document and check that the document kept its own vector, which leaves the randomized merge policy in play. ordToDoc is checked to be increasing so the id lookup cannot agree with a mapping that is itself garbled. Applied to the quantized and GPU-search formats too, which carried the same assumption unreported.

Closes NVIDIA#2550

Authors:
  - Igor Motov (https://github.com/imotov)

Approvers:
  - Corey J. Nolet (https://github.com/cjnolet)

URL: NVIDIA#2556
…DIA#2481)" (NVIDIA#2597)

This reverts commit 6a5bba0. 

After some additional discussion, we concluded that while this change addresses a very specific use case well, there's an opportunity to make it more generic and more widely applicable. We'll be working on a solution that covers a broader set of use cases and open a follow-up PR soon.

Authors:
  - Igor Motov (https://github.com/imotov)

Approvers:
  - Corey J. Nolet (https://github.com/cjnolet)

URL: NVIDIA#2597
Replaces NVIDIA#2443

Containerizes the process of building the standalone C library tarballs

The starting point for this PR is @cjnolet 's work in NVIDIA#2443, where he wrote this description:

> _This PR is based on @msarahan's original POC, with the logic of the ci sript moved into build.sh and invoked through the CI script. The readme is also moved into the build and install guide in the docs._

Changes relative to that PR:

* threads `PARALLEL_LEVEL` throught so builds are parallelized
* enables the build cluster (`sccache-dist`) in CI
* simplifies configuration flow (e.g. reduced duplication of default values, removal of unnecessary flexibility)
* makes flow of AWS creds for `sccache` more secure
* removes unnecessary configuration
* removes unnecessary package installs, consolidates package installs
* removes an unnecessary `git clone` of https://github.com/rapidsai/spdx-license-builder
* enables `sccache` in CI and with a pattern that could work locally (will share details privately)
* updates GitHub Actions third-party actions to their latest versions

## Notes for Reviewers

### How I tested this

Locally tried each of the new commands added to `build.md`, with `sccache` enabled.

Tried just `build.sh` without `sccache` enabled (that takes a lot longer to run).

<details><summary>code for flipping between those (click me)</summary>

```shell
# enabling sccache
export CI=true
# (private steps setting up 'sccache' profile)
AWS_ACCESS_KEY_ID=$(
  aws configure get aws_access_key_id \
    --profile sccache
)
AWS_SECRET_ACCESS_KEY=$(
  aws configure get aws_secret_access_key \
    --profile sccache
)
AWS_SESSION_TOKEN=$(
  aws configure get aws_session_token \
    --profile sccache
)
export AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN

# testing without 'sccache'
unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN CI
```

</details>

```shell
clean() {
    sudo rm -rf ./{build,c/build/,cpp/build,libcuvs_c.tar.gz}
}

# all defaults
clean
./build.sh tarball

# customizing base image
clean
CUVS_TARBALL_CUDA_VERSION=12.9.2 \
CUVS_TARBALL_PYTHON_VERSION=3.11 \
  ./build.sh tarball

# customizing output directory, building tests 
clean
CUVS_TARBALL_BUILD_OUTPUT_DIR="${PWD}/dist" ./build.sh tarball --tarball-build-tests

# manual run (no build.sh)
clean

docker build \
  -f Dockerfile.standalone \
  --build-arg CUDA_VERSION="13.3.0" \
  --build-arg PYTHON_VERSION="3.14" \
  --build-arg RAPIDS_VERSION="$(head -1 ./VERSION | cut -d. -f1,2 )" \
  -t cuvs-standalone-c:local \
  .

mkdir -p "${PWD}/dist"
docker run --rm \
  -v "${PWD}:/workspace" \
  -v "${PWD}/dist:/build" \
  cuvs-standalone-c:local --tarball-build-tests
```

Saw high cache hit rates from `sccache` and everything working as expected.

Also looked at CI logs and saw that fully-cached jobs take around 30 minutes, pretty similar to the timings in CI today.

Authors:
  - James Lamb (https://github.com/jameslamb)

Approvers:
  - Mike Sarahan (https://github.com/msarahan)
  - Corey J. Nolet (https://github.com/cjnolet)

URL: NVIDIA#2595
The C++ core already builds and is tested on both amd64 and arm64; cuvs-java had a hardcoded amd64-only gate that cuvs-lucene inherited.

Java bytecode is portable, but cuvs-java isn't pure Java — it uses the Panama FFM API to call into native libcuvs_c.so, and those bindings are generated by jextract, which bakes struct/function ABI layouts (computed by parsing the C headers with clang for the host's target triple) into the generated .class files at build time. Reusing an amd64-generated binding on aarch64 should work, since no arch-conditional logic in the jextract-visible header surface changes any type layout, struct offset, or function signature between x86_64 and aarch64 Linux.

We therefore expect the plain (no-native-bundled) jar to be arch-portable in practice. To verify that, the aarch64 cuvs-lucene CI job installs the amd64-built jar and runs cuvs-lucene's full test suite against it on aarch64 hardware with an aarch64-native libcuvs_c.so.

Closes NVIDIA#1236.

Authors:
  - Igor Motov (https://github.com/imotov)

Approvers:
  - James Lamb (https://github.com/jameslamb)
  - MithunR (https://github.com/mythrocks)

URL: NVIDIA#2541
…VIDIA#2521)

## Summary

Track the coordinated migration of stream APIs and call sites from `rmm::cuda_stream_view` to CCCL's `cuda::stream_ref`. This propagates `cuda::stream_ref` through RMM containers and memory resources, RAFT resource and handle APIs, downstream C++ interfaces, Python/Cython bindings, benchmarks, tests, and documentation.

This migrates affected cuVS API signatures and internal call sites while extracting raw stream handles only where CUDA, generated/JIT, or legacy APIs require them.

Depends on rapidsai/rmm#2372 and NVIDIA/raft#3129.

Tracked in rapidsai/build-planning#318.

## Migrations

- Pass `cuda::stream_ref` through stream pools, resource accessors, conditionals, and downstream APIs without converting to `rmm::cuda_stream_view`
- Use `cuda::stream_ref` constructions for default/legacy/per-thread streams
  - `rmm::cuda_stream_default` ➡️ `cuda::stream_ref{cudaStream_t{cudaStreamDefault}}`
  - `rmm::cuda_stream_legacy` ➡️ `cuda::stream_ref{cudaStreamLegacy}`
  - `rmm::cuda_stream_per_thread` ➡️ `cuda::stream_ref{cudaStreamPerThread}`
- Use `.get()` when calling an API that requires a raw `cudaStream_t`, including CUDA runtime, library, CUB, and legacy API boundaries (previously `rmm::cuda_stream_view` used `value()`)
- Use `.sync()` when synchronizing a `cuda::stream_ref` (previously `rmm::cuda_stream_view` used `synchronize()`)
- Update Cython declarations and call sites to pass stream references directly where supported

Authors:
  - Bradley Dice (https://github.com/bdice)

Approvers:
  - Corey J. Nolet (https://github.com/cjnolet)
  - Divye Gala (https://github.com/divyegala)

URL: NVIDIA#2521
@robertmaynard
robertmaynard requested review from a team as code owners September 14, 2026 15:08
@robertmaynard robertmaynard added feature request New feature or request non-breaking Introduces a non-breaking change labels Sep 14, 2026
@msarahan

Copy link
Copy Markdown
Member

need to run RDFG I think:

diff --git a/python/libcuvs/pyproject.toml b/python/libcuvs/pyproject.toml
index b051cc19..1dce925f 100644
--- a/python/libcuvs/pyproject.toml
+++ b/python/libcuvs/pyproject.toml
@@ -84,7 +84,6 @@ build-backend = "scikit_build_core.build"
 requires = [
     "cmake>=4.0",
     "cuda-tile",
-    "cuda-toolkit[tileiras]==13.*",
     "libkvikio==26.12.*,>=0.0.0a0",
     "libraft==26.12.*,>=0.0.0a0",
     "librmm==26.12.*,>=0.0.0a0",
Error: Process completed with exit code 1.

@robertmaynard

Copy link
Copy Markdown
Contributor Author

need to run RDFG I think:

diff --git a/python/libcuvs/pyproject.toml b/python/libcuvs/pyproject.toml
index b051cc19..1dce925f 100644
--- a/python/libcuvs/pyproject.toml
+++ b/python/libcuvs/pyproject.toml
@@ -84,7 +84,6 @@ build-backend = "scikit_build_core.build"
 requires = [
     "cmake>=4.0",
     "cuda-tile",
-    "cuda-toolkit[tileiras]==13.*",
     "libkvikio==26.12.*,>=0.0.0a0",
     "libraft==26.12.*,>=0.0.0a0",
     "librmm==26.12.*,>=0.0.0a0",
Error: Process completed with exit code 1.

It is an existing brekage on main ( https://github.com/NVIDIA/cuvs/blob/main/python/libcuvs/pyproject.toml#L87 ) that we will need to fix after we merge this.

@robertmaynard

Copy link
Copy Markdown
Contributor Author

need to run RDFG I think:

diff --git a/python/libcuvs/pyproject.toml b/python/libcuvs/pyproject.toml
index b051cc19..1dce925f 100644
--- a/python/libcuvs/pyproject.toml
+++ b/python/libcuvs/pyproject.toml
@@ -84,7 +84,6 @@ build-backend = "scikit_build_core.build"
 requires = [
     "cmake>=4.0",
     "cuda-tile",
-    "cuda-toolkit[tileiras]==13.*",
     "libkvikio==26.12.*,>=0.0.0a0",
     "libraft==26.12.*,>=0.0.0a0",
     "librmm==26.12.*,>=0.0.0a0",
Error: Process completed with exit code 1.

It is an existing brekage on main ( https://github.com/NVIDIA/cuvs/blob/main/python/libcuvs/pyproject.toml#L87 ) that we will need to fix after we merge this.

@msarahan Okay I think I see the problem. The dependencies.yaml got merged the wrong way

@robertmaynard
robertmaynard force-pushed the main-merge-release/26.10 branch from 7b8c7f0 to b67e09f Compare September 14, 2026 15:33
@robertmaynard
robertmaynard force-pushed the main-merge-release/26.10 branch from b67e09f to 44d6e88 Compare September 14, 2026 15:53
@robertmaynard

Copy link
Copy Markdown
Contributor Author

/merge nosquash

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature request New feature or request non-breaking Introduces a non-breaking change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants