Skip to content
Merged
Show file tree
Hide file tree
Changes from 67 commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
36afa1a
initial imp of training bm
meiravgri Nov 4, 2025
3eee014
make bm_files general for other algs
meiravgri Nov 4, 2025
6636ae8
replace std::formtat only supported from gcc13 with ostringstream
meiravgri Nov 4, 2025
dda6487
format
meiravgri Nov 4, 2025
d6d9149
revrt assert
meiravgri Nov 4, 2025
8491ae9
intialize quantBits
meiravgri Nov 4, 2025
3d4f9ba
move iterawtion logic to runTrainBMIteration
meiravgri Nov 4, 2025
10e6184
assert depdnding on HAVE_SVS_LVQ
meiravgri Nov 4, 2025
a2dad0c
sepearate non compression and compression bm
meiravgri Nov 4, 2025
af8e7d9
TO REVERT !!! test abort
meiravgri Nov 4, 2025
b6cd5c6
fix if else
meiravgri Nov 4, 2025
dfba28f
revrt timeoutgurard vhanges
meiravgri Nov 4, 2025
b90a085
dont pause after training to see how it affrects performance
meiravgri Nov 4, 2025
7c4efb4
fix #ifdef HAVE_SVS_LVQ to #if HAVE_SVS_LVQ
meiravgri Nov 4, 2025
39f66dc
use pause timers its faster
meiravgri Nov 4, 2025
f43df17
do 3 iter instread of 5 and test if results are stable
meiravgri Nov 4, 2025
f4f2b57
Merge remote-tracking branch 'origin/main' into meiravg_svs_training_bm
meiravgri Nov 5, 2025
74f7e67
use 5 again
meiravgri Nov 5, 2025
11b8c80
fix download all all script
meiravgri Nov 5, 2025
e5c82f9
fp16 bm
meiravgri Nov 5, 2025
f558d63
remove 100K from fp32
meiravgri Nov 5, 2025
c97b329
Merge branch 'main' into meiravg_svs_training_bm
meiravgri Nov 6, 2025
c3f72db
increase timeout
meiravgri Nov 6, 2025
59ac591
try bigger machine
meiravgri Nov 6, 2025
4d6d992
try a bigger machine
meiravgri Nov 6, 2025
acc8036
try 2 iter
meiravgri Nov 6, 2025
1f4e574
unify bm_training_initialize_fp32.h and bm_training_initialize_fp16.h…
meiravgri Nov 6, 2025
219bd4a
reevet timeout to 10
meiravgri Nov 6, 2025
b24d4cf
move CreateTieredSVSParams and verifyNumThreads to svs params
meiravgri Nov 6, 2025
3741d3f
revert increease machine size
meiravgri Nov 6, 2025
d283c08
change assert to log
meiravgri Nov 6, 2025
ab52cfc
fix
meiravgri Nov 6, 2025
36d3656
fix2
meiravgri Nov 6, 2025
a955f34
format
meiravgri Nov 6, 2025
d1a22f4
introduce bm_svs
meiravgri Nov 6, 2025
19c3826
add tiered
meiravgri Nov 9, 2025
2099998
introduce setUpdateTriggerThreshold in BUILD_TESTS
meiravgri Nov 9, 2025
9d9e5cc
fix comment
meiravgri Nov 9, 2025
0badc34
remove lock
meiravgri Nov 9, 2025
98cdae8
format
meiravgri Nov 9, 2025
0807a9f
fix num threads in addlabelinplace
meiravgri Nov 9, 2025
a6d1382
use train svs instead
meiravgri Nov 9, 2025
3bee9f2
Merge branch 'meiravg_svs_training_bm' into meiravg-svs_basic_bm
meiravgri Nov 9, 2025
1a18235
format
meiravgri Nov 9, 2025
42777d3
small fixes
meiravgri Nov 9, 2025
dc19ad4
rename BM_VecSimSVSTrain->BM_VecSimSVS
meiravgri Nov 9, 2025
4805632
remove unrelated
meiravgri Nov 9, 2025
0d4f441
Merge branch 'meiravg_svs_training_bm' into meiravg-svs_basic_bm
meiravgri Nov 9, 2025
d736ca2
align with new name
meiravgri Nov 9, 2025
0de5cae
revert unnecessary changes in bm_vecsim_index
meiravgri Nov 9, 2025
55c6005
fix include
meiravgri Nov 9, 2025
271dd53
fix quantbits
meiravgri Nov 9, 2025
9813add
extract general
meiravgri Nov 9, 2025
21f8d9c
fix missing main on LVQ cpp
meiravgri Nov 10, 2025
b64c456
replace vectors file
meiravgri Nov 10, 2025
18b7ccf
run only BENCHMARK_MAIN
meiravgri Nov 10, 2025
a0faa10
try dummy for mac
meiravgri Nov 10, 2025
da0f834
fix DATA_TYPE_INDEX_T definition LVQ
meiravgri Nov 10, 2025
3e062e8
quantBits is now static and needs to be intizlied by the CPP file
meiravgri Nov 10, 2025
5a8394f
TO REVERT:
meiravgri Nov 10, 2025
e742636
REVERT svs.h change consolidation_threshold
meiravgri Nov 10, 2025
5ed3e89
Merge branch 'main' into meiravg-svs_basic_bm
meiravgri Nov 10, 2025
67912d0
revert unrelated changes
meiravgri Nov 10, 2025
f48f149
fix LVQ8 cpp for non LVQ
meiravgri Nov 10, 2025
0219063
foirmat
meiravgri Nov 10, 2025
f70da31
cleanups
meiravgri Nov 10, 2025
719671c
remove new line in cmake
meiravgri Nov 10, 2025
a4c95f5
Update tests/benchmark/bm_vecsim_svs.h
meiravgri Nov 11, 2025
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 change: 1 addition & 0 deletions .github/workflows/benchmark.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ on:
- bm-updated-fp32-single
- bm-svs-train-fp32
- bm-svs-train-fp16
- bm-basics-svs-fp32-single
- bm-spaces
description: 'Benchmarks set to run'
default: benchmarks-all
Expand Down
30 changes: 29 additions & 1 deletion src/VecSim/index_factories/tiered_factory.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#include "VecSim/memory/vecsim_malloc.h"
#include "VecSim/vec_sim_index.h"
#include "VecSim/algorithms/hnsw/hnsw_tiered.h"
#include "VecSim/algorithms/svs/svs_tiered.h"
#include "VecSim/algorithms/brute_force/brute_force.h"
#include "VecSim/index_factories/factory_utils.h"

Expand Down Expand Up @@ -58,8 +59,35 @@ VecSimIndex *NewIndex(const TieredIndexParams *params, HNSWIndex<DataType, DistT
// verification of the backend index algorithm. To be removed once a proper verification is
// introduced.
namespace TieredSVSFactory {
BFParams NewBFParams(const TieredIndexParams *params);

#if HAVE_SVS
template <typename DataType>
inline VecSimIndex *NewIndex(const TieredIndexParams *params,
VecSimIndexAbstract<DataType, float> *svs_index) {
// Initialize brute force index.
BFParams bf_params = {.type = svs_index->getType(),
.dim = svs_index->getDim(),
.metric = svs_index->getMetric(),
.multi = svs_index->isMultiValue(),
.blockSize = svs_index->getBlockSize()};

AbstractIndexInitParams abstractInitParams =
VecSimFactory::NewAbstractInitParams(&bf_params, params->primaryIndexParams->logCtx, false);
assert(svs_index->getInputBlobSize() == abstractInitParams.storedDataSize);
assert(svs_index->getStoredDataSize() == abstractInitParams.storedDataSize);
auto frontendIndex = static_cast<BruteForceIndex<DataType, float> *>(
BruteForceFactory::NewIndex(&bf_params, abstractInitParams, false));

// Create new tiered svs index
std::shared_ptr<VecSimAllocator> management_layer_allocator =
VecSimAllocator::newVecsimAllocator();

return new (management_layer_allocator)
TieredSVSIndex<DataType>(svs_index, frontendIndex, *params, management_layer_allocator);
}
#endif
BFParams NewBFParams(const TieredIndexParams *params);
} // namespace TieredSVSFactory
#endif

}; // namespace TieredFactory
6 changes: 6 additions & 0 deletions tests/benchmark/benchmarks.sh
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ if [ -z "$BM_TYPE" ] || [ "$BM_TYPE" = "benchmarks-all" ]; then
echo updated_index_single_fp32
echo svs_training_fp32
echo svs_training_fp16
echo basics_svs_single_fp32
echo basics_svs_single_fp32_LVQ8
echo spaces_fp32
echo spaces_fp64
echo spaces_bf16
Expand Down Expand Up @@ -87,10 +89,14 @@ elif [ "$BM_TYPE" = "bm-batch-iter-uint8-multi" ] ; then
elif [ "$BM_TYPE" = "bm-updated-fp32-single" ] ; then
echo updated_index_single_fp32

# SVS benchmarks
elif [ "$BM_TYPE" = "bm-svs-train-fp32" ] ; then
echo svs_training_fp32
elif [ "$BM_TYPE" = "bm-svs-train-fp16" ] ; then
echo svs_training_fp16
elif [ "$BM_TYPE" = "bm-basics-svs-fp32-single" ] ; then
echo basics_svs_single_fp32
echo basics_svs_single_fp32_LVQ8

# Spaces benchmarks
elif [ "$BM_TYPE" = "bm-spaces" ] ; then
Expand Down
3 changes: 3 additions & 0 deletions tests/benchmark/bm_files.sh
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,9 @@ elif [ "$BM_TYPE" = "bm-svs-train-fp32" ] \
then
file_name="training"
alg="svs"
elif [ "$BM_TYPE" = "bm-basics-svs-fp32-single" ]; then
file_name="basic_fp32"
alg="svs"
else
echo "No files to download for BM_TYPE=$BM_TYPE"
exit 0
Expand Down
45 changes: 45 additions & 0 deletions tests/benchmark/bm_initialization/bm_basics_svs_initialize_fp32.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
/*
* Copyright (c) 2006-Present, Redis Ltd.
* All rights reserved.
*
* Licensed under your choice of the Redis Source Available License 2.0
* (RSALv2); or (b) the Server Side Public License v1 (SSPLv1); or (c) the
* GNU Affero General Public License v3 (AGPLv3).
*/

#pragma once
/**************************************
Define and register tests
NOTE: benchmarks' tests order can affect their results. Please add new benchmarks at the end of
the file.
***************************************/
// deleteLabel one by one
BENCHMARK_TEMPLATE_DEFINE_F(BM_VecSimSVS, BM_FUNC_NAME(BM_RunGC), DATA_TYPE_INDEX_T)
(benchmark::State &st) { RunGC(st); }
BENCHMARK_REGISTER_F(BM_VecSimSVS, BM_FUNC_NAME(BM_RunGC))
->Unit(benchmark::kMillisecond)
->Iterations(1)
->Arg(50)
->Arg(100)
->Arg(250)
->Arg(500)
->ArgName("num_deletions");

// AddLabel one by one
BENCHMARK_TEMPLATE_DEFINE_F(BM_VecSimSVS, BM_FUNC_NAME(BM_AddLabelOneByOne), DATA_TYPE_INDEX_T)
(benchmark::State &st) { AddLabel(st); }
BENCHMARK_REGISTER_F(BM_VecSimSVS, BM_FUNC_NAME(BM_AddLabelOneByOne))
->Unit(benchmark::kMillisecond)
->Iterations(BM_VecSimGeneral::block_size);

// Add vectors in batches via tiered index
BENCHMARK_TEMPLATE_DEFINE_F(BM_VecSimSVS, BM_FUNC_NAME(BM_TriggerUpdateTiered), DATA_TYPE_INDEX_T)
(benchmark::State &st) { TriggerUpdateTiered(st); }
BENCHMARK_REGISTER_F(BM_VecSimSVS, BM_FUNC_NAME(BM_TriggerUpdateTiered))
->Unit(benchmark::kMillisecond)
->Iterations(1)
->ArgsProduct({{static_cast<long int>(BM_VecSimGeneral::block_size), 5000,
static_cast<long int>(10 * BM_VecSimGeneral::block_size)},
{2, 4, 8}})
->ArgNames({"update_threshold", "thread_count"})
->MeasureProcessCPUTime();
6 changes: 3 additions & 3 deletions tests/benchmark/bm_utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,12 @@ CreateTieredSVSParams(VecSimParams &svs_params, tieredIndexMock &mock_thread_poo

template <typename data_t>
static void verifyNumThreads(TieredSVSIndex<data_t> *tiered_index, size_t expected_num_threads,
size_t expected_capcity) {
size_t expected_capcity, std::string msg = "") {
ASSERT_EQ(tiered_index->GetSVSIndex()->getThreadPoolCapacity(), expected_capcity)
<< "thread pool capacity mismatch";
<< msg << ": thread pool capacity mismatch";
size_t num_reserved_threads = tiered_index->GetSVSIndex()->getNumThreads();
if (num_reserved_threads < expected_num_threads) {
std::cout << "WARNING: last reserved threads (" << num_reserved_threads
std::cout << msg << ": WARNING: last reserved threads (" << num_reserved_threads
<< ") is less than expected (" << expected_num_threads << ")." << std::endl;
}
}
Expand Down
Loading
Loading