前言
由于最近項目組引用Faiss庫(Faiss是由Facebook AI Research研發的為稠密向量提供高效相似度搜索和聚類的框架),百度上一搜一大波安裝教程,大部分其實都是通過Faiss項目中的INSTALL.md來進行安裝的,不過教程確實時間久遠,又很多東西和INSTALL.md對不上,嘗試了很多版本都沒法成功安裝,最后還是根據官方的INSTALL.md文檔才把Faiss安裝好的。(這個故事告訴我們編譯源碼最好是看官方文檔,不要畏懼英文,畢竟谷歌翻譯很強大哈哈)。
Linux軟件編譯基本知識
PS:這一部分自己也是一知半解,大家可以自行了解,僅對不太熟悉編譯知識的同學進行普及。
正式安裝之前先補充一些關于Linux上的開源軟件安裝流程知識,一般分為三步(./configure && make && make install):
- ./configure 是用來檢測你的安裝平臺的目標特性,比如它會檢測你是不是有CC或GCC,并不是需要CC或GCC,在安裝之前需要先運行configure命令設置一些參數來對安裝進行控制,比如:./configure -prefix = /usr 意思是把該軟件安裝在/usr 下,有一些軟件還可以加上 –with、–enable、–without、–disable 等等參數對編譯加以控制,你可以通過允許 ./configure –help 察看詳細的說明幫助。
- make 就比較簡單了,就是通過MAKEFILE 執行編譯
- make install 安裝軟件,一般是將編譯好的庫或者頭文件放置到/usr/lib 或者/usr/local/lib、/usr/include、/usr/local/include中供其他使用
編譯 Faiss(CentOS 7.4)
如果你只是想在python中使用Faiss庫,只用看下文的第一點(利用Anaconda3構建開發環境即可),編譯C++直接參考第二點)。
(1)利用Anaconda3直接安裝Python環境
步驟一:安裝anaconda3
# 下載
wget https://repo.anaconda.com/archive/Anaconda3-5.3.0-Linux-x86_64.sh
# 權限
chmod +x Anaconda3-5.3.0-Linux-x86_64.sh
# 安裝
bash Anaconda3-5.3.0-Linux-x86_64.sh
安裝過程中需不需要加入環境變量選的是No就手工添加
# 編輯
vi $HOME/.bashrc
# 添加
export PATH="$HOME/anaconda3/bin:$PATH"
# 啟用
source $HOME/.bashrc
檢查一下是否安裝成功
conda list
步驟二:安裝Faiss-cpu /Faiss-gpu
# CPU version only
conda install faiss-cpu -c pytorch
# Make sure you have CUDA installed before installing faiss-gpu, otherwise it falls back to CPU version
conda install faiss-gpu -c pytorch # [DEFAULT]For CUDA8.0
conda install faiss-gpu cuda90 -c pytorch # For CUDA9.0
conda install faiss-gpu cuda91 -c pytorch # For CUDA9.1
# cuda90/cuda91 shown above is a feature, it does not install CUDA for you.
(2)編譯源碼(C++環境)
步驟一:環境安裝,安裝gcc及g++
# 安裝gcc:
yum install gcc
# 安裝g++:
yum install gcc-c++ (權限不夠,用在root權限下安裝)
# 查看gcc版本,如果是gcc4.8以下建議升級到gcc4.8
gcc -v
步驟二:安裝Faiss依賴的數學庫(openblas 和 lapack,庫的功能請自行百度)
- 安裝OpenBLAS
#沒有安裝git,先安裝git,CentOS安裝git
#yum install git
git clone https://github.com/xianyi/OpenBLAS.git
cd OpenBLAS
#如果沒有安裝gfortran
#yum install gcc-gfortran (unbuntu版 執行 sudo apt-get install gfortran)
make FC=gfortran
#將OpenBLAS安裝在/opt下
make install
#之后將編譯好的動態庫鏈接至/usr/lib目錄下
ln -s /opt/OpenBLAS/lib/libopenblas.so /usr/lib/libopenblas.so
在 /etc/profile中加入
LD_LIBRARY_PATH=/opt/OpenBLAS/lib
export LD_LIBRARY_PATH
- 安裝lapack
# 下載lapack源碼
wget http://www.netlib.org/lapack/lapack-3.4.2.tgz
tar -zxf lapack-3.4.2.tgz
# 首先當然是進入lapack-3.4.2文件夾,然后根據平臺的特點,將INSTALL目錄下對應的make.inc.XXX復制一份到 lapack-3.4.2目錄下,并命名為make.inc, 這里我復制的是INSTALL/make.inc.gfortran,因為我這里用的是gfortran編譯器
cd lapack-3.4.2
cp ./INSTALL/make.inc.gfortran ./
mv make.inc.gfortran make.inc
修改lapack-3.4.2/Makefile,因為lapack以來于blas庫,所以需要做如下修改(注釋第一句話,去掉注釋第二句話):
#lib: lapacklib tmglib
lib: blaslib variants lapacklig tmglib
接著進行編譯:
# 編譯所有的lapack文件
make
# 進入lapacke 文件夾,這個文件夾包含lapack的C語言接口文件
cd lapacke
# 編譯lapacke
make
由于lapack的makefile文件中沒有make isntall 命令,需要手工進行安裝
# 將lapacke的頭文件復制到系統頭文件目錄
cp include/*.h /usr/include
# 返回到 lapack-3.4.2 目錄
cd ..
# 將生成的所有庫文件復制到系統庫目錄
cp *.a /usr/lib
這里的頭文件包括: lapacke.h, lapacke_config.h, lapacke_mangling.h,lapacke_mangling_with_flags.h lapacke_utils.h
生成的庫文件包括: liblapack.a, liblapacke.a, librefblas.a,libtmglib.a
步驟三:編譯安裝Faiss
# 下載FAISS源碼.
git clone https://github.com/facebookresearch/faiss.git
# 進入FAISS源碼目錄.
cd faiss
# 根據系統配置編譯環境. [Linux 為例]
cp example_makefiles/makefile.inc.Linux ./makefile.inc
接著需要驗證步驟二中兩個數學庫安裝是否成功,需要執行BLAS測試用例
# 首先先執行./configure,看看環境是否符合編譯條件,其中有一些不是必選項,一般管制輸出日志的最后一句話有無錯誤即可
./configure
# 之后進行編譯用例測試,若無報錯即代表數學庫安裝成功
make misc/test_blas
./misc/test_blas
接下來終于到了最終的編譯安裝Faiss的環節了,真的是不容易呀
# 執行最重要的make & make install
make
make install
可以在項目根目錄下看見編譯好的靜態庫和動態庫
<figure style="box-sizing: border-box; display: block; margin: 2em auto; text-align: center;"><figcaption style="box-sizing: border-box; display: block; text-align: center; font-size: 0.8em; line-height: 2em; color: rgb(144, 144, 144);"></figcaption>
</figure>
步驟四:測試Faiss,參考INSTALL.md上的測試用例,這里就不贅述了
A bit longer example runs and evaluates Faiss on the SIFT1M dataset. To run it, please download the ANN_SIFT1M dataset fromhttp://corpus-texmex.irisa.fr/ and unzip it to the subdirectory sift1M at the root of the source directory for this repository. Then compile and run the following (after ensuring you have installed faiss):
make demos
./demos/demo_sift1M
This is a demonstration of the high-level auto-tuning API. You can try setting a different index_key to find the indexing structure that gives the best performance.
結束語
至此,Faiss-CPU版本編譯工作就完成了,自己之前也沒真正接觸過開源項目的源碼編譯,對linux makefile也不熟悉,其實這次實踐花了不少時間,最重要還是要理解Linux 開源軟件的編譯流程,按照這種邏輯一定能編譯出來的。
之后會開始閱讀源碼以及一些基本的使用技巧,不定期更新,畢竟我也是個萌新哈哈哈。
致謝
部分內容參考一下鏈接,沒有和作者取得聯系就直接使用了,這里表示感謝一下https://blog.csdn.net/baiyang3/article/details/52790793 作者:baiyang3https://blog.csdn.net/u013017173/article/details/81748168#2-安裝openblas的步驟 作者:楓依流水
預覽
1694 字