【问题标题】:Faiss : How to create an Index of 10M vectors of size 1024Faiss:如何创建大小为 1024 的 10M 向量的索引
【发布时间】:2022-03-17 09:03:14
【问题描述】:

我想创建一个包含近 10M 大小为 1024 的向量的索引。这是我使用的代码。

import numpy as np
import faiss  
import random                

f = 1024

vectors = []
no_of_vectors=10000000
for k in range(no_of_vectors):
    v = [random.gauss(0, 1) for z in range(f)]
    vectors.append(v)
        
np_vectors = np.array(vectors).astype('float32')

index = faiss.IndexFlatL2(f)  
index.add(np_vectors)                 

faiss.write_index(index, "faiss_index.index")

该代码适用于少量向量。但是当向量的数量大约为 2M 时,内存限制就会超过。我使用index.add() 而不是将向量附加到列表(向量=[])。但效果并不好。

我想知道如何为大量向量创建索引。

【问题讨论】:

  • 为什么需要 10M 大小为 1024 的向量?!这是令人难以置信的巨大!?!
  • 我正在创建一个文档相似性检查工具。它由一个大型文档数据库组成。我需要将所有句子的激光嵌入添加到索引中。大约有10M。
  • 嗯,也许使用 numpy 或 pandas?

标签: python memory faiss


【解决方案1】:

如果您想继续使用 Faiss,可以参考选择不同的索引,可能是 HNSW 或 IVFPQ。

ref: https://wangzwhu.github.io/home/file/acmmm-t-part3-ann.pdf 转到最后一页。

另一种选择是尝试一些分布式解决方案,例如Milvus,它构建了像faiss这样的Ann库

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-13
  • 2012-08-15
相关资源
最近更新 更多