You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FAISS.from_documents执行过慢如何优化?GPU版本安装失败求助

问题

我编写了如下代码:

from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import FAISS

codex = 'Some very very VERY long string'

chunk_size = 750
chunk_overlap = chunk_size // 25 
text_splitter = RecursiveCharacterTextSplitter(chunk_size=chunk_size, chunk_overlap=chunk_overlap)
docs = text_splitter.create_documents([codex])

modelPath = "intfloat/multilingual-e5-large"

model_kwargs = {'device': 'cuda'}
encode_kwargs = {'normalize_embeddings': False}

embeddings = HuggingFaceEmbeddings(
    model_name=modelPath,
    model_kwargs=model_kwargs,
    encode_kwargs=encode_kwargs
)

随后尝试构建向量数据库:

db = FAISS.from_documents(docs, embeddings)

但该代码段执行耗时极长(超过2小时后我终止了程序)。最初Python提示我安装faiss-cpu,我尝试安装GPU版本但未成功,请问如何提升该步骤的执行速度?

解决方案
  • 搞定FAISS GPU版本安装
    这是提速核心,FAISS GPU版本构建向量库的速度比CPU快一个数量级以上。安装失败多因环境不匹配:

    • 先用nvcc --version查看CUDA版本,安装对应版本的faiss-gpu,比如CUDA 11.8可执行pip install faiss-gpu==1.7.4;
    • 用conda安装成功率更高,执行conda install -c pytorch faiss-gpu,conda会自动适配环境。
  • 优化嵌入模型批量编码效率
    默认单条编码效率低,在encode_kwargs中添加批量参数,根据显存调整大小:

    encode_kwargs = {'normalize_embeddings': False, 'batch_size': 64}
    

    12G显存可尝试设为128,一次性处理更多文本块。

  • 调整文本分块参数
    若文本块总数过多(如百万级),适当调大chunk_size(比如1000或1500),减少需要编码的文档总数,间接提升速度。

  • 验证模型是否在GPU运行
    有时设置device='cuda'后模型仍在CPU运行,添加代码验证:

    print(embeddings.client.device)
    

    输出cuda才正常,否则用torch.cuda.is_available()检查PyTorch的GPU支持,重装对应CUDA版本的PyTorch。

  • 临时降级嵌入模型(应急方案)
    若GPU版本无法安装,可换成更小的模型如intfloat/multilingual-e5-base,编码速度会大幅提升,效果虽略有下降但能满足多数场景需求。

内容的提问来源于stack exchange,提问作者Shinshila Anarhist

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 12:16:10