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
相关产品推荐
相关产品推荐

