Skip to content

Commit 45898e1

Browse files
authored
Merge branch 'branch-25.06' into faiss-docs
2 parents 7f17b5a + d2adc6f commit 45898e1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+2927
-2815
lines changed

ci/build_wheel.sh

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,14 @@ if [[ "${package_dir}" != "python/libcuvs" ]]; then
3535
)
3636
fi
3737

38+
RAPIDS_CUDA_MAJOR="${RAPIDS_CUDA_VERSION%%.*}"
39+
if [[ ${RAPIDS_CUDA_MAJOR} != "11" ]]; then
40+
EXCLUDE_ARGS+=(
41+
--exclude "libnccl.so.*"
42+
)
43+
export SKBUILD_CMAKE_ARGS="-DUSE_NCCL_RUNTIME_WHEEL=ON"
44+
fi
45+
3846
rapids-logger "Building '${package_name}' wheel"
3947

4048
sccache --zero-stats

ci/test_wheel_cuvs.sh

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@
33

44
set -euo pipefail
55

6+
# Delete system libnccl.so to ensure the wheel is used
7+
RAPIDS_CUDA_MAJOR="${RAPIDS_CUDA_VERSION%%.*}"
8+
if [[ ${RAPIDS_CUDA_MAJOR} != "11" ]]; then
9+
rm -rf /usr/lib64/libnccl*
10+
fi
11+
612
mkdir -p ./dist
713
RAPIDS_PY_CUDA_SUFFIX="$(rapids-wheel-ctk-name-gen "${RAPIDS_CUDA_VERSION}")"
814
RAPIDS_PY_WHEEL_NAME="libcuvs_${RAPIDS_PY_CUDA_SUFFIX}" rapids-download-wheels-from-s3 cpp ./local-libcuvs-dep

cpp/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,6 @@ if(BUILD_SHARED_LIBS)
306306
src/neighbors/mg/mg_cagra_int8_t_uint32_t.cu
307307
src/neighbors/mg/mg_cagra_uint8_t_uint32_t.cu
308308
src/neighbors/mg/omp_checks.cpp
309-
src/neighbors/mg/nccl_comm.cpp
310309
)
311310
endif()
312311

@@ -609,6 +608,7 @@ if(BUILD_SHARED_LIBS)
609608
if(BUILD_MG_ALGOS)
610609
target_compile_definitions(cuvs PUBLIC CUVS_BUILD_MG_ALGOS)
611610
target_compile_definitions(cuvs_objs PUBLIC CUVS_BUILD_MG_ALGOS)
611+
target_compile_definitions(cuvs-cagra-search PUBLIC CUVS_BUILD_MG_ALGOS)
612612
endif()
613613

614614
if(BUILD_CAGRA_HNSWLIB)

cpp/bench/ann/src/cuvs/cuvs_benchmark.cu

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,38 +30,38 @@
3030
namespace cuvs::bench {
3131

3232
#ifdef CUVS_ANN_BENCH_USE_CUVS_MG
33-
void add_distribution_mode(cuvs::neighbors::mg::distribution_mode* dist_mode,
33+
void add_distribution_mode(cuvs::neighbors::distribution_mode* dist_mode,
3434
const nlohmann::json& conf)
3535
{
3636
if (conf.contains("distribution_mode")) {
3737
std::string distribution_mode = conf.at("distribution_mode");
3838
if (distribution_mode == "replicated") {
39-
*dist_mode = cuvs::neighbors::mg::distribution_mode::REPLICATED;
39+
*dist_mode = cuvs::neighbors::distribution_mode::REPLICATED;
4040
} else if (distribution_mode == "sharded") {
41-
*dist_mode = cuvs::neighbors::mg::distribution_mode::SHARDED;
41+
*dist_mode = cuvs::neighbors::distribution_mode::SHARDED;
4242
} else {
4343
throw std::runtime_error("invalid value for distribution_mode");
4444
}
4545
} else {
4646
// default
47-
*dist_mode = cuvs::neighbors::mg::distribution_mode::SHARDED;
47+
*dist_mode = cuvs::neighbors::distribution_mode::SHARDED;
4848
}
4949
};
5050

51-
void add_merge_mode(cuvs::neighbors::mg::sharded_merge_mode* merge_mode, const nlohmann::json& conf)
51+
void add_merge_mode(cuvs::neighbors::sharded_merge_mode* merge_mode, const nlohmann::json& conf)
5252
{
5353
if (conf.contains("merge_mode")) {
5454
std::string sharded_merge_mode = conf.at("merge_mode");
5555
if (sharded_merge_mode == "tree_merge") {
56-
*merge_mode = cuvs::neighbors::mg::sharded_merge_mode::TREE_MERGE;
56+
*merge_mode = cuvs::neighbors::sharded_merge_mode::TREE_MERGE;
5757
} else if (sharded_merge_mode == "merge_on_root_rank") {
58-
*merge_mode = cuvs::neighbors::mg::sharded_merge_mode::MERGE_ON_ROOT_RANK;
58+
*merge_mode = cuvs::neighbors::sharded_merge_mode::MERGE_ON_ROOT_RANK;
5959
} else {
6060
throw std::runtime_error("invalid value for merge_mode");
6161
}
6262
} else {
6363
// default
64-
*merge_mode = cuvs::neighbors::mg::sharded_merge_mode::TREE_MERGE;
64+
*merge_mode = cuvs::neighbors::sharded_merge_mode::TREE_MERGE;
6565
}
6666
};
6767
#endif

cpp/bench/ann/src/cuvs/cuvs_mg_cagra_wrapper.h

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717

1818
#include "cuvs_ann_bench_utils.h"
1919
#include "cuvs_cagra_wrapper.h"
20-
#include <cuvs/neighbors/mg.hpp>
21-
#include <raft/core/resource/nccl_clique.hpp>
20+
#include <cuvs/neighbors/cagra.hpp>
21+
#include <raft/core/device_resources_snmg.hpp>
2222

2323
namespace cuvs::bench {
2424
using namespace cuvs::neighbors;
@@ -33,21 +33,20 @@ class cuvs_mg_cagra : public algo<T>, public algo_gpu {
3333
using algo<T>::dim_;
3434

3535
struct build_param : public cuvs::bench::cuvs_cagra<T, IdxT>::build_param {
36-
cuvs::neighbors::mg::distribution_mode mode;
36+
cuvs::neighbors::distribution_mode mode;
3737
};
3838

3939
struct search_param : public cuvs::bench::cuvs_cagra<T, IdxT>::search_param {
40-
cuvs::neighbors::mg::sharded_merge_mode merge_mode;
40+
cuvs::neighbors::sharded_merge_mode merge_mode;
4141
};
4242

4343
cuvs_mg_cagra(Metric metric, int dim, const build_param& param, int concurrent_searches = 1)
44-
: algo<T>(metric, dim), index_params_(param)
44+
: algo<T>(metric, dim), index_params_(param), clique_()
4545
{
4646
index_params_.cagra_params.metric = parse_metric_type(metric);
4747
index_params_.ivf_pq_build_params->metric = parse_metric_type(metric);
4848

49-
// init nccl clique outside as to not affect benchmark
50-
const raft::comms::nccl_clique& clique = raft::resource::get_nccl_clique(handle_);
49+
clique_.set_memory_pool(80);
5150
}
5251

5352
void build(const T* dataset, size_t nrow) final;
@@ -69,7 +68,7 @@ class cuvs_mg_cagra : public algo<T>, public algo_gpu {
6968

7069
[[nodiscard]] auto get_sync_stream() const noexcept -> cudaStream_t override
7170
{
72-
auto stream = raft::resource::get_cuda_stream(handle_);
71+
auto stream = raft::resource::get_cuda_stream(clique_);
7372
return stream;
7473
}
7574

@@ -87,11 +86,11 @@ class cuvs_mg_cagra : public algo<T>, public algo_gpu {
8786
std::unique_ptr<algo<T>> copy() override;
8887

8988
private:
90-
raft::device_resources handle_;
89+
raft::device_resources_snmg clique_;
9190
float refine_ratio_;
9291
build_param index_params_;
93-
cuvs::neighbors::mg::search_params<cagra::search_params> search_params_;
94-
std::shared_ptr<cuvs::neighbors::mg::index<cuvs::neighbors::cagra::index<T, IdxT>, T, IdxT>>
92+
cuvs::neighbors::mg_search_params<cagra::search_params> search_params_;
93+
std::shared_ptr<cuvs::neighbors::mg_index<cuvs::neighbors::cagra::index<T, IdxT>, T, IdxT>>
9594
index_;
9695
};
9796

@@ -100,14 +99,14 @@ void cuvs_mg_cagra<T, IdxT>::build(const T* dataset, size_t nrow)
10099
{
101100
auto dataset_extents = raft::make_extents<IdxT>(nrow, dim_);
102101
index_params_.prepare_build_params(dataset_extents);
103-
cuvs::neighbors::mg::index_params<cagra::index_params> build_params = index_params_.cagra_params;
104-
build_params.mode = index_params_.mode;
102+
cuvs::neighbors::mg_index_params<cagra::index_params> build_params = index_params_.cagra_params;
103+
build_params.mode = index_params_.mode;
105104

106105
auto dataset_view =
107106
raft::make_host_matrix_view<const T, int64_t, raft::row_major>(dataset, nrow, dim_);
108-
auto idx = cuvs::neighbors::mg::build(handle_, build_params, dataset_view);
107+
auto idx = cuvs::neighbors::cagra::build(clique_, build_params, dataset_view);
109108
index_ =
110-
std::make_shared<cuvs::neighbors::mg::index<cuvs::neighbors::cagra::index<T, IdxT>, T, IdxT>>(
109+
std::make_shared<cuvs::neighbors::mg_index<cuvs::neighbors::cagra::index<T, IdxT>, T, IdxT>>(
111110
std::move(idx));
112111
}
113112

@@ -118,8 +117,7 @@ void cuvs_mg_cagra<T, IdxT>::set_search_param(const search_param_base& param,
118117
const void* filter_bitset)
119118
{
120119
if (filter_bitset != nullptr) { throw std::runtime_error("Filtering is not supported yet."); }
121-
auto sp = dynamic_cast<const search_param&>(param);
122-
// search_params_ = static_cast<mg::search_params<cagra::search_params>>(sp.p);
120+
auto sp = dynamic_cast<const search_param&>(param);
123121
cagra::search_params* search_params_ptr_ = static_cast<cagra::search_params*>(&search_params_);
124122
*search_params_ptr_ = sp.p;
125123
search_params_.merge_mode = sp.merge_mode;
@@ -134,15 +132,15 @@ void cuvs_mg_cagra<T, IdxT>::set_search_dataset(const T* dataset, size_t nrow)
134132
template <typename T, typename IdxT>
135133
void cuvs_mg_cagra<T, IdxT>::save(const std::string& file) const
136134
{
137-
cuvs::neighbors::mg::serialize(handle_, *index_, file);
135+
cuvs::neighbors::cagra::serialize(clique_, *index_, file);
138136
}
139137

140138
template <typename T, typename IdxT>
141139
void cuvs_mg_cagra<T, IdxT>::load(const std::string& file)
142140
{
143141
index_ =
144-
std::make_shared<cuvs::neighbors::mg::index<cuvs::neighbors::cagra::index<T, IdxT>, T, IdxT>>(
145-
std::move(cuvs::neighbors::mg::deserialize_cagra<T, IdxT>(handle_, file)));
142+
std::make_shared<cuvs::neighbors::mg_index<cuvs::neighbors::cagra::index<T, IdxT>, T, IdxT>>(
143+
std::move(cuvs::neighbors::cagra::deserialize<T, IdxT>(clique_, file)));
146144
}
147145

148146
template <typename T, typename IdxT>
@@ -165,8 +163,8 @@ void cuvs_mg_cagra<T, IdxT>::search_base(
165163
auto distances_view =
166164
raft::make_host_matrix_view<float, int64_t, raft::row_major>(distances, batch_size, k);
167165

168-
cuvs::neighbors::mg::search(
169-
handle_, *index_, search_params_, queries_view, neighbors_view, distances_view);
166+
cuvs::neighbors::cagra::search(
167+
clique_, *index_, search_params_, queries_view, neighbors_view, distances_view);
170168
}
171169

172170
template <typename T, typename IdxT>

cpp/bench/ann/src/cuvs/cuvs_mg_ivf_flat_wrapper.h

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818

1919
#include "cuvs_ann_bench_utils.h"
2020
#include "cuvs_ivf_flat_wrapper.h"
21-
#include <cuvs/neighbors/mg.hpp>
22-
#include <raft/core/resource/nccl_clique.hpp>
21+
#include <cuvs/neighbors/ivf_flat.hpp>
22+
#include <raft/core/device_resources_snmg.hpp>
2323

2424
namespace cuvs::bench {
2525
using namespace cuvs::neighbors;
@@ -30,18 +30,18 @@ class cuvs_mg_ivf_flat : public algo<T>, public algo_gpu {
3030
using search_param_base = typename algo<T>::search_param;
3131
using algo<T>::dim_;
3232

33-
using build_param = cuvs::neighbors::mg::index_params<ivf_flat::index_params>;
33+
using build_param = cuvs::neighbors::mg_index_params<ivf_flat::index_params>;
3434

3535
struct search_param : public cuvs::bench::cuvs_ivf_flat<T, IdxT>::search_param {
36-
cuvs::neighbors::mg::sharded_merge_mode merge_mode;
36+
cuvs::neighbors::sharded_merge_mode merge_mode;
3737
};
3838

3939
cuvs_mg_ivf_flat(Metric metric, int dim, const build_param& param)
40-
: algo<T>(metric, dim), index_params_(param)
40+
: algo<T>(metric, dim), index_params_(param), clique_()
4141
{
4242
index_params_.metric = parse_metric_type(metric);
43-
// init nccl clique outside as to not affect benchmark
44-
const raft::comms::nccl_clique& clique = raft::resource::get_nccl_clique(handle_);
43+
44+
clique_.set_memory_pool(80);
4545
}
4646

4747
void build(const T* dataset, size_t nrow) final;
@@ -62,7 +62,7 @@ class cuvs_mg_ivf_flat : public algo<T>, public algo_gpu {
6262

6363
[[nodiscard]] auto get_sync_stream() const noexcept -> cudaStream_t override
6464
{
65-
auto stream = raft::resource::get_cuda_stream(handle_);
65+
auto stream = raft::resource::get_cuda_stream(clique_);
6666
return stream;
6767
}
6868

@@ -73,10 +73,10 @@ class cuvs_mg_ivf_flat : public algo<T>, public algo_gpu {
7373
std::unique_ptr<algo<T>> copy() override;
7474

7575
private:
76-
raft::device_resources handle_;
76+
raft::device_resources_snmg clique_;
7777
build_param index_params_;
78-
cuvs::neighbors::mg::search_params<ivf_flat::search_params> search_params_;
79-
std::shared_ptr<cuvs::neighbors::mg::index<cuvs::neighbors::ivf_flat::index<T, IdxT>, T, IdxT>>
78+
cuvs::neighbors::mg_search_params<ivf_flat::search_params> search_params_;
79+
std::shared_ptr<cuvs::neighbors::mg_index<cuvs::neighbors::ivf_flat::index<T, IdxT>, T, IdxT>>
8080
index_;
8181
};
8282

@@ -85,9 +85,10 @@ void cuvs_mg_ivf_flat<T, IdxT>::build(const T* dataset, size_t nrow)
8585
{
8686
auto dataset_view =
8787
raft::make_host_matrix_view<const T, int64_t, raft::row_major>(dataset, IdxT(nrow), IdxT(dim_));
88-
auto idx = cuvs::neighbors::mg::build(handle_, index_params_, dataset_view);
89-
index_ = std::make_shared<
90-
cuvs::neighbors::mg::index<cuvs::neighbors::ivf_flat::index<T, IdxT>, T, IdxT>>(std::move(idx));
88+
auto idx = cuvs::neighbors::ivf_flat::build(clique_, index_params_, dataset_view);
89+
index_ =
90+
std::make_shared<cuvs::neighbors::mg_index<cuvs::neighbors::ivf_flat::index<T, IdxT>, T, IdxT>>(
91+
std::move(idx));
9192
}
9293

9394
template <typename T, typename IdxT>
@@ -107,15 +108,15 @@ void cuvs_mg_ivf_flat<T, IdxT>::set_search_param(const search_param_base& param,
107108
template <typename T, typename IdxT>
108109
void cuvs_mg_ivf_flat<T, IdxT>::save(const std::string& file) const
109110
{
110-
cuvs::neighbors::mg::serialize(handle_, *index_, file);
111+
cuvs::neighbors::ivf_flat::serialize(clique_, *index_, file);
111112
}
112113

113114
template <typename T, typename IdxT>
114115
void cuvs_mg_ivf_flat<T, IdxT>::load(const std::string& file)
115116
{
116-
index_ = std::make_shared<
117-
cuvs::neighbors::mg::index<cuvs::neighbors::ivf_flat::index<T, IdxT>, T, IdxT>>(
118-
std::move(cuvs::neighbors::mg::deserialize_flat<T, IdxT>(handle_, file)));
117+
index_ =
118+
std::make_shared<cuvs::neighbors::mg_index<cuvs::neighbors::ivf_flat::index<T, IdxT>, T, IdxT>>(
119+
std::move(cuvs::neighbors::ivf_flat::deserialize<T, IdxT>(clique_, file)));
119120
}
120121

121122
template <typename T, typename IdxT>
@@ -135,8 +136,8 @@ void cuvs_mg_ivf_flat<T, IdxT>::search(
135136
auto distances_view = raft::make_host_matrix_view<float, int64_t, raft::row_major>(
136137
distances, IdxT(batch_size), IdxT(k));
137138

138-
cuvs::neighbors::mg::search(
139-
handle_, *index_, search_params_, queries_view, neighbors_view, distances_view);
139+
cuvs::neighbors::ivf_flat::search(
140+
clique_, *index_, search_params_, queries_view, neighbors_view, distances_view);
140141
}
141142

142143
} // namespace cuvs::bench

0 commit comments

Comments
 (0)