【オリジナル】FAISSのインストールと使用
目次
Makefileでインストール
インストールコマンド
cmakeでインストール
インストールコマンド:
問題にぶつかる
1、インストールタイムズが間違っていて、gtestが見つからないことを提示します
2、インストール時報が間違っていて、openBlasが見つからないことを提示する
3、ヒントが見つからない
4、関数参照未定義
FAISSはFacebook AI研究チームがオープンソースしたクラスタリングおよび類似性検索ライブラリであり、RAMに不適切になる可能性があるまで任意のサイズのベクトルセットで検索する新しいアルゴリズムを含む.評価およびパラメータ調整のためのサポートコードも含まれています.会社のサーバーは外部のネットに接続していないため、condaを使ってインストールすることができなくて、直接ソースコードはインストールして、githupウェブサイトは住所をダウンロードします:
https://github.com/facebookresearch/faiss
インストール方法はインストールの説明を参照してください.
https://github.com/facebookresearch/faiss/blob/master/INSTALL.md
faissインストールではmakeツールまたはcmakeツールを使用できます.makeはc++インタフェースとpythonインタフェースを生成することができ、cmakeコンパイルはc++インタフェースしか生成できません.
Makefileでインストール
インストールコマンド
1、cpuバージョンライブラリ関数のコンパイル
configureが完了するとmakefileが生成される.inc、デフォルトはintel MTKライブラリを使用して、私が使っているOpenBlasオープンソースライブラリ、ここで修正しないとlibmkl_が見つからないことをヒントにしますavx2.so or libmkl_def.so.
解決策:生成makefileを修正する.incファイル、OpenBlasライブラリ関数の接続を指定し、make&make installを再実行します.
2、pythonインタフェースのコンパイル
pthonインタフェースのテスト:
3、gpu版ライブラリファイルのコンパイル
GPU版ライブラリはlibfaissに依存する.aファイルですので、手順1を先に実行する必要があります.
他にもinc中compute_60とcompute_61,サーバはサポートされていません.2行削除すればいいです.
4、gpuバージョンのpythonインタフェースをコンパイルする
gpu版pythonインタフェースをコンパイルするときに、エラーを提示しました(後で再コンパイルするとき、エラーが発生しないのはおかしいです):
ネットで解決策を探したのはlibgpufaissをコンパイルすることだ.aの場合、CFLAGS='$CFLAGS-fpic'オプションを使用して、試してみると有効です.
テスト:
cmakeでインストール
インストールコマンド:
注:cmakeコンパイルfaissを使用すると、cpuとgpuバージョンのライブラリファイルを生成できますが、pythonインタフェースの生成はサポートされていません.pythonインタフェースが必要な場合は、Makefileコンパイルでpythonインタフェースを生成する方法でコンパイルする必要があります.
問題にぶつかる
0、configureはエラーです
解決策:./configure --with-cuda=/dev/null
1、インストールタイムズが間違っていて、gtestが見つからないことを提示します
理由:googletestがインストールされていません
解決策:
ダウンロード先:https://github.com/abseil/googletest
2、インストール時報が間違っていて、openBlasが見つからないことを提示する
エラーメッセージ:
-- Could not find OpenBLAS include. Turning OpenBLAS_FOUND off
-- Could not find OpenBLAS lib. Turning OpenBLAS_FOUND off
CMake Error at cmake/Modules/FindOpenBLAS.cmake:59 (MESSAGE):
Could not find OpenBLAS
理由:OpenBlasのヘッダファイルパスとライブラリファイルパスが指定されていません.
解決方法:サーバー上のOpenBlasのインストールディレクトリは/usr/local/openBlasで、cmake/Modules/FendOpenBLASを修正する.cmakeはディレクトリを追加します.
3、ヒントが見つからない
エラーメッセージ:[79%]Building CXX object tutorial/cpp/CMakeFiles/1-Fill.dir/1-Flat.cpp.o faiss-master/tutorial/cpp/1-Flat.cpp:12:29: fatal error: faiss/IndexFlat.h: No such file or directory #include compilation terminated.b
理由:1-Flat.cppコードでは「faiss/indexFlat.h」相対パス名が使用されますが、githupからダウンロードしたソースコードは「faiss-master/indexFlat.h」です.
解決策:「faiss-master」を「faiss」と再名するか、includeソースコードを1つずつ変更するのは簡単です.
4、関数参照未定義
ヒント:
undefined reference to `faiss::gpu::getNumDevices()'
理由:
tutorial/cpp/CMakeLists.txtでコンパイルを定義する際にlibfaissを統一的に使用する.aライブラリファイル、libgpufaissが指定されていません.a
解決策:tutorial/cpp/CMakeListsを修正する.txtファイル
Makefileでインストール
インストールコマンド
cmakeでインストール
インストールコマンド:
問題にぶつかる
1、インストールタイムズが間違っていて、gtestが見つからないことを提示します
2、インストール時報が間違っていて、openBlasが見つからないことを提示する
3、ヒントが見つからない
4、関数参照未定義
FAISSはFacebook AI研究チームがオープンソースしたクラスタリングおよび類似性検索ライブラリであり、RAMに不適切になる可能性があるまで任意のサイズのベクトルセットで検索する新しいアルゴリズムを含む.評価およびパラメータ調整のためのサポートコードも含まれています.会社のサーバーは外部のネットに接続していないため、condaを使ってインストールすることができなくて、直接ソースコードはインストールして、githupウェブサイトは住所をダウンロードします:
https://github.com/facebookresearch/faiss
インストール方法はインストールの説明を参照してください.
https://github.com/facebookresearch/faiss/blob/master/INSTALL.md
faissインストールではmakeツールまたはcmakeツールを使用できます.makeはc++インタフェースとpythonインタフェースを生成することができ、cmakeコンパイルはc++インタフェースしか生成できません.
Makefileでインストール
インストールコマンド
1、cpuバージョンライブラリ関数のコンパイル
./configure
make
make install
configureが完了するとmakefileが生成される.inc、デフォルトはintel MTKライブラリを使用して、私が使っているOpenBlasオープンソースライブラリ、ここで修正しないとlibmkl_が見つからないことをヒントにしますavx2.so or libmkl_def.so.
解決策:生成makefileを修正する.incファイル、OpenBlasライブラリ関数の接続を指定し、make&make installを再実行します.
# OpenBlas lapack
#LDFLAGS = -fopenmp
LDFLAGS = -fopenmp -L/usr/local/OpenBLAS/lib -L/usr/lib64/atlas
# mkl , OpenBlas lapack
#LIBS = -lmkl_intel_lp64 -lmkl_gnu_thread -lmkl_core -lgomp -lpthread -lm -ldl
LIBS = -lopenblas -llapack -lgomp -lpthread -lm -ldl
2、pythonインタフェースのコンパイル
#
make py
#
cd python
make install
pthonインタフェースのテスト:
[root@host233186 python]# python ../tutorial/python/1-Flat.py
True
100000
[[ 0 393 363 78]
[ 1 555 277 364]
[ 2 304 101 13]
[ 3 173 18 182]
[ 4 288 370 531]]
[[ 0. 7.17517328 7.2076292 7.25116253]
[ 0. 6.32356453 6.6845808 6.79994535]
[ 0. 5.79640865 6.39173603 7.28151226]
[ 0. 7.27790546 7.52798653 7.66284657]
[ 0. 6.76380348 7.29512024 7.36881447]]
[[ 381 207 210 477]
[ 526 911 142 72]
[ 838 527 1290 425]
[ 196 184 164 359]
[ 526 377 120 425]]
[[ 9900 10500 9309 9831]
[11055 10895 10812 11321]
[11353 11103 10164 9787]
[10571 10664 10632 9638]
[ 9628 9554 10036 9582]]
3、gpu版ライブラリファイルのコンパイル
GPU版ライブラリはlibfaissに依存する.aファイルですので、手順1を先に実行する必要があります.
他にもinc中compute_60とcompute_61,サーバはサポートされていません.2行削除すればいいです.
cd gpu
make -j10
4、gpuバージョンのpythonインタフェースをコンパイルする
cd python
make _swigfaiss_gpu.so
make install
gpu版pythonインタフェースをコンパイルするときに、エラーを提示しました(後で再コンパイルするとき、エラーが発生しないのはおかしいです):
/usr/bin/ld: ../gpu/libgpufaiss.a(gpufaiss_generated_GpuIndexFlat.cu.o): relocation R_X86_64_32 against `.rodata.str1.8' can not be used when making a shared object; recompile with -fPIC
../gpu/libgpufaiss.a: could not read symbols: Bad value
collect2: error: ld returned 1 exit status
make: *** [_swigfaiss_gpu.so] Error 1
ネットで解決策を探したのはlibgpufaissをコンパイルすることだ.aの場合、CFLAGS='$CFLAGS-fpic'オプションを使用して、試してみると有効です.
cd gpu
make CFLAGS='$CFLAGS -fpic' -j10
テスト:
[root@host233186 faiss]# python tutorial/python/4-GPU.py
100000
[[ 381 207 210 477]
[ 526 911 142 72]
[ 838 527 1290 425]
[ 196 184 164 359]
[ 526 377 120 425]]
[[ 9900 10500 9309 9831]
[11055 10895 10812 11321]
[11353 11103 10164 9787]
[10571 10664 10632 9638]
[ 9628 9554 10036 9582]]
100000
[[ 381 207 210 477]
[ 526 911 142 72]
[ 838 527 1290 425]
[ 196 184 164 359]
[ 526 377 120 425]]
[[ 9900 9309 9810 10048]
[11055 10895 10812 11321]
[11353 10164 9787 10719]
[10571 10664 10632 10203]
[ 9628 9554 9582 10304]]
cmakeでインストール
インストールコマンド:
# build
mkdir build
cmake ../
make
make install
注:cmakeコンパイルfaissを使用すると、cpuとgpuバージョンのライブラリファイルを生成できますが、pythonインタフェースの生成はサポートされていません.pythonインタフェースが必要な場合は、Makefileコンパイルでpythonインタフェースを生成する方法でコンパイルする必要があります.
問題にぶつかる
0、configureはエラーです
checking for cuInit in -lcuda... configure: error: in `/faiss':
no
configure: error: Couldn't find libcuda
See `config.log' for more details
解決策:./configure --with-cuda=/dev/null
1、インストールタイムズが間違っていて、gtestが見つからないことを提示します
理由:googletestがインストールされていません
解決策:
ダウンロード先:https://github.com/abseil/googletest
# build
mkdir build
cmake ../
make
make install
2、インストール時報が間違っていて、openBlasが見つからないことを提示する
エラーメッセージ:
-- Could not find OpenBLAS include. Turning OpenBLAS_FOUND off
-- Could not find OpenBLAS lib. Turning OpenBLAS_FOUND off
CMake Error at cmake/Modules/FindOpenBLAS.cmake:59 (MESSAGE):
Could not find OpenBLAS
理由:OpenBlasのヘッダファイルパスとライブラリファイルパスが指定されていません.
解決方法:サーバー上のOpenBlasのインストールディレクトリは/usr/local/openBlasで、cmake/Modules/FendOpenBLASを修正する.cmakeはディレクトリを追加します.
SET(Open_BLAS_INCLUDE_SEARCH_PATHS
/usr/include
/usr/include/openblas
/usr/include/openblas-base
/usr/local/include
/usr/local/include/openblas
/usr/local/include/openblas-base
/opt/OpenBLAS/include
/opt/local/include
/usr/local/OpenBLAS/include # OpenBlas
$ENV{OpenBLAS_HOME}
$ENV{OpenBLAS_HOME}/include
)
SET(Open_BLAS_LIB_SEARCH_PATHS
/lib/
/lib/openblas-base
/lib64/
/usr/lib
/usr/lib/openblas-base
/usr/lib64
/usr/local/lib
/usr/local/lib64
/usr/local/OpenBLAS/lib # OpenBlas
/opt/OpenBLAS/lib
/opt/local/lib
$ENV{OpenBLAS}cd
$ENV{OpenBLAS}/lib
$ENV{OpenBLAS_HOME}
$ENV{OpenBLAS_HOME}/lib
)
3、ヒントが見つからない
エラーメッセージ:[79%]Building CXX object tutorial/cpp/CMakeFiles/1-Fill.dir/1-Flat.cpp.o faiss-master/tutorial/cpp/1-Flat.cpp:12:29: fatal error: faiss/IndexFlat.h: No such file or directory #include compilation terminated.b
理由:1-Flat.cppコードでは「faiss/indexFlat.h」相対パス名が使用されますが、githupからダウンロードしたソースコードは「faiss-master/indexFlat.h」です.
解決策:「faiss-master」を「faiss」と再名するか、includeソースコードを1つずつ変更するのは簡単です.
4、関数参照未定義
ヒント:
undefined reference to `faiss::gpu::getNumDevices()'
理由:
tutorial/cpp/CMakeLists.txtでコンパイルを定義する際にlibfaissを統一的に使用する.aライブラリファイル、libgpufaissが指定されていません.a
解決策:tutorial/cpp/CMakeListsを修正する.txtファイル
file(GLOB srcs ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
# Build each source file independently
include_directories(../../../) # faiss root directory
foreach(source ${srcs})
get_filename_component(name ${source} NAME_WE)
# gpu
IF(name MATCHES ".*GPU.*")
SET(faiss_lib gpufaiss faiss cublas)
# cublas
link_directories("/usr/local/cuda-7.5/lib64")
ENDIF(name MATCHES ".*GPU.*")
message("****************" ${name} "libraries:" ${faiss_lib} "****************")
add_executable(${name} ${source})
target_link_libraries(${name} ${faiss_lib})
# Install
install(TARGETS ${name} DESTINATION bin)
endforeach(source)