Facebook 的相似性搜索工具 Faiss支持GPU下矢量表示檢索,有較強的檢索性能,可用於有效的相似性搜索(similarity search)和稠密矢量聚類(clustering of dense vectors)。Faiss 是圍繞存儲一個向量集的索引類型(index type)構建的,並且索引類型提供了一個利用 L2 和/或點積向量比較的函數,以使該函數能夠在向量集中進行搜索。下面說明下在ubuntu下步數faiss,並使用python接口開發。
1.環境準備
1)python環境:
命令:
python -V
python 3.6.6
2)CUDA版本:
命令:
cat /usr/local/cuda/version.txt
CUDA Version 9.0.176
3)Conda安裝
懶人部署,不想編譯,直接conda install。本機沒有安裝Anaconda,去https://conda.io/miniconda.html 下載miniconda installer. Miniconda是一個Anaconda的輕量級替代,默認只包含了python和conda,但是可以通過pip和conda來安裝所需要的包。Conda是一個開源的軟件包管理系統和環境管理系統,用於安裝多個版本的軟件包及其依賴關係,並在它們之間輕鬆切換。
命令:
wget -c https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
source /home/root/.bashrc
conda -V
顯示conda 4.7.12
2.Faiss安裝(GPU)
命令:# For CUDA9
conda install faiss-gpu cudatoolkit=9.0 -c pytorch
參考:https://github.com/facebookresearch/faiss/blob/master/INSTALL.md#general-compilation-instructions
3.Python測試
參考:https://github.com/facebookresearch/faiss/wiki/Getting-started
如圖:
4.python兼容
1)由於我本機原來有一個python解釋器,現在又部署了Anaconda(也會安裝一個python解釋器)。
命令:
import sys
sys.executable
python解釋器路徑:/usr/bin/python3.6
Anaconda中python解釋器路徑:/root/miniconda3/bin/python3.7
2)發現終端命令前多了(base),原來是conda activate base 自動執行,執行conda deactivate後就沒有了。如果激活就執行anaconda下的python解釋器,如果不激活就執行原解釋器。
3)找到用戶目錄下的.bashrc文件,註釋掉conda的配置,不讓conda自啓動。在安裝的過程,可以選擇不配置環境,我選擇了配置環境,所以需要手動取消。
這樣的話,每次進入終端後都要配置下Anaconda路徑,才能使用conda,如下命令。
export PATH="/root/miniconda3/bin:$PATH" --當前會話有效
source .bashrc
配置PATH後,就可以使用Anaconda下的python解釋器,然後就可用這個環境下安裝的faiss庫了。
總結下:Anaconda安裝時選擇了配置環境,導致原python解釋器需要切換。手動在.bashrc文件中取消Anaconda環境配置。每次進入終端後,默認python解釋器是/usr/bin下的python3.6。要使用faiss庫,就先配置Anaconda路徑啓用Anaconda中的python解釋器(/root/miniconda3/bin/下python3.7),然後就可以import faiss了。
5.Jupyter Notebook配置多個kernel
一般開發在jupyter下,默認是/usr/bin下的python解釋器,要使用faiss,需要切換python kernel到Anaconda環境下。需要給Jupyter Notebook配置多個IPython Kernel。
1)系統進入Anaconda解釋器環境下(配置PATH並source生效)
# 安裝ipykernel,命令
python -m pip install ipykernel
2)然後將Anaconda環境下的kernel安裝到jupyter中
命令如下,name自己命名
python -m ipykernel install --name python3.7
3)驗證
重啓jupyter notebook.
後臺啓動jupyter命令:
nohup jupyter notebook --allow-root > /data/tmpexec/jupyter/jupyter.log 2>&1 &
總結:爲開發方便,保留原python解釋器環境,對於新增Anaconda環境,採用兼容方式,在jupyter notebook中配置多個kernel來滿足生產。
6.jupyter開發測試
參考https://github.com/facebookresearch/faiss/wiki/Getting-started
成功在python下開發faiss庫。