提交 bf69d10f 编写于 作者: Z Zhiru Zhu

add find faiss

上级 dd7ee512
...@@ -117,7 +117,7 @@ CMAKE_CMD="cmake \ ...@@ -117,7 +117,7 @@ CMAKE_CMD="cmake \
-DCUSTOMIZATION=${CUSTOMIZATION} \ -DCUSTOMIZATION=${CUSTOMIZATION} \
-DFAISS_URL=${CUSTOMIZED_FAISS_URL} \ -DFAISS_URL=${CUSTOMIZED_FAISS_URL} \
-DMILVUS_GPU_VERSION=${GPU_VERSION} \ -DMILVUS_GPU_VERSION=${GPU_VERSION} \
-DBUILD_FAISS_WITH_MKL=${WITH_MKL} \ -DFAISS_WITH_MKL=${WITH_MKL} \
../" ../"
echo ${CMAKE_CMD} echo ${CMAKE_CMD}
${CMAKE_CMD} ${CMAKE_CMD}
......
...@@ -24,7 +24,7 @@ include_directories(${MILVUS_ENGINE_SRC}/grpc/gen-status) ...@@ -24,7 +24,7 @@ include_directories(${MILVUS_ENGINE_SRC}/grpc/gen-status)
include_directories(${MILVUS_ENGINE_SRC}/grpc/gen-milvus) include_directories(${MILVUS_ENGINE_SRC}/grpc/gen-milvus)
add_subdirectory(index) add_subdirectory(index)
if (BUILD_FAISS_WITH_MKL) if (FAISS_WITH_MKL)
add_compile_definitions("WITH_MKL") add_compile_definitions("WITH_MKL")
endif () endif ()
......
...@@ -5,7 +5,7 @@ BUILD_UNITTEST="OFF" ...@@ -5,7 +5,7 @@ BUILD_UNITTEST="OFF"
INSTALL_PREFIX=$(pwd)/cmake_build INSTALL_PREFIX=$(pwd)/cmake_build
MAKE_CLEAN="OFF" MAKE_CLEAN="OFF"
PROFILING="OFF" PROFILING="OFF"
BUILD_FAISS_WITH_MKL="OFF" FAISS_WITH_MKL="OFF"
USE_JFROG_CACHE="OFF" USE_JFROG_CACHE="OFF"
while getopts "p:d:t:uhrcgmj" arg while getopts "p:d:t:uhrcgmj" arg
...@@ -31,7 +31,7 @@ do ...@@ -31,7 +31,7 @@ do
PROFILING="ON" PROFILING="ON"
;; ;;
m) m)
BUILD_FAISS_WITH_MKL="ON" FAISS_WITH_MKL="ON"
;; ;;
j) j)
USE_JFROG_CACHE="ON" USE_JFROG_CACHE="ON"
...@@ -74,7 +74,7 @@ if [[ ${MAKE_CLEAN} == "ON" ]]; then ...@@ -74,7 +74,7 @@ if [[ ${MAKE_CLEAN} == "ON" ]]; then
-DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
-DCMAKE_CUDA_COMPILER=${CUDA_COMPILER} \ -DCMAKE_CUDA_COMPILER=${CUDA_COMPILER} \
-DMILVUS_ENABLE_PROFILING=${PROFILING} \ -DMILVUS_ENABLE_PROFILING=${PROFILING} \
-DBUILD_FAISS_WITH_MKL=${BUILD_FAISS_WITH_MKL} \ -DFAISS_WITH_MKL=${FAISS_WITH_MKL} \
-DUSE_JFROG_CACHE=${USE_JFROG_CACHE} \ -DUSE_JFROG_CACHE=${USE_JFROG_CACHE} \
../" ../"
echo ${CMAKE_CMD} echo ${CMAKE_CMD}
......
...@@ -79,7 +79,7 @@ define_option(KNOWHERE_WITH_FAISS "Build with FAISS library" ON) ...@@ -79,7 +79,7 @@ define_option(KNOWHERE_WITH_FAISS "Build with FAISS library" ON)
define_option(KNOWHERE_WITH_FAISS_GPU_VERSION "Build with FAISS GPU version" ON) define_option(KNOWHERE_WITH_FAISS_GPU_VERSION "Build with FAISS GPU version" ON)
define_option(BUILD_FAISS_WITH_MKL "Build FAISS with MKL" OFF) define_option(FAISS_WITH_MKL "Build FAISS with MKL" OFF)
#---------------------------------------------------------------------- #----------------------------------------------------------------------
set_option_category("Test and benchmark") set_option_category("Test and benchmark")
......
set(FAISS_STATIC_LIB_NAME ${CMAKE_STATIC_LIBRARY_PREFIX}faiss${CMAKE_STATIC_LIBRARY_SUFFIX})
# First, find via if specified FAISS_ROOT
if (FAISS_ROOT)
find_library(FAISS_STATIC_LIB
NAMES ${FAISS_STATIC_LIB_NAME}
PATHS ${FAISS_ROOT}
PATH_SUFFIXES "lib"
NO_DEFAULT_PATH
)
find_path(FAISS_INCLUDE_DIR
NAMES "faiss/Index.h"
PATHS ${FAISS_ROOT}
NO_DEFAULT_PATH
PATH_SUFFIXES "include"
)
endif ()
find_package_handle_standard_args(FAISS REQUIRED_VARS FAISS_STATIC_LIB FAISS_INCLUDE_DIR)
if (FAISS_FOUND)
if (NOT TARGET faiss)
add_library(faiss STATIC IMPORTED)
set_target_properties(
faiss
PROPERTIES
IMPORTED_LOCATION "${FAISS_STATIC_LIB}"
INTERFACE_INCLUDE_DIRECTORIES "${FAISS_INCLUDE_DIR}"
)
if (FAISS_WITH_MKL)
set_target_properties(
faiss
PROPERTIES
INTERFACE_LINK_LIBRARIES "${MKL_LIBS}")
else ()
set_target_properties(
faiss
PROPERTIES
INTERFACE_LINK_LIBRARIES "openblas;lapack")
endif ()
endif ()
endif ()
...@@ -21,6 +21,7 @@ set(KNOWHERE_THIRDPARTY_DEPENDENCIES ...@@ -21,6 +21,7 @@ set(KNOWHERE_THIRDPARTY_DEPENDENCIES
GTest GTest
LAPACK LAPACK
OpenBLAS OpenBLAS
MKL
) )
message(STATUS "Using ${KNOWHERE_DEPENDENCY_SOURCE} approach to find dependencies") message(STATUS "Using ${KNOWHERE_DEPENDENCY_SOURCE} approach to find dependencies")
...@@ -43,6 +44,8 @@ macro(build_dependency DEPENDENCY_NAME) ...@@ -43,6 +44,8 @@ macro(build_dependency DEPENDENCY_NAME)
build_openblas() build_openblas()
elseif ("${DEPENDENCY_NAME}" STREQUAL "FAISS") elseif ("${DEPENDENCY_NAME}" STREQUAL "FAISS")
build_faiss() build_faiss()
elseif ("${DEPENDENCY_NAME}" STREQUAL "MKL")
build_mkl()
else () else ()
message(FATAL_ERROR "Unknown thirdparty dependency to build: ${DEPENDENCY_NAME}") message(FATAL_ERROR "Unknown thirdparty dependency to build: ${DEPENDENCY_NAME}")
endif () endif ()
...@@ -51,9 +54,9 @@ endmacro() ...@@ -51,9 +54,9 @@ endmacro()
macro(resolve_dependency DEPENDENCY_NAME) macro(resolve_dependency DEPENDENCY_NAME)
if (${DEPENDENCY_NAME}_SOURCE STREQUAL "AUTO") if (${DEPENDENCY_NAME}_SOURCE STREQUAL "AUTO")
find_package(${DEPENDENCY_NAME} MODULE) find_package(${DEPENDENCY_NAME} MODULE)
if(NOT ${${DEPENDENCY_NAME}_FOUND}) if (NOT ${${DEPENDENCY_NAME}_FOUND})
build_dependency(${DEPENDENCY_NAME}) build_dependency(${DEPENDENCY_NAME})
endif() endif ()
elseif (${DEPENDENCY_NAME}_SOURCE STREQUAL "BUNDLED") elseif (${DEPENDENCY_NAME}_SOURCE STREQUAL "BUNDLED")
build_dependency(${DEPENDENCY_NAME}) build_dependency(${DEPENDENCY_NAME})
elseif (${DEPENDENCY_NAME}_SOURCE STREQUAL "SYSTEM") elseif (${DEPENDENCY_NAME}_SOURCE STREQUAL "SYSTEM")
...@@ -238,11 +241,11 @@ if (CUSTOMIZATION) ...@@ -238,11 +241,11 @@ if (CUSTOMIZATION)
# set(FAISS_MD5 "f3b2ce3364c3fa7febd3aa7fdd0fe380") # commit-id 694e03458e6b69ce8a62502f71f69a614af5af8f branch-0.3.0 # set(FAISS_MD5 "f3b2ce3364c3fa7febd3aa7fdd0fe380") # commit-id 694e03458e6b69ce8a62502f71f69a614af5af8f branch-0.3.0
# set(FAISS_MD5 "bb30722c22390ce5f6759ccb216c1b2a") # commit-id d324db297475286afe107847c7fb7a0f9dc7e90e branch-0.3.0 # set(FAISS_MD5 "bb30722c22390ce5f6759ccb216c1b2a") # commit-id d324db297475286afe107847c7fb7a0f9dc7e90e branch-0.3.0
set(FAISS_MD5 "2293cdb209c3718e3b19f3edae8b32b3") # commit-id a13c1205dc52977a9ad3b33a14efa958604a8bff branch-0.3.0 set(FAISS_MD5 "2293cdb209c3718e3b19f3edae8b32b3") # commit-id a13c1205dc52977a9ad3b33a14efa958604a8bff branch-0.3.0
endif() endif ()
else() else ()
set(FAISS_SOURCE_URL "https://github.com/JinHai-CN/faiss/archive/1.6.0.tar.gz") set(FAISS_SOURCE_URL "https://github.com/JinHai-CN/faiss/archive/1.6.0.tar.gz")
set(FAISS_MD5 "b02c1a53234f5acc9bea1b0c55524f50") set(FAISS_MD5 "b02c1a53234f5acc9bea1b0c55524f50")
endif() endif ()
message(STATUS "FAISS URL = ${FAISS_SOURCE_URL}") message(STATUS "FAISS URL = ${FAISS_SOURCE_URL}")
if (DEFINED ENV{KNOWHERE_ARROW_URL}) if (DEFINED ENV{KNOWHERE_ARROW_URL})
...@@ -674,42 +677,22 @@ if (KNOWHERE_BUILD_TESTS AND NOT TARGET googletest_ep) ...@@ -674,42 +677,22 @@ if (KNOWHERE_BUILD_TESTS AND NOT TARGET googletest_ep)
endif () endif ()
# ---------------------------------------------------------------------- # ----------------------------------------------------------------------
# FAISS # MKL
macro(build_faiss)
message(STATUS "Building FAISS-${FAISS_VERSION} from source")
if (NOT DEFINED BUILD_FAISS_WITH_MKL) macro(build_mkl)
set(BUILD_FAISS_WITH_MKL OFF)
endif ()
if (EXISTS "/proc/cpuinfo") if (FAISS_WITH_MKL)
FILE(READ /proc/cpuinfo PROC_CPUINFO) if (EXISTS "/proc/cpuinfo")
FILE(READ /proc/cpuinfo PROC_CPUINFO)
SET(VENDOR_ID_RX "vendor_id[ \t]*:[ \t]*([a-zA-Z]+)\n") SET(VENDOR_ID_RX "vendor_id[ \t]*:[ \t]*([a-zA-Z]+)\n")
STRING(REGEX MATCH "${VENDOR_ID_RX}" VENDOR_ID "${PROC_CPUINFO}") STRING(REGEX MATCH "${VENDOR_ID_RX}" VENDOR_ID "${PROC_CPUINFO}")
STRING(REGEX REPLACE "${VENDOR_ID_RX}" "\\1" VENDOR_ID "${VENDOR_ID}") STRING(REGEX REPLACE "${VENDOR_ID_RX}" "\\1" VENDOR_ID "${VENDOR_ID}")
if (NOT ${VENDOR_ID} STREQUAL "GenuineIntel") if (NOT ${VENDOR_ID} STREQUAL "GenuineIntel")
set(BUILD_FAISS_WITH_MKL OFF) set(FAISS_WITH_MKL OFF)
endif ()
endif () endif ()
endif ()
set(FAISS_PREFIX "${INDEX_BINARY_DIR}/faiss_ep-prefix/src/faiss_ep")
set(FAISS_INCLUDE_DIR "${FAISS_PREFIX}/include")
set(FAISS_STATIC_LIB
"${FAISS_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}faiss${CMAKE_STATIC_LIBRARY_SUFFIX}")
set(FAISS_CONFIGURE_ARGS
"--prefix=${FAISS_PREFIX}"
"CFLAGS=${EP_C_FLAGS}"
"CXXFLAGS=${EP_CXX_FLAGS}"
--without-python)
set(FAISS_CFLAGS ${EP_C_FLAGS})
set(FAISS_CXXFLAGS ${EP_CXX_FLAGS})
if (BUILD_FAISS_WITH_MKL)
find_path(MKL_LIB_PATH find_path(MKL_LIB_PATH
NAMES "libmkl_intel_ilp64.a" "libmkl_gnu_thread.a" "libmkl_core.a" NAMES "libmkl_intel_ilp64.a" "libmkl_gnu_thread.a" "libmkl_core.a"
...@@ -717,19 +700,38 @@ macro(build_faiss) ...@@ -717,19 +700,38 @@ macro(build_faiss)
if (${MKL_LIB_PATH} STREQUAL "MKL_LIB_PATH-NOTFOUND") if (${MKL_LIB_PATH} STREQUAL "MKL_LIB_PATH-NOTFOUND")
message(FATAL_ERROR "Could not find MKL libraries") message(FATAL_ERROR "Could not find MKL libraries")
endif () endif ()
message(STATUS "Build Faiss with MKL. MKL lib path = ${MKL_LIB_PATH}") message(STATUS "MKL lib path = ${MKL_LIB_PATH}")
set(MKL_LIBS set(MKL_LIBS
${MKL_LIB_PATH}/libmkl_intel_ilp64.a ${MKL_LIB_PATH}/libmkl_intel_ilp64.a
${MKL_LIB_PATH}/libmkl_gnu_thread.a ${MKL_LIB_PATH}/libmkl_gnu_thread.a
${MKL_LIB_PATH}/libmkl_core.a ${MKL_LIB_PATH}/libmkl_core.a
) )
endif ()
endmacro()
# ----------------------------------------------------------------------
# FAISS
macro(build_faiss)
message(STATUS "Building FAISS-${FAISS_VERSION} from source")
set(FAISS_PREFIX "${INDEX_BINARY_DIR}/faiss_ep-prefix/src/faiss_ep")
set(FAISS_INCLUDE_DIR "${FAISS_PREFIX}/include")
set(FAISS_STATIC_LIB
"${FAISS_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}faiss${CMAKE_STATIC_LIBRARY_SUFFIX}")
set(FAISS_CONFIGURE_ARGS
"--prefix=${FAISS_PREFIX}"
"CFLAGS=${EP_C_FLAGS}"
"CXXFLAGS=${EP_CXX_FLAGS}"
--without-python)
if (FAISS_WITH_MKL)
set(FAISS_CONFIGURE_ARGS ${FAISS_CONFIGURE_ARGS} set(FAISS_CONFIGURE_ARGS ${FAISS_CONFIGURE_ARGS}
"CPPFLAGS=-DFINTEGER=long -DMKL_ILP64 -m64 -I${MKL_LIB_PATH}/../../include" "CPPFLAGS=-DFINTEGER=long -DMKL_ILP64 -m64 -I${MKL_LIB_PATH}/../../include"
"LDFLAGS=-L${MKL_LIB_PATH}" "LDFLAGS=-L${MKL_LIB_PATH}"
) )
else () else ()
message(STATUS "Build Faiss with OpenBlas/LAPACK") message(STATUS "Build Faiss with OpenBlas/LAPACK")
set(FAISS_CONFIGURE_ARGS ${FAISS_CONFIGURE_ARGS} set(FAISS_CONFIGURE_ARGS ${FAISS_CONFIGURE_ARGS}
...@@ -770,7 +772,7 @@ macro(build_faiss) ...@@ -770,7 +772,7 @@ macro(build_faiss)
BUILD_BYPRODUCTS BUILD_BYPRODUCTS
${FAISS_STATIC_LIB}) ${FAISS_STATIC_LIB})
if (NOT BUILD_FAISS_WITH_MKL) if (NOT FAISS_WITH_MKL)
ExternalProject_Add_StepDependencies(faiss_ep build openblas_ep lapack_ep) ExternalProject_Add_StepDependencies(faiss_ep build openblas_ep lapack_ep)
endif () endif ()
...@@ -800,7 +802,7 @@ macro(build_faiss) ...@@ -800,7 +802,7 @@ macro(build_faiss)
BUILD_BYPRODUCTS BUILD_BYPRODUCTS
${FAISS_STATIC_LIB}) ${FAISS_STATIC_LIB})
if (NOT BUILD_FAISS_WITH_MKL) if (NOT FAISS_WITH_MKL)
ExternalProject_Add_StepDependencies(faiss_ep build openblas_ep lapack_ep) ExternalProject_Add_StepDependencies(faiss_ep build openblas_ep lapack_ep)
endif () endif ()
...@@ -815,7 +817,7 @@ macro(build_faiss) ...@@ -815,7 +817,7 @@ macro(build_faiss)
IMPORTED_LOCATION "${FAISS_STATIC_LIB}" IMPORTED_LOCATION "${FAISS_STATIC_LIB}"
INTERFACE_INCLUDE_DIRECTORIES "${FAISS_INCLUDE_DIR}" INTERFACE_INCLUDE_DIRECTORIES "${FAISS_INCLUDE_DIR}"
) )
if (BUILD_FAISS_WITH_MKL) if (FAISS_WITH_MKL)
set_target_properties( set_target_properties(
faiss faiss
PROPERTIES PROPERTIES
...@@ -834,7 +836,9 @@ endmacro() ...@@ -834,7 +836,9 @@ endmacro()
if (KNOWHERE_WITH_FAISS AND NOT TARGET faiss_ep) if (KNOWHERE_WITH_FAISS AND NOT TARGET faiss_ep)
if (NOT BUILD_FAISS_WITH_MKL) if (FAISS_WITH_MKL)
resolve_dependency(MKL)
else ()
resolve_dependency(OpenBLAS) resolve_dependency(OpenBLAS)
get_target_property(OPENBLAS_INCLUDE_DIR openblas INTERFACE_INCLUDE_DIRECTORIES) get_target_property(OPENBLAS_INCLUDE_DIR openblas INTERFACE_INCLUDE_DIRECTORIES)
include_directories(SYSTEM "${OPENBLAS_INCLUDE_DIR}") include_directories(SYSTEM "${OPENBLAS_INCLUDE_DIR}")
......
...@@ -54,7 +54,7 @@ set(depend_libs ...@@ -54,7 +54,7 @@ set(depend_libs
gfortran gfortran
pthread pthread
) )
if (BUILD_FAISS_WITH_MKL) if (FAISS_WITH_MKL)
set(depend_libs ${depend_libs} set(depend_libs ${depend_libs}
"-Wl,--start-group \ "-Wl,--start-group \
${MKL_LIB_PATH}/libmkl_intel_ilp64.a \ ${MKL_LIB_PATH}/libmkl_intel_ilp64.a \
......
...@@ -8,7 +8,7 @@ set(depend_libs ...@@ -8,7 +8,7 @@ set(depend_libs
faiss faiss
arrow "${ARROW_LIB_DIR}/libjemalloc_pic.a" arrow "${ARROW_LIB_DIR}/libjemalloc_pic.a"
) )
if (BUILD_FAISS_WITH_MKL) if (FAISS_WITH_MKL)
set(depend_libs ${depend_libs} set(depend_libs ${depend_libs}
"-Wl,--start-group \ "-Wl,--start-group \
${MKL_LIB_PATH}/libmkl_intel_ilp64.a \ ${MKL_LIB_PATH}/libmkl_intel_ilp64.a \
......
...@@ -15,7 +15,7 @@ if (KNOWHERE_GPU_VERSION) ...@@ -15,7 +15,7 @@ if (KNOWHERE_GPU_VERSION)
faiss hdf5 faiss hdf5
arrow ${ARROW_LIB_DIR}/libjemalloc_pic.a arrow ${ARROW_LIB_DIR}/libjemalloc_pic.a
) )
if (BUILD_FAISS_WITH_MKL) if (FAISS_WITH_MKL)
set(depend_libs ${depend_libs} set(depend_libs ${depend_libs}
"-Wl,--start-group \ "-Wl,--start-group \
${MKL_LIB_PATH}/libmkl_intel_ilp64.a \ ${MKL_LIB_PATH}/libmkl_intel_ilp64.a \
......
...@@ -10,7 +10,7 @@ if (KNOWHERE_GPU_VERSION) ...@@ -10,7 +10,7 @@ if (KNOWHERE_GPU_VERSION)
faiss faiss
arrow ${ARROW_LIB_DIR}/libjemalloc_pic.a arrow ${ARROW_LIB_DIR}/libjemalloc_pic.a
) )
if (BUILD_FAISS_WITH_MKL) if (FAISS_WITH_MKL)
set(depend_libs ${depend_libs} set(depend_libs ${depend_libs}
"-Wl,--start-group \ "-Wl,--start-group \
${MKL_LIB_PATH}/libmkl_intel_ilp64.a \ ${MKL_LIB_PATH}/libmkl_intel_ilp64.a \
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
add_definitions(-std=c++11 -O3 -lboost -march=native -Wall -DINFO) add_definitions(-std=c++11 -O3 -lboost -march=native -Wall -DINFO)
find_package(OpenMP REQUIRED) find_package(OpenMP REQUIRED)
if (OPENMP_FOUND) if (OpenMP_FOUND)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
else () else ()
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册