天天看點

【資料庫】——faiss ubuntu安裝與簡單測試python

簡介: Faiss是Facebook AI團隊開源的針對聚類和相似性搜尋庫,為稠密向量提供高效相似度搜尋和聚類,支援十億級别向量的搜尋,是目前最為成熟的近似近鄰搜尋庫。它包含多種搜尋任意大小向量集(備注:向量集大小由RAM記憶體決定)的算法,以及用于算法評估和參數調整的支援代碼。Faiss用C++編寫,并提供與Numpy完美銜接的Python接口。除此以外,對一些核心算法提供了GPU實作。

應用場景: 人臉識别,以圖搜圖 …

作者: Facebook

1. 建立一個conda環境

這裡建立一個conda環境,用于安裝各個軟體,并做相應的測試。

  1. 建立conda環境

conda create -n faiss python==3.7.7

  1. 安裝faiss-cpu

官方給的安裝方案pytorch源下的安裝。但是這速度很慢,其次容易出現:Intel MKL FATAL ERROR: Cannot load libmkl_avx.so or libmkl_def.so。這裡用清華的pytorch源

conda install faiss-cpu -c pytorch

  1. 用清華的pytorch源安裝
source activate faiss
conda install faiss-cpu --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
           

可能問題

  • Intel MKL FATAL ERROR: Cannot load libmkl_avx.so or libmkl_def.so

用清華源安裝faiss-cpu

3. 測試

硬體

  • 用指令看cpu型号,cat /proc/cpuinfo

    Intel® Core™ i7-8700K CPU @ 3.70GHz

code

import faiss
import numpy as np 
import time

d = 64
nb = 100000
nq = 10000
xb = np.random.random((nb, d)).astype("float32")
xb[:, 0] += np.arange(nb) / 1000.

xq = np.random.random((nq, d)).astype("float32")
xq[:, 0] += np.arange(nq) / 1000.

import faiss                   # make faiss available
index = faiss.IndexFlatL2(d)   # build the index
print(index.is_trained)
index.add(xb)                  # add vectors to the index
print(index.ntotal)

k = 4                          # we want to see 4 nearest neighbors
start_t = time.time()
D, I = index.search(xb[[1,10,20,30,40]], k) # D:比對的索引,I:D索引對應的L2距離
print("use time:",time.time() - start_t)
print(I)
print(D)

start_t = time.time()
D, I = index.search(xq, k)     # actual search
print("use time:",time.time() - start_t)
print(I[:5])                   # neighbors of the 5 first queries
print(I[-5:])                  # neighbors of the 5 last queries
           

True

100000

use time: 0.0044291019439697266

[[ 1 762 167 1115]

[ 10 819 522 388]

[ 20 319 754 50]

[ 30 553 628 707]

[ 40 91 736 692]]

[[0. 5.8098564 7.0517216 7.0524645]

[0. 5.7370405 6.1728783 6.3311534]

[0. 5.8789406 6.379945 6.4565234]

[0. 6.3657794 6.4845867 6.486966 ]

[0. 6.7513127 6.7710495 6.922102 ]]

use time: 0.803516149520874

[[710 724 700 707]

[ 4 39 643 516]

[ 13 358 618 169]

[290 264 424 37]

[463 790 401 356]]

[[ 9201 9618 9177 9079]

[ 9240 10550 9507 9225]

[ 9665 9903 9887 10331]

[ 9758 9663 10844 9799]

[ 9926 8750 9507 9940]]

解析

  • 看代碼中的注釋
  • 在10w的底庫中,檢索1w,才0.8s。

reference

  1. https://www.cnblogs.com/yhzhou/p/10568728.html

繼續閱讀