Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,830 changes: 915 additions & 915 deletions CHANGELOG.md

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ RUN echo " Building cuVS Docker image with:" && \
# Container metadata
LABEL maintainer="RAPIDS cuVS Team"
LABEL description="RAPIDS cuVS - Vector Search and Clustering on GPU"
LABEL org.opencontainers.image.source="https://github.com/rapidsai/cuvs"
LABEL org.opencontainers.image.source="https://github.com/nvidia/cuvs"
LABEL org.opencontainers.image.usage="docker run --gpus all -it <image>"

# Environment setup
Expand Down
20 changes: 10 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,14 @@

## Useful Resources

- [Documentation](https://docs.rapids.ai/api/cuvs/nightly/): Library documentation.
- [Build and Install Guide](https://docs.rapids.ai/api/cuvs/nightly/build): Instructions for installing and building cuVS.
- [Getting Started Guide](https://docs.rapids.ai/api/cuvs/nightly/getting_started): Guide to getting started with cuVS.
- [Code Examples](https://github.com/rapidsai/cuvs/tree/HEAD/examples): Self-contained Code Examples.
- [API Reference Documentation](https://docs.rapids.ai/api/cuvs/nightly/api_docs): API Documentation.
- [Documentation](https://docs.nvidia.com/cuvs): Library documentation.
- [Build and Install Guide](https://docs.nvidia.com/cuvs/installation): Instructions for installing and building cuVS.
- [Getting Started Guide](https://docs.nvidia.com/cuvs/getting-started): Guide to getting started with cuVS.
- [Code Examples](https://github.com/nvidia/cuvs/tree/HEAD/examples): Self-contained Code Examples.
- [API Reference Documentation](https://docs.nvidia.com/cuvs/api_reference): API Documentation.
Comment on lines +15 to +19

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Description: Find remaining references to old RAPIDS docs URLs

# Search for old docs.rapids.ai URLs across the codebase
rg -n 'docs\.rapids\.ai/api/cuvs' -g '!README.md'

Repository: rapidsai/cuvs

Length of output: 1629


🏁 Script executed:

#!/bin/bash
# Description: Find remaining references to any legacy RAPIDS docs domain

rg -n 'docs\.rapids\.ai' -g '!README.md'

Repository: rapidsai/cuvs

Length of output: 3874


Align remaining cuVS documentation URLs beyond README

README now links to docs.nvidia.com/cuvs, but the repo still contains legacy docs.rapids.ai/api/cuvs/... pointers (e.g., python/cuvs/pyproject.toml, python/libcuvs/pyproject.toml, fern/pages/index.md, and cuVS-related notebooks). This can lead to inconsistent doc navigation depending on entry point—either update these to docs.nvidia.com/cuvs or confirm the legacy links are intentionally kept/redirect.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@README.md` around lines 15 - 19, Search the repo for legacy
docs.rapids.ai/cuvs links and replace them with the canonical
docs.nvidia.com/cuvs endpoints (or confirm and annotate intentional redirects) —
specifically update the references found in python/cuvs/pyproject.toml,
python/libcuvs/pyproject.toml, fern/pages/index.md and any cuVS notebooks to use
https://docs.nvidia.com/cuvs (or the appropriate subpaths such as /api/cuvs,
/installation, /getting-started); if a legacy link must remain, add a brief
comment/NOTE in that file explaining it intentionally points to the legacy host.
Ensure URL scheme, host and path match the README style and run a repo-wide grep
for docs.rapids.ai to catch remaining instances.

- [RAPIDS Community](https://rapids.ai/community.html): Get help, contribute, and collaborate.
- [GitHub repository](https://github.com/rapidsai/cuvs): Download the cuVS source code.
- [Issue tracker](https://github.com/rapidsai/cuvs/issues): Report issues or request features.
- [GitHub repository](https://github.com/nvidia/cuvs): Download the cuVS source code.
- [Issue tracker](https://github.com/nvidia/cuvs/issues): Report issues or request features.

## What is cuVS?

Expand Down Expand Up @@ -114,7 +114,7 @@ cagra::index_params index_params;
auto index = cagra::build(res, index_params, dataset);
```

For more code examples of the C++ APIs, including drop-in Cmake project templates, please refer to the [C++ examples](https://github.com/rapidsai/cuvs/tree/HEAD/examples) directory in the codebase.
For more code examples of the C++ APIs, including drop-in Cmake project templates, please refer to the [C++ examples](https://github.com/nvidia/cuvs/tree/HEAD/examples) directory in the codebase.

### C API

Expand All @@ -139,7 +139,7 @@ cuvsCagraIndexParamsDestroy(index_params);
cuvsResourcesDestroy(res);
```

For more code examples of the C APIs, including drop-in Cmake project templates, please refer to the [C examples](https://github.com/rapidsai/cuvs/tree/main/examples/c)
For more code examples of the C APIs, including drop-in Cmake project templates, please refer to the [C examples](https://github.com/nvidia/cuvs/tree/main/examples/c)

### Rust API

Expand Down Expand Up @@ -202,7 +202,7 @@ fn cagra_example() -> Result<()> {
}
```

For more code examples of the Rust APIs, including a drop-in project templates, please refer to the [Rust examples](https://github.com/rapidsai/cuvs/tree/main/examples/rust).
For more code examples of the Rust APIs, including a drop-in project templates, please refer to the [Rust examples](https://github.com/nvidia/cuvs/tree/main/examples/rust).

## Contributing

Expand Down
2 changes: 1 addition & 1 deletion ci/build_java.sh
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ export SCCACHE_S3_USE_PREPROCESSOR_CACHE_MODE=true

# TODO: Remove this argument-handling when build and test workflows are separated,
# and test_java.sh no longer calls build_java.sh
# ref: https://github.com/rapidsai/cuvs/issues/868
# ref: https://github.com/nvidia/cuvs/issues/868
EXTRA_BUILD_ARGS=()
if [[ "${1:-}" == "--run-java-tests" ]]; then
EXTRA_BUILD_ARGS+=("--run-java-tests")
Expand Down
2 changes: 1 addition & 1 deletion ci/check_c_abi/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ dependencies = ["libclang", "msgspec", "termcolor"]
check-c-abi = "check_c_abi.main:main_cli"

[project.urls]
Homepage = "https://github.com/rapidsai/cuvs"
Homepage = "https://github.com/nvidia/cuvs"

[tool.setuptools.dynamic]
version = { file = "VERSION" }
4 changes: 2 additions & 2 deletions ci/test_java.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#!/bin/bash
# SPDX-FileCopyrightText: Copyright (c) 2022-2025, NVIDIA CORPORATION.
# SPDX-FileCopyrightText: Copyright (c) 2022-2026, NVIDIA CORPORATION.
# SPDX-License-Identifier: Apache-2.0

set -euo pipefail
Expand All @@ -17,7 +17,7 @@ RAPIDS_CUDA_MAJOR="${RAPIDS_CUDA_VERSION%%.*}"
export RAPIDS_CUDA_MAJOR

# TODO: switch to installing pre-built artifacts instead of rebuilding in test jobs
# ref: https://github.com/rapidsai/cuvs/issues/868
# ref: https://github.com/nvidia/cuvs/issues/868
ci/build_java.sh --run-java-tests

rapids-logger "Test script exiting with value: $EXITCODE"
Expand Down
2 changes: 1 addition & 1 deletion cpp/bench/ann/src/diskann/diskann_wrapper.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ diskann::Metric parse_metric_to_diskann(cuvs::bench::Metric metric)
}
}

// TODO (tarangj): Remaining features are tracked at https://github.com/rapidsai/cuvs/issues/656
// TODO (tarangj): Remaining features are tracked at https://github.com/nvidia/cuvs/issues/656
template <typename T>
class diskann_memory : public algo<T> {
public:
Expand Down
2 changes: 1 addition & 1 deletion cpp/include/cuvs/cluster/kmeans.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ enum class kmeans_type { KMeans = 0, KMeansBalanced = 1 };
* @brief Find clusters with k-means algorithm using batched processing of host data.
*
* TODO: Evaluate replacing the extent type with int64_t. Reference issue:
* https://github.com/rapidsai/cuvs/issues/1961
* https://github.com/nvidia/cuvs/issues/1961
*
* This overload supports out-of-core computation where the dataset resides
* on the host. Data is processed in GPU-sized batches, streaming from host to device.
Expand Down
2 changes: 1 addition & 1 deletion cpp/include/cuvs/cluster/spectral.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ struct params {
* @{
*/

// TODO: int64_t nnz support (see https://github.com/rapidsai/cuvs/issues/1484)
// TODO: int64_t nnz support (see https://github.com/nvidia/cuvs/issues/1484)

/**
* @brief Perform spectral clustering on a connectivity graph
Expand Down
2 changes: 1 addition & 1 deletion cpp/include/cuvs/neighbors/common.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -758,7 +758,7 @@ constexpr static IdxT kInvalidRecord =
* @tparam IdxT The index type for source indices
* @tparam SizeT The size type
*
* TODO: Make this struct internal (tracking issue: https://github.com/rapidsai/cuvs/issues/1726)
* TODO: Make this struct internal (tracking issue: https://github.com/nvidia/cuvs/issues/1726)
*/
template <typename ValueT, typename IdxT, typename SizeT = uint32_t>
struct list_base {
Expand Down
2 changes: 1 addition & 1 deletion cpp/include/cuvs/neighbors/hnsw.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -750,7 +750,7 @@ struct search_params : cuvs::neighbors::search_params {
* @}
*/

// TODO: Filtered Search APIs: https://github.com/rapidsai/cuvs/issues/363
// TODO: Filtered Search APIs: https://github.com/nvidia/cuvs/issues/363

/**
* @defgroup hnsw_cpp_index_search Search hnswlib index
Expand Down
2 changes: 1 addition & 1 deletion cpp/src/neighbors/all_neighbors/all_neighbors_merge.cuh
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ RAFT_KERNEL merge_subgraphs_kernel(IdxT* cluster_data_indices,
// to each other after sorting by distances. Thus, for now we sweep a neighboring window of
// size 4 or sweep the entire row to check for duplicates, and keep the first occurrence
// only.
// related issue: https://github.com/rapidsai/cuvs/issues/1056
// related issue: https://github.com/nvidia/cuvs/issues/1056
// uniqueMask[colId] = static_cast<int16_t>(blockValues[colId] != blockValues[colId - 1]);

int is_unique = 1;
Expand Down
2 changes: 1 addition & 1 deletion cpp/src/neighbors/detail/cagra/cagra_build.cuh
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ void ace_get_partition_labels(

// Sampling vectors from dataset. Uses float conversion on host instead of
// raft::matrix::sample_rows to minimize GPU memory usage.
// TODO(julianmi): Switch to sample_rows when https://github.com/rapidsai/cuvs/issues/1461 is
// TODO(julianmi): Switch to sample_rows when https://github.com/nvidia/cuvs/issues/1461 is
// addressed.
size_t n_samples = dataset_size * sampling_rate;
const size_t min_samples = 100 * n_partitions;
Expand Down
4 changes: 2 additions & 2 deletions cpp/src/neighbors/detail/nn_descent.cuh
Original file line number Diff line number Diff line change
Expand Up @@ -539,7 +539,7 @@ __device__ __forceinline__ void calculate_metric(float* s_distances,
s_distances[i] = 0.0;
int n1 = row_neighbors[row_id];
int n2 = col_neighbors[col_id];
// TODO: https://github.com/rapidsai/cuvs/issues/1127
// TODO: https://github.com/nvidia/cuvs/issues/1127
const uint8_t* data_n1 = reinterpret_cast<const uint8_t*>(data) + n1 * data_dim;
const uint8_t* data_n2 = reinterpret_cast<const uint8_t*>(data) + n2 * data_dim;
for (int d = 0; d < data_dim; d++) {
Expand All @@ -550,7 +550,7 @@ __device__ __forceinline__ void calculate_metric(float* s_distances,
s_distances[i] =
l2_norms[row_neighbors[row_id]] + l2_norms[col_neighbors[col_id]] - 2.0 * s_distances[i];
// for fp32 vs fp16 precision differences resulting in negative distances when distance
// should be 0 related issue: https://github.com/rapidsai/cuvs/issues/991
// should be 0 related issue: https://github.com/nvidia/cuvs/issues/991
s_distances[i] = s_distances[i] < 0.0f ? 0.0f : s_distances[i];
if (!can_postprocess_dist && metric == cuvs::distance::DistanceType::L2SqrtExpanded) {
s_distances[i] = sqrtf(s_distances[i]);
Expand Down
2 changes: 1 addition & 1 deletion cpp/src/neighbors/detail/vamana/vamana_build.cuh
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,7 @@ void batched_insert_vamana(

// Random medoid has minor impact on recall
// TODO: use heuristic for better medoid selection, issue:
// https://github.com/rapidsai/cuvs/issues/355
// https://github.com/nvidia/cuvs/issues/355
*medoid_id = rand() % N;

// size of current batch of inserts, increases logarithmically until max_batchsize
Expand Down
2 changes: 1 addition & 1 deletion cpp/src/neighbors/detail/vpq_dataset.cuh
Original file line number Diff line number Diff line change
Expand Up @@ -401,7 +401,7 @@ __launch_bounds__(BlockSize) RAFT_KERNEL process_and_fill_codes_kernel(
/**
* Note: `inline_vq_labels` should only be used for CAGRA-Q compatibility or internal use-cases.
* Otherwise, vq_labels should be preferred.
* Issue: https://github.com/rapidsai/cuvs/issues/1722
* Issue: https://github.com/nvidia/cuvs/issues/1722
*/
template <typename MathT, typename IdxT, typename DatasetT>
void process_and_fill_codes(
Expand Down
2 changes: 1 addition & 1 deletion cpp/src/neighbors/mg/snmg.cuh
Original file line number Diff line number Diff line change
Expand Up @@ -607,7 +607,7 @@ void search(const raft::resources& clique,
cuvs::core::omp::check_threads(index.num_ranks_);
// Each rank gets its own thread; that thread handles all batches for that rank sequentially.
// This prevents concurrent access to the same GPU from multiple threads. (see
// https://github.com/rapidsai/cuvs/issues/1720)
// https://github.com/nvidia/cuvs/issues/1720)
#pragma omp parallel for num_threads(index.num_ranks_)
for (int rank = 0; rank < index.num_ranks_; rank++) {
for (int64_t batch_idx = rank; batch_idx < n_batches; batch_idx += index.num_ranks_) {
Expand Down
2 changes: 1 addition & 1 deletion cpp/tests/neighbors/ann_cagra/bug_issue_93_reproducer.cu
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
* SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION.
* SPDX-License-Identifier: Apache-2.0
*
* Reproducer for https://github.com/rapidsai/cuvs-lucene/issues/93
* Reproducer for https://github.com/nvidia/cuvs-lucene/issues/93
* cuvsCagraSearch returned 0 (Reason=cudaErrorInvalidValue:invalid argument)
*
* ROOT CAUSE:
Expand Down
170 changes: 85 additions & 85 deletions cpp/tests/neighbors/ann_cagra/bug_iterative_cagra_build.cu
Original file line number Diff line number Diff line change
@@ -1,85 +1,85 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION.
* SPDX-License-Identifier: Apache-2.0
*/
#include <gtest/gtest.h>
#include <cuvs/neighbors/cagra.hpp>
#include <raft/core/device_mdarray.hpp>
#include <raft/core/device_resources.hpp>
#include <raft/random/rng.cuh>
#include <cstdint>
#include <type_traits>
namespace cuvs::neighbors::cagra {
template <typename DataT>
class CagraIterativeBuildBugTest : public ::testing::Test {
public:
using data_type = DataT;
protected:
void run()
{
// Set up iterative CAGRA graph building
cagra::index_params index_params;
// The bug manifests when graph_degree is equal to intermediate_graph_degree
// see issue https://github.com/rapidsai/cuvs/issues/1818
index_params.graph_degree = 16;
index_params.intermediate_graph_degree = 16;
// Use iterative CAGRA search for graph building
index_params.graph_build_params = graph_build_params::iterative_search_params();
// Build the index
auto cagra_index = cagra::build(res, index_params, raft::make_const_mdspan(dataset->view()));
raft::resource::sync_stream(res);
// Verify the index was built successfully
ASSERT_GT(cagra_index.size(), 0);
ASSERT_EQ(cagra_index.dim(), n_dim);
}
void SetUp() override
{
dataset.emplace(raft::make_device_matrix<data_type, int64_t>(res, n_samples, n_dim));
raft::random::RngState r(1234ULL);
// Generate random data based on type
if constexpr (std::is_same_v<data_type, float>) {
raft::random::normal(
res, r, dataset->data_handle(), n_samples * n_dim, data_type(0), data_type(1));
} else if constexpr (std::is_same_v<data_type, int8_t>) {
raft::random::uniformInt(
res, r, dataset->data_handle(), n_samples * n_dim, int8_t(-128), int8_t(127));
} else if constexpr (std::is_same_v<data_type, uint8_t>) {
raft::random::uniformInt(
res, r, dataset->data_handle(), n_samples * n_dim, uint8_t(0), uint8_t(255));
}
raft::resource::sync_stream(res);
}
void TearDown() override
{
dataset.reset();
raft::resource::sync_stream(res);
}
private:
raft::resources res;
std::optional<raft::device_matrix<data_type, int64_t>> dataset = std::nullopt;
constexpr static int64_t n_samples = 10000;
constexpr static int64_t n_dim = 1024;
};
// Instantiate test for different data types
using TestTypes = ::testing::Types<float, int8_t, uint8_t>;
TYPED_TEST_SUITE(CagraIterativeBuildBugTest, TestTypes);
TYPED_TEST(CagraIterativeBuildBugTest, IterativeBuildTest) { this->run(); }
} // namespace cuvs::neighbors::cagra
/*
* SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION.
* SPDX-License-Identifier: Apache-2.0
*/

#include <gtest/gtest.h>

#include <cuvs/neighbors/cagra.hpp>

#include <raft/core/device_mdarray.hpp>
#include <raft/core/device_resources.hpp>
#include <raft/random/rng.cuh>

#include <cstdint>
#include <type_traits>

namespace cuvs::neighbors::cagra {

template <typename DataT>
class CagraIterativeBuildBugTest : public ::testing::Test {
public:
using data_type = DataT;

protected:
void run()
{
// Set up iterative CAGRA graph building
cagra::index_params index_params;
// The bug manifests when graph_degree is equal to intermediate_graph_degree
// see issue https://github.com/nvidia/cuvs/issues/1818
index_params.graph_degree = 16;
index_params.intermediate_graph_degree = 16;

// Use iterative CAGRA search for graph building
index_params.graph_build_params = graph_build_params::iterative_search_params();

// Build the index
auto cagra_index = cagra::build(res, index_params, raft::make_const_mdspan(dataset->view()));
raft::resource::sync_stream(res);

// Verify the index was built successfully
ASSERT_GT(cagra_index.size(), 0);
ASSERT_EQ(cagra_index.dim(), n_dim);
}

void SetUp() override
{
dataset.emplace(raft::make_device_matrix<data_type, int64_t>(res, n_samples, n_dim));
raft::random::RngState r(1234ULL);

// Generate random data based on type
if constexpr (std::is_same_v<data_type, float>) {
raft::random::normal(
res, r, dataset->data_handle(), n_samples * n_dim, data_type(0), data_type(1));
} else if constexpr (std::is_same_v<data_type, int8_t>) {
raft::random::uniformInt(
res, r, dataset->data_handle(), n_samples * n_dim, int8_t(-128), int8_t(127));
} else if constexpr (std::is_same_v<data_type, uint8_t>) {
raft::random::uniformInt(
res, r, dataset->data_handle(), n_samples * n_dim, uint8_t(0), uint8_t(255));
}
raft::resource::sync_stream(res);
}

void TearDown() override
{
dataset.reset();
raft::resource::sync_stream(res);
}

private:
raft::resources res;
std::optional<raft::device_matrix<data_type, int64_t>> dataset = std::nullopt;

constexpr static int64_t n_samples = 10000;
constexpr static int64_t n_dim = 1024;
};

// Instantiate test for different data types
using TestTypes = ::testing::Types<float, int8_t, uint8_t>;
TYPED_TEST_SUITE(CagraIterativeBuildBugTest, TestTypes);

TYPED_TEST(CagraIterativeBuildBugTest, IterativeBuildTest) { this->run(); }

} // namespace cuvs::neighbors::cagra
4 changes: 2 additions & 2 deletions cpp/tests/neighbors/ann_ivf_flat.cuh
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 2024-2025, NVIDIA CORPORATION.
* SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION.
* SPDX-License-Identifier: Apache-2.0
*/
#pragma once
Expand Down Expand Up @@ -545,7 +545,7 @@ const std::vector<AnnIvfFlatInputs<int64_t>> inputs = {
{1000, 10000, 2050, 16, 40, 1024, cuvs::distance::DistanceType::InnerProduct, false},
{1000, 10000, 2050, 16, 40, 1024, cuvs::distance::DistanceType::CosineExpanded, false},
// TODO: Re-enable test after adjusting parameters for higher recall. See
// https://github.com/rapidsai/cuvs/issues/1091
// https://github.com/nvidia/cuvs/issues/1091
// {1000, 10000, 2051, 16, 40, 1024, cuvs::distance::DistanceType::InnerProduct, true},
{1000, 10000, 2051, 16, 40, 1024, cuvs::distance::DistanceType::CosineExpanded, true},
{1000, 10000, 2052, 16, 40, 1024, cuvs::distance::DistanceType::InnerProduct, false},
Expand Down
Loading
Loading