提交 cf1e0398 编写于 作者: H Heisenberg

fix issue 527

上级 727ad14d
...@@ -21,6 +21,7 @@ Please mark all change in change log and use the ticket from JIRA. ...@@ -21,6 +21,7 @@ Please mark all change in change log and use the ticket from JIRA.
- \#440 - Server cannot startup with gpu_resource_config.enable=false in GPU version - \#440 - Server cannot startup with gpu_resource_config.enable=false in GPU version
- \#458 - Index data is not compatible between 0.5 and 0.6 - \#458 - Index data is not compatible between 0.5 and 0.6
- \#486 - gpu no usage during index building - \#486 - gpu no usage during index building
- \#527 - faiss benchmark not compatible with faiss 1.6.0
## Feature ## Feature
- \#12 - Pure CPU version for Milvus - \#12 - Pure CPU version for Milvus
......
...@@ -112,6 +112,6 @@ if (KNOWHERE_GPU_VERSION) ...@@ -112,6 +112,6 @@ if (KNOWHERE_GPU_VERSION)
install(TARGETS test_customized_index DESTINATION unittest) install(TARGETS test_customized_index DESTINATION unittest)
endif () endif ()
#add_subdirectory(faiss_ori) #add_subdirectory(faiss_ori)
#add_subdirectory(faiss_benchmark) add_subdirectory(faiss_benchmark)
add_subdirectory(test_nsg) add_subdirectory(test_nsg)
...@@ -15,6 +15,8 @@ ...@@ -15,6 +15,8 @@
// specific language governing permissions and limitations // specific language governing permissions and limitations
// under the License. // under the License.
#define USE_FAISS_V0_2_1 0
#include <gtest/gtest.h> #include <gtest/gtest.h>
#include <hdf5.h> #include <hdf5.h>
...@@ -26,30 +28,29 @@ ...@@ -26,30 +28,29 @@
#include <cstdio> #include <cstdio>
#include <vector> #include <vector>
#define USE_FAISS_V1_5_3 0 #include <faiss/AutoTune.h>
#include <faiss/Index.h>
#include <faiss/IndexIVF.h>
#include <faiss/gpu/GpuIndexFlat.h>
#include <faiss/gpu/StandardGpuResources.h>
#include <faiss/index_io.h>
#if USE_FAISS_V1_5_3 #if USE_FAISS_V0_2_1
#include <faiss/gpu/GpuAutoTune.h> #include <faiss/gpu/GpuAutoTune.h>
#include <faiss/utils.h> #include <faiss/utils.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <cstdlib> #include <cstdlib>
#include <cstring> #include <cstring>
#else #else
#include <faiss/gpu/GpuCloner.h> #include <faiss/gpu/GpuCloner.h>
#include <faiss/index_factory.h> #include <faiss/index_factory.h>
#include <faiss/utils/distances.h> #include <faiss/utils/distances.h>
#endif #endif
#include <faiss/AutoTune.h>
#include <faiss/Index.h>
#include <faiss/IndexIVF.h>
#include <faiss/gpu/GpuIndexFlat.h>
#include <faiss/gpu/StandardGpuResources.h>
#include <faiss/index_io.h>
#ifdef CUSTOMIZATION #ifdef CUSTOMIZATION
#include <faiss/gpu/GpuIndexIVFSQHybrid.h> #include <faiss/gpu/GpuIndexIVFSQHybrid.h>
#else
#include <faiss/gpu/GpuIndexIVF.h>
#endif #endif
/***************************************************** /*****************************************************
...@@ -295,10 +296,12 @@ load_base_data(faiss::Index*& index, const std::string& ann_test_name, const std ...@@ -295,10 +296,12 @@ load_base_data(faiss::Index*& index, const std::string& ann_test_name, const std
cpu_index = faiss::gpu::index_gpu_to_cpu(gpu_index); cpu_index = faiss::gpu::index_gpu_to_cpu(gpu_index);
delete gpu_index; delete gpu_index;
#ifdef CUSTOMIZATION
faiss::IndexIVF* cpu_ivf_index = dynamic_cast<faiss::IndexIVF*>(cpu_index); faiss::IndexIVF* cpu_ivf_index = dynamic_cast<faiss::IndexIVF*>(cpu_index);
if (cpu_ivf_index != nullptr) { if (cpu_ivf_index != nullptr) {
cpu_ivf_index->to_readonly(); cpu_ivf_index->to_readonly();
} }
#endif
printf("[%.3f s] Writing index file: %s\n", elapsed() - t0, index_file_name.c_str()); printf("[%.3f s] Writing index file: %s\n", elapsed() - t0, index_file_name.c_str());
faiss::write_index(cpu_index, index_file_name.c_str()); faiss::write_index(cpu_index, index_file_name.c_str());
...@@ -374,13 +377,15 @@ test_with_nprobes(const std::string& ann_test_name, const std::string& index_key ...@@ -374,13 +377,15 @@ test_with_nprobes(const std::string& ann_test_name, const std::string& index_key
faiss::Index *gpu_index, *index; faiss::Index *gpu_index, *index;
if (query_mode != MODE_CPU) { if (query_mode != MODE_CPU) {
faiss::gpu::GpuClonerOptions option; faiss::gpu::GpuClonerOptions option;
#ifdef CUSTOMIZATION
option.allInGpu = true; option.allInGpu = true;
faiss::IndexComposition index_composition; faiss::IndexComposition index_composition;
index_composition.index = cpu_index; index_composition.index = cpu_index;
index_composition.quantizer = nullptr; index_composition.quantizer = nullptr;
#endif
switch (query_mode) { switch (query_mode) {
#ifdef CUSTOMIZATION
case MODE_MIX: { case MODE_MIX: {
index_composition.mode = 1; // 0: all data, 1: copy quantizer, 2: copy data index_composition.mode = 1; // 0: all data, 1: copy quantizer, 2: copy data
...@@ -403,7 +408,9 @@ test_with_nprobes(const std::string& ann_test_name, const std::string& index_key ...@@ -403,7 +408,9 @@ test_with_nprobes(const std::string& ann_test_name, const std::string& index_key
index = cpu_index; index = cpu_index;
break; break;
} }
#endif
case MODE_GPU: case MODE_GPU:
#ifdef CUSTOMIZATION
index_composition.mode = 0; // 0: all data, 1: copy quantizer, 2: copy data index_composition.mode = 0; // 0: all data, 1: copy quantizer, 2: copy data
// warm up the transmission // warm up the transmission
...@@ -412,6 +419,14 @@ test_with_nprobes(const std::string& ann_test_name, const std::string& index_key ...@@ -412,6 +419,14 @@ test_with_nprobes(const std::string& ann_test_name, const std::string& index_key
copy_time = elapsed(); copy_time = elapsed();
gpu_index = faiss::gpu::index_cpu_to_gpu(&res, GPU_DEVICE_IDX, &index_composition, &option); gpu_index = faiss::gpu::index_cpu_to_gpu(&res, GPU_DEVICE_IDX, &index_composition, &option);
#else
// warm up the transmission
gpu_index = faiss::gpu::index_cpu_to_gpu(&res, GPU_DEVICE_IDX, cpu_index, &option);
delete gpu_index;
copy_time = elapsed();
gpu_index = faiss::gpu::index_cpu_to_gpu(&res, GPU_DEVICE_IDX, cpu_index, &option);
#endif
copy_time = elapsed() - copy_time; copy_time = elapsed() - copy_time;
printf("[%.3f s] Copy data completed, cost %f s\n", elapsed() - t0, copy_time); printf("[%.3f s] Copy data completed, cost %f s\n", elapsed() - t0, copy_time);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册