RE 從零開始的faiss庫的編譯安裝

2021-10-19 13:13:28 字數 4433 閱讀 3890

最近facebook更新了faiss的install.md,所以其實沒什麼好寫的,但是這一路上踩了不少坑還是稍作記錄。

雙系統安裝教程:win10+ubuntu16.04雙系統

gcc、g++、gfortran安裝和降級

推薦安裝gcc6以下版本,方便後面安裝gpu和faiss。ubuntu16.04預設gcc/g++ -5.4,gfortran版本要與gcc/g++相同。

sudo apt-get install -y gcc-5

sudo apt-get install -y g++-5

sudo apt-get install -y gfortran-5

#實現gcc/g++/gfortran降級

cd /usr/bin

sudo rm gcc

sudo ln -s gcc-5 gcc

sudo rm g++

sudo ln -s g++-5 g++

sudo ln -s gfortran-5 gfortran

cmake安裝和公升級

ubuntu16.04的預設cmake版本低於3.17.0,faiss的cmakelists.txt最低版本要求3.17,因此需要對cmake進行公升級

wget 

tar -xzvf cmake-3.17.0-linux-x86_64.tar.gz

# 解壓出來的包,將其放在 /opt 目錄下,其他目錄也可以,主要別以後不小心刪了

sudo mv cmake-3.17.0-linux-x86_64 /opt/cmake-3.17.0

# 建立軟鏈結

sudo ln -sf /opt/cmake-3.17.0/bin/* /usr/bin/

# 檢視 cmake 版本

cmake --version

conda安裝

conda install -c pytorch faiss-cpu直接安裝cpu-only version就python可以直接呼叫

gpu & cuda安裝(大坑,可以跳過)

faiss在編譯時可以自行選擇是否編譯gpu模組,如果不用也就不需要裝這些東西,我反正因為個人原因沒用。好吧其實是裝了驅動和cuda過後編譯也一直報莫名其妙的報錯,懶得搞了就乾脆不裝了。

網上關於nvidia顯示卡驅動的安裝方法很多,最簡單的直接用命令列安裝

#新增源

sudo add-apt-repository ppa:graphics-drivers/ppa

sudo apt-get update

ubuntu-drivers devices

#自動安裝推薦版本的驅動

sudo ubuntu-drivers autoinstall

#檢視是否安裝成果,若失敗直接解除安裝,否則重啟後容易開不了機

nvidia-smi

#解除安裝sudo apt-get remove --purge nvidia*

#解除安裝可能存在的舊版本 nvidia 驅動(對沒有安裝過 nvidia 驅動的主機,這步可以省略,但推薦執行,無害),如果你安裝失敗了也需要執行這一步。

sudo apt-get remove --purge nvidia*

#若安裝失敗也是這樣解除安裝以及

./nvidia-linux-x86_64-430.64.run --uninstall #確保解除安裝乾淨。

#禁用nouveau驅動

sudo vi /etc/modprobe.d/blacklist-nouveau.conf

#在檔案 blacklist-nouveau.conf 中加入如下內容:

blacklist nouveau

blacklist lbm-nouveau

options nouveau modeset=0

alias nouveau off

alias lbm-nouveau off

#儲存 :wq

#禁用nouveau 核心模組

echo options nouveau modeset=0 | sudo tee -a /etc/modprobe.d/nouveau-kms.conf

sudo update-initramfs -u

reboot #重啟

lsmod |grep nouveau #無顯示則禁用nouveau成功

sudo update-initramfs -u可能會出現一些warning報缺少韌體,可以參考這篇文章。進入bios關閉secure boot為disable,否則無法安裝成功。按ctr+alt+f1進入tty1字元終端介面。在tty1終端裡執行

sudo service lightdm stop

cd ~/downloads

chmod a+x nvidia-linux-x86_64-430.64.run

sudo ./nvidia-linux-x86_64-430.64.run --no-opengl-files #不安裝opengl

安裝過程中會出現一條什麼pre-install script failed的資訊,不用在意選擇繼續安裝就好。還有一些其他選項。

#驗證安裝是否成功

nvidia-smi

sudo service lightdm start #返回桌面,沒自動跳的話ctrl+alt+f7

sudo service lightdm stop

sudo chmod a+x cuda_10.0_linux.run

sudo ./cuda_10.0_linux.run --no-opengl-libs #不安裝opengl

安裝過程中會有乙個選項問你是否安裝驅動,選no,因為我們之前已經安裝過驅動了,安裝完成後將cuda寫入環境

vim ~/.bashrc

export cuda_home=/usr/local/cuda-10.0

export ld_library_path=/usr/local/cuda-10.0/lib64:$ld_library_path

export path=/usr/local/cuda-10.0/bin:$path

#儲存 :wq

# 驗證cuda是否安裝成功

nvcc --version #顯示cuda版本

openblas & lapack 安裝
#在/opt下openblas安裝

cd /opt

git clone

cd openblas

make fc=gfortran

make install

#之後將編譯好的動態庫鏈結至/usr/lib目錄下

ln -s /opt/openblas/lib/libopenblas.so /usr/lib/libopenblas.so

#在/etc/profile中新增環境變數

sudo vim /etc/profile

ld_library_path=/opt/openblas/lib

export ld_library_path

#lapack安裝

wget

tar -zxf lapack-3.4.2.tgz

cd lapack-3.4.2

cp ./install/make.inc.gfortran ./

mv make.inc.gfortran make.inc

#修改makefile中的注釋,就在前面幾行

#lib: lapacklib tmglib

lib: blaslib variants lapacklig tmglib

#儲存 :wq

#開始編譯

make

cd lapacke

make

# 將lapacke的標頭檔案複製到系統頭檔案目錄

cp include/*.h /usr/include

# 返回到 lapack-3.4.2 目錄

cd ..

# 將生成的所有庫檔案複製到系統庫目錄

cp *.a /usr/lib

安裝文件已經寫得很詳細了,在此記錄一下我的安裝過程

git clone

#進入faiss目錄,建立build資料夾

cd faiss

mkdir build

#開始編譯,不編譯gpu

cmake -b build . -dfaiss_enable_gpu=off -dbuild_shared_libs=on

make -c build -j faiss

sudo make -c build install

...後面測試**就跟github上的文件一樣了,有興趣的可以自己看下,測試成功則表示安裝成功

Re 從零開始的動態規劃

有的人,天天在說自己打cf太菜,要學線性規劃,卻連第一步都沒邁出去,不會吧,不會吧,不會那個人就是你吧 f 跑來寫部落格的時間都可以用來學幾個點 咳咳咳言歸正傳,這是我第一篇部落格,用來記錄我假期演算法的學習之路,先立下flag,以後我要每天一更!也許這樣自己就不會咕咕咕 步驟 階段 狀態 決策 策...

Re從零開始的每一天

廣告 日記pro 密碼請私信 雖然 re從零開始的異世界生活 這番我還沒看過 但這番真的太有名了,所以說就想到了,用一下 新的一年,希望我能更好,能把想做的事情堅持下去,也能做到我想做的事情 本日記僅限寒暑假,平時幾乎沒時間,如果記起來的話,會考慮寫一下 時間 time 計畫 plan 詳細資訊 d...

Re 從零開始的Python2 7學習 0

python簡易優雅.life is short,use python.python是guido van rossum在1989年聖誕節期間創造的語言.一邊看廖大教程一邊敲.關於python的基本輸入輸出 print 是python裡最基本也是最常用到的咒語.後來創造這個世界的人發現有些人念得太快了...