本文整理汇总了Python中faiss.StandardGpuResources方法的典型用法代码示例。如果您正苦于以下问题:Python faiss.StandardGpuResources方法的具体用法?Python faiss.StandardGpuResources怎么用?Python faiss.StandardGpuResources使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类faiss
的用法示例。
在下文中一共展示了faiss.StandardGpuResources方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: test_knn_search
# 需要导入模块: import faiss [as 别名]
# 或者: from faiss import StandardGpuResources [as 别名]
def test_knn_search(size=10000, gpu_id=None):
x = np.random.rand(size, 512)
x = x.reshape(x.shape[0], -1).astype('float32')
d = x.shape[1]
tic = time.time()
if gpu_id is None:
index = faiss.IndexFlatL2(d)
else:
cfg = faiss.GpuIndexFlatConfig()
cfg.useFloat16 = False
cfg.device = gpu_id
flat_config = [cfg]
resources = [faiss.StandardGpuResources()]
index = faiss.GpuIndexFlatL2(resources[0], d, flat_config[0])
index.add(x)
print('Index built in {} sec'.format(time.time() - tic))
distances, I = index.search(x, 21)
print('Searched in {} sec'.format(time.time() - tic))
print(distances.shape)
print(I.shape)
print(distances[:5])
print(I[:5])
示例2: test_nmi_faiss
# 需要导入模块: import faiss [as 别名]
# 或者: from faiss import StandardGpuResources [as 别名]
def test_nmi_faiss(embeddings, labels):
res = faiss.StandardGpuResources()
flat_config = faiss.GpuIndexFlatConfig()
flat_config.device = 0
unique_labels = np.unique(labels)
d = embeddings.shape[1]
kmeans = faiss.Clustering(d, unique_labels.size)
kmeans.verbose = True
kmeans.niter = 300
kmeans.nredo = 10
kmeans.seed = 0
index = faiss.GpuIndexFlatL2(res, d, flat_config)
kmeans.train(embeddings, index)
dists, pred_labels = index.search(embeddings, 1)
pred_labels = pred_labels.squeeze()
nmi = normalized_mutual_info_score(labels, pred_labels)
print("NMI: {}".format(nmi))
return nmi
示例3: train_coarse_quantizer
# 需要导入模块: import faiss [as 别名]
# 或者: from faiss import StandardGpuResources [as 别名]
def train_coarse_quantizer(data, quantizer_path, num_clusters, hnsw=False, niter=10, cuda=False):
d = data.shape[1]
index_flat = faiss.IndexFlatL2(d)
# make it into a gpu index
if cuda:
res = faiss.StandardGpuResources()
index_flat = faiss.index_cpu_to_gpu(res, 0, index_flat)
clus = faiss.Clustering(d, num_clusters)
clus.verbose = True
clus.niter = niter
clus.train(data, index_flat)
centroids = faiss.vector_float_to_array(clus.centroids)
centroids = centroids.reshape(num_clusters, d)
if hnsw:
quantizer = faiss.IndexHNSWFlat(d, 32)
quantizer.hnsw.efSearch = 128
quantizer.train(centroids)
quantizer.add(centroids)
else:
quantizer = faiss.IndexFlatL2(d)
quantizer.add(centroids)
faiss.write_index(quantizer, quantizer_path)
示例4: train_index
# 需要导入模块: import faiss [as 别名]
# 或者: from faiss import StandardGpuResources [as 别名]
def train_index(data, quantizer_path, trained_index_path, fine_quant='SQ8', cuda=False):
quantizer = faiss.read_index(quantizer_path)
if fine_quant == 'SQ8':
trained_index = faiss.IndexIVFScalarQuantizer(quantizer, quantizer.d, quantizer.ntotal, faiss.METRIC_L2)
elif fine_quant.startswith('PQ'):
m = int(fine_quant[2:])
trained_index = faiss.IndexIVFPQ(quantizer, quantizer.d, quantizer.ntotal, m, 8)
else:
raise ValueError(fine_quant)
if cuda:
if fine_quant.startswith('PQ'):
print('PQ not supported on GPU; keeping CPU.')
else:
res = faiss.StandardGpuResources()
gpu_index = faiss.index_cpu_to_gpu(res, 0, trained_index)
gpu_index.train(data)
trained_index = faiss.index_gpu_to_cpu(gpu_index)
else:
trained_index.train(data)
faiss.write_index(trained_index, trained_index_path)
示例5: __init__
# 需要导入模块: import faiss [as 别名]
# 或者: from faiss import StandardGpuResources [as 别名]
def __init__(self, cell_size=20, nr_cells=1024, K=4, num_lists=32, probes=32, res=None, train=None, gpu_id=-1):
super(FAISSIndex, self).__init__()
self.cell_size = cell_size
self.nr_cells = nr_cells
self.probes = probes
self.K = K
self.num_lists = num_lists
self.gpu_id = gpu_id
# BEWARE: if this variable gets deallocated, FAISS crashes
self.res = res if res else faiss.StandardGpuResources()
self.res.setTempMemoryFraction(0.01)
if self.gpu_id != -1:
self.res.initializeForDevice(self.gpu_id)
nr_samples = self.nr_cells * 100 * self.cell_size
train = train if train is not None else T.randn(self.nr_cells * 100, self.cell_size)
self.index = faiss.GpuIndexIVFFlat(self.res, self.cell_size, self.num_lists, faiss.METRIC_L2)
self.index.setNumProbes(self.probes)
self.train(train)
示例6: _index_to_gpu
# 需要导入模块: import faiss [as 别名]
# 或者: from faiss import StandardGpuResources [as 别名]
def _index_to_gpu(index, device_id): # pragma: no cover
res = faiss.StandardGpuResources()
return faiss.index_cpu_to_gpu(res, device_id, index)
示例7: reserve_faiss_gpu_memory
# 需要导入模块: import faiss [as 别名]
# 或者: from faiss import StandardGpuResources [as 别名]
def reserve_faiss_gpu_memory(gpu_id=0):
"""
Reserves around 2.4 Gb memory on Titan Xp.
`r = reserve_faiss_gpu_memory()`
To release the memory run `del r`
Something like 200 Mb will still be hold afterwards.
"""
res = faiss.StandardGpuResources()
cfg = faiss.GpuIndexFlatConfig()
cfg.useFloat16 = False
cfg.device = gpu_id
index = faiss.GpuIndexFlatL2(res, 2048, cfg)
return index, res
示例8: run_kmeans
# 需要导入模块: import faiss [as 别名]
# 或者: from faiss import StandardGpuResources [as 别名]
def run_kmeans(x, nmb_clusters, verbose=False):
"""Runs kmeans on 1 GPU.
Args:
x: data
nmb_clusters (int): number of clusters
Returns:
list: ids of data in each cluster
"""
n_data, d = x.shape
# faiss implementation of k-means
clus = faiss.Clustering(d, nmb_clusters)
# Change faiss seed at each k-means so that the randomly picked
# initialization centroids do not correspond to the same feature ids
# from an epoch to another.
clus.seed = np.random.randint(1234)
clus.niter = 20
clus.max_points_per_centroid = 10000000
res = faiss.StandardGpuResources()
flat_config = faiss.GpuIndexFlatConfig()
flat_config.useFloat16 = False
flat_config.device = 0
index = faiss.GpuIndexFlatL2(res, d, flat_config)
# perform the training
clus.train(x, index)
_, I = index.search(x, 1)
losses = faiss.vector_to_array(clus.obj)
if verbose:
print('k-means loss evolution: {0}'.format(losses))
return [int(n[0]) for n in I], losses[-1]
示例9: knn_faiss
# 需要导入模块: import faiss [as 别名]
# 或者: from faiss import StandardGpuResources [as 别名]
def knn_faiss(feats, k):
import torch
import faiss
import pdb
N, dim = feats.shape
res = faiss.StandardGpuResources()
feats /= np.linalg.norm(feats).reshape(-1, 1)
flat_config = faiss.GpuIndexFlatConfig()
flat_config.device = int(torch.cuda.device_count()) - 1
index = faiss.GpuIndexFlatL2(res, dim, flat_config)
index.add(feats)
D, I = index.search(feats, k + 1)
pdb.set_trace()
示例10: __init__
# 需要导入模块: import faiss [as 别名]
# 或者: from faiss import StandardGpuResources [as 别名]
def __init__(self, opt):
super(ChamferLoss, self).__init__()
self.opt = opt
self.dimension = 3
self.k = 1
# we need only a StandardGpuResources per GPU
self.res = faiss.StandardGpuResources()
self.res.setTempMemoryFraction(0.1)
self.flat_config = faiss.GpuIndexFlatConfig()
self.flat_config.device = opt.gpu_id
# place holder
self.forward_loss = torch.FloatTensor([0])
self.backward_loss = torch.FloatTensor([0])
示例11: get_nn_avg_dist
# 需要导入模块: import faiss [as 别名]
# 或者: from faiss import StandardGpuResources [as 别名]
def get_nn_avg_dist(emb, query, knn):
"""
Compute the average distance of the `knn` nearest neighbors
for a given set of embeddings and queries.
Use Faiss if available.
"""
if FAISS_AVAILABLE:
emb = emb.cpu().numpy()
query = query.cpu().numpy()
if hasattr(faiss, 'StandardGpuResources'):
# gpu mode
res = faiss.StandardGpuResources()
config = faiss.GpuIndexFlatConfig()
config.device = 0
index = faiss.GpuIndexFlatIP(res, emb.shape[1], config)
else:
# cpu mode
index = faiss.IndexFlatIP(emb.shape[1])
index.add(emb)
distances, _ = index.search(query, knn)
return distances.mean(1)
else:
bs = 1024
all_distances = []
emb = emb.transpose(0, 1).contiguous()
for i in range(0, query.shape[0], bs):
distances = query[i:i + bs].mm(emb)
best_distances, _ = distances.topk(knn, dim=1, largest=True, sorted=True)
all_distances.append(best_distances.mean(1).cpu())
all_distances = torch.cat(all_distances)
return all_distances.numpy()
示例12: BuildKNNGraphByFAISS_GPU
# 需要导入模块: import faiss [as 别名]
# 或者: from faiss import StandardGpuResources [as 别名]
def BuildKNNGraphByFAISS_GPU(db,k):
dbsize, dim = db.shape
flat_config = faiss.GpuIndexFlatConfig()
flat_config.device = 0
res = faiss.StandardGpuResources()
nn = faiss.GpuIndexFlatL2(res, dim, flat_config)
nn.add(db)
dists,idx = nn.search(db, k+1)
return idx[:,1:],dists[:,1:]
示例13: __init__
# 需要导入模块: import faiss [as 别名]
# 或者: from faiss import StandardGpuResources [as 别名]
def __init__(self, n_bits, n_probes):
self.name = 'FaissGPU(n_bits={}, n_probes={})'.format(
n_bits, n_probes)
self._n_bits = n_bits
self._n_probes = n_probes
self._res = faiss.StandardGpuResources()
self._index = None
示例14: _retrieve_knn_faiss_gpu_inner_product
# 需要导入模块: import faiss [as 别名]
# 或者: from faiss import StandardGpuResources [as 别名]
def _retrieve_knn_faiss_gpu_inner_product(query_embeddings, db_embeddings, k, gpu_id=0):
"""
Retrieve k nearest neighbor based on inner product
Args:
query_embeddings: numpy array of size [NUM_QUERY_IMAGES x EMBED_SIZE]
db_embeddings: numpy array of size [NUM_DB_IMAGES x EMBED_SIZE]
k: number of nn results to retrieve excluding query
gpu_id: gpu device id to use for nearest neighbor (if possible for `metric` chosen)
Returns:
dists: numpy array of size [NUM_QUERY_IMAGES x k], distances of k nearest neighbors
for each query
retrieved_db_indices: numpy array of size [NUM_QUERY_IMAGES x k], indices of k nearest neighbors
for each query
"""
import faiss
res = faiss.StandardGpuResources()
flat_config = faiss.GpuIndexFlatConfig()
flat_config.device = gpu_id
# Evaluate with inner product
index = faiss.GpuIndexFlatIP(res, db_embeddings.shape[1], flat_config)
index.add(db_embeddings)
# retrieved k+1 results in case that query images are also in the db
dists, retrieved_result_indices = index.search(query_embeddings, k + 1)
return dists, retrieved_result_indices
示例15: _retrieve_knn_faiss_gpu_euclidean
# 需要导入模块: import faiss [as 别名]
# 或者: from faiss import StandardGpuResources [as 别名]
def _retrieve_knn_faiss_gpu_euclidean(query_embeddings, db_embeddings, k, gpu_id=0):
"""
Retrieve k nearest neighbor based on inner product
Args:
query_embeddings: numpy array of size [NUM_QUERY_IMAGES x EMBED_SIZE]
db_embeddings: numpy array of size [NUM_DB_IMAGES x EMBED_SIZE]
k: number of nn results to retrieve excluding query
gpu_id: gpu device id to use for nearest neighbor (if possible for `metric` chosen)
Returns:
dists: numpy array of size [NUM_QUERY_IMAGES x k], distances of k nearest neighbors
for each query
retrieved_db_indices: numpy array of size [NUM_QUERY_IMAGES x k], indices of k nearest neighbors
for each query
"""
import faiss
res = faiss.StandardGpuResources()
flat_config = faiss.GpuIndexFlatConfig()
flat_config.device = gpu_id
# Evaluate with inner product
index = faiss.GpuIndexFlatL2(res, db_embeddings.shape[1], flat_config)
index.add(db_embeddings)
# retrieved k+1 results in case that query images are also in the db
dists, retrieved_result_indices = index.search(query_embeddings, k + 1)
return dists, retrieved_result_indices