提交 be8a9452 编写于 作者: X xj.lin

Merge branch 'cpu-version' into jinhai


Former-commit-id: 17a38d07e55b49888cb2abdd6aed3eca85e7a5f9
...@@ -14,6 +14,10 @@ set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -O0 -g") ...@@ -14,6 +14,10 @@ set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -O0 -g")
message("CUDA_TOOLKIT_ROOT_DIR=${CUDA_TOOLKIT_ROOT_DIR}") message("CUDA_TOOLKIT_ROOT_DIR=${CUDA_TOOLKIT_ROOT_DIR}")
message("CUDA_NVCC_FLAGS=${CUDA_NVCC_FLAGS}") message("CUDA_NVCC_FLAGS=${CUDA_NVCC_FLAGS}")
if (GPU_VERSION STREQUAL "ON")
add_definitions("-DGPU_VERSION")
endif ()
set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD 14)
if(CMAKE_SYSTEM_PROCESSOR MATCHES "(x86)|(X86)|(amd64)|(AMD64)") if(CMAKE_SYSTEM_PROCESSOR MATCHES "(x86)|(X86)|(amd64)|(AMD64)")
......
...@@ -2,9 +2,10 @@ ...@@ -2,9 +2,10 @@
BUILD_TYPE="Debug" BUILD_TYPE="Debug"
BUILD_UNITTEST="off" BUILD_UNITTEST="off"
BUILD_GPU="OFF"
INSTALL_PREFIX=$(pwd)/megasearch INSTALL_PREFIX=$(pwd)/megasearch
while getopts "p:t:uh" arg while getopts "p:t:uhg" arg
do do
case $arg in case $arg in
t) t)
...@@ -17,6 +18,9 @@ do ...@@ -17,6 +18,9 @@ do
p) p)
INSTALL_PREFIX=$OPTARG INSTALL_PREFIX=$OPTARG
;; ;;
g)
BUILD_GPU="ON"
;;
h) # help h) # help
echo " echo "
...@@ -51,6 +55,7 @@ CMAKE_CMD="cmake -DBUILD_UNIT_TEST=${BUILD_UNITTEST} \ ...@@ -51,6 +55,7 @@ CMAKE_CMD="cmake -DBUILD_UNIT_TEST=${BUILD_UNITTEST} \
-DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX}
-DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
-DCMAKE_CUDA_COMPILER=${CUDA_COMPILER} \ -DCMAKE_CUDA_COMPILER=${CUDA_COMPILER} \
-DGPU_VERSION=${BUILD_GPU} \
$@ ../" $@ ../"
echo ${CMAKE_CMD} echo ${CMAKE_CMD}
......
...@@ -30,23 +30,35 @@ set(vecwise_engine_src ...@@ -30,23 +30,35 @@ set(vecwise_engine_src
include_directories(/usr/include) include_directories(/usr/include)
include_directories(/usr/local/cuda/include) include_directories(/usr/local/cuda/include)
find_library(cuda_library cudart cublas HINTS /usr/local/cuda/lib64)
cuda_add_library(vecwise_engine STATIC ${vecwise_engine_src}) if (GPU_VERSION STREQUAL "ON")
link_directories(/usr/local/cuda/lib64)
set(engine_libs set(engine_libs
pthread pthread
libfaiss.a libfaiss.a
libgomp.a libgomp.a
libopenblas.a libopenblas.a
libgfortran.a libgfortran.a
libquadmath.a libquadmath.a
cudart cudart
cublas cublas
libsqlite3.a libsqlite3.a
)
else()
set(engine_libs
pthread
libfaiss.a
libgomp.a
libopenblas.a
libgfortran.a
libquadmath.a
libsqlite3.a
) )
endif ()
cuda_add_library(vecwise_engine STATIC ${vecwise_engine_src})
target_link_libraries(vecwise_engine ${engine_libs} ${cuda_library}) target_link_libraries(vecwise_engine ${engine_libs})
add_executable(vecwise_server add_executable(vecwise_server
${config_files} ${config_files}
...@@ -71,6 +83,7 @@ set(server_libs ...@@ -71,6 +83,7 @@ set(server_libs
libz.a libz.a
libzstd.a libzstd.a
liblz4.a liblz4.a
dl
) )
target_link_libraries(vecwise_server ${server_libs}) target_link_libraries(vecwise_server ${server_libs})
......
...@@ -19,7 +19,14 @@ DB::~DB() {} ...@@ -19,7 +19,14 @@ DB::~DB() {}
void DB::Open(const Options& options, DB** dbptr) { void DB::Open(const Options& options, DB** dbptr) {
*dbptr = nullptr; *dbptr = nullptr;
*dbptr = DBFactory::Build(options);
#ifdef GPU_VERSION
std::string default_index_type{"Faiss,IVF"};
#else
std::string default_index_type{"Faiss,IDMap"};
#endif
*dbptr = DBFactory::Build(options, default_index_type);
return; return;
} }
......
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
#include <thread> #include <thread>
#include <iostream> #include <iostream>
#include <cstring> #include <cstring>
#include <wrapper/Topk.h>
#include <easylogging++.h> #include <easylogging++.h>
#include <cache/CpuCacheMgr.h> #include <cache/CpuCacheMgr.h>
...@@ -142,12 +141,27 @@ Status DBImpl<EngineT>::search(const std::string& group_id, size_t k, size_t nq, ...@@ -142,12 +141,27 @@ Status DBImpl<EngineT>::search(const std::string& group_id, size_t k, size_t nq,
} }
}; };
auto topk_cpu = [](const std::vector<float> &input_data,
const int &k,
float *output_distence,
long *output_ids) -> void {
std::map<float, int> inverted_table;
for (int i = 0; i < input_data.size(); ++i) {
inverted_table[input_data[i]] = i;
}
int count = 0;
for (auto it = inverted_table.begin(); it != inverted_table.end() && count < k; ++it, ++count) {
output_distence[count] = it->first;
output_ids[count] = it->second;
}
};
auto cluster_topk = [&]() -> void { auto cluster_topk = [&]() -> void {
QueryResult res; QueryResult res;
for (auto &result_pair : batchresult) { for (auto &result_pair : batchresult) {
auto &dis = result_pair.second; auto &dis = result_pair.second;
auto &nns = result_pair.first; auto &nns = result_pair.first;
TopK(dis.data(), dis.size(), k, output_distence, output_ids); topk_cpu(dis, k, output_distence, output_ids);
for (int i = 0; i < k; ++i) { for (int i = 0; i < k; ++i) {
res.emplace_back(nns[output_ids[i]]); // mapping res.emplace_back(nns[output_ids[i]]); // mapping
} }
......
...@@ -4,7 +4,8 @@ ...@@ -4,7 +4,8 @@
// Proprietary and confidential. // Proprietary and confidential.
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
#ifdef CUDA_VERSION // TODO: maybe support static search
#ifdef GPU_VERSION
#include "faiss/gpu/GpuAutoTune.h" #include "faiss/gpu/GpuAutoTune.h"
#include "faiss/gpu/StandardGpuResources.h" #include "faiss/gpu/StandardGpuResources.h"
#include "faiss/gpu/utils/DeviceUtils.h" #include "faiss/gpu/utils/DeviceUtils.h"
......
...@@ -13,8 +13,6 @@ ...@@ -13,8 +13,6 @@
#include <fstream> #include <fstream>
#include "faiss/AutoTune.h" #include "faiss/AutoTune.h"
#include "faiss/AuxIndexStructures.h"
#include "faiss/gpu/GpuAutoTune.h"
#include "faiss/index_io.h" #include "faiss/index_io.h"
#include "Operand.h" #include "Operand.h"
......
...@@ -6,9 +6,12 @@ ...@@ -6,9 +6,12 @@
#include "mutex" #include "mutex"
#ifdef GPU_VERSION
#include <faiss/gpu/StandardGpuResources.h> #include <faiss/gpu/StandardGpuResources.h>
#include "faiss/gpu/GpuIndexIVFFlat.h" #include "faiss/gpu/GpuIndexIVFFlat.h"
#include "faiss/gpu/GpuAutoTune.h" #include "faiss/gpu/GpuAutoTune.h"
#endif
#include "faiss/IndexFlat.h" #include "faiss/IndexFlat.h"
#include "IndexBuilder.h" #include "IndexBuilder.h"
...@@ -34,6 +37,7 @@ Index_ptr IndexBuilder::build_all(const long &nb, ...@@ -34,6 +37,7 @@ Index_ptr IndexBuilder::build_all(const long &nb,
const long &nt, const long &nt,
const float *xt) { const float *xt) {
std::shared_ptr<faiss::Index> host_index = nullptr; std::shared_ptr<faiss::Index> host_index = nullptr;
#ifdef GPU_VERSION
{ {
// TODO: list support index-type. // TODO: list support index-type.
faiss::Index *ori_index = faiss::index_factory(opd_->d, opd_->get_index_type(nb).c_str()); faiss::Index *ori_index = faiss::index_factory(opd_->d, opd_->get_index_type(nb).c_str());
...@@ -52,6 +56,17 @@ Index_ptr IndexBuilder::build_all(const long &nb, ...@@ -52,6 +56,17 @@ Index_ptr IndexBuilder::build_all(const long &nb,
delete device_index; delete device_index;
delete ori_index; delete ori_index;
} }
#else
{
faiss::Index *index = faiss::index_factory(opd_->d, opd_->get_index_type(nb).c_str());
if (!index->is_trained) {
nt == 0 || xt == nullptr ? index->train(nb, xb)
: index->train(nt, xt);
}
index->add_with_ids(nb, xb, ids);
host_index.reset(index);
}
#endif
return std::make_shared<Index>(host_index); return std::make_shared<Index>(host_index);
} }
......
...@@ -48,7 +48,7 @@ target_link_libraries(wrapper_test ${unittest_libs} ${wrapper_libs}) ...@@ -48,7 +48,7 @@ target_link_libraries(wrapper_test ${unittest_libs} ${wrapper_libs})
set(topk_test_src set(topk_test_src
topk_test.cpp topk_test.cpp
${CMAKE_SOURCE_DIR}/src/wrapper/Topk.cu) ${CMAKE_SOURCE_DIR}/src/wrapper/gpu/Topk.cu)
cuda_add_executable(topk_test ${topk_test_src}) #cuda_add_executable(topk_test ${topk_test_src})
target_link_libraries(topk_test ${unittest_libs} ${faiss_libs}) #target_link_libraries(topk_test ${unittest_libs} ${faiss_libs})
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
#include <gtest/gtest.h> #include <gtest/gtest.h>
#include "wrapper/Topk.h" #include "wrapper/gpu/Topk.h"
using namespace zilliz::vecwise::engine; using namespace zilliz::vecwise::engine;
......
...@@ -7,7 +7,7 @@ include_directories(../../src) ...@@ -7,7 +7,7 @@ include_directories(../../src)
include_directories(/usr/include) include_directories(/usr/include)
include_directories(/usr/local/cuda/include) include_directories(/usr/local/cuda/include)
find_library(cuda_library cudart cublas HINTS /usr/local/cuda/lib64) link_directories(/usr/local/cuda/lib64)
aux_source_directory(../../src/config config_files) aux_source_directory(../../src/config config_files)
aux_source_directory(../../src/cache cache_srcs) aux_source_directory(../../src/cache cache_srcs)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册