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

运行FAISS相似度搜索时Jupyter内核崩溃问题求助

FAISS相似度搜索导致Jupyter内核崩溃(Intel MacBook Pro环境)

问题概述

使用LangChain 0.2.0构建FAISS向量存储库后,执行similarity_search时Jupyter内核直接崩溃。已尝试重建向量库、重装faiss-cpu、关闭高资源程序,均未解决问题。运行环境为Intel芯片MacBook Pro、Python 3.9、Jupyter Notebook。

相关代码:

from langchain_community.document_loaders import PyPDFLoader
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter

f = open('credentials.txt')
OPENAI_API_KEY = f.read()
embeddings_model = OpenAIEmbeddings(api_key=OPENAI_API_KEY)

document_loader = PyPDFLoader('filename.pdf')
text_splitter=RecursiveCharacterTextSplitter()
documents = document_loader.load_and_split(text_splitter)

vectorstore = FAISS.from_documents(documents, embeddings_model)
vectorstore.similarity_search('query')

可能的原因及解决方案

1. 内存过载

PDF文档拆分后生成的文本块过多,向量存储库体积过大,执行相似度搜索时内存占用峰值超出系统可用内存,导致内核崩溃。

  • 解决方案:缩小文本拆分的块大小,减少向量数量:
    text_splitter = RecursiveCharacterTextSplitter(
        chunk_size=500,  # 调整为更小的块大小
        chunk_overlap=50
    )
    
  • 额外建议:查看拆分后的len(documents),如果数量上千,考虑进一步缩小chunk_size,或者过滤掉无意义的短文本块。

2. FAISS与LangChain版本不兼容

LangChain 0.2.0对FAISS版本有特定依赖,当前安装的faiss-cpu版本可能存在兼容性问题。

  • 解决方案:安装LangChain 0.2.0兼容的FAISS版本,例如:
    pip uninstall -y faiss-cpu
    pip install faiss-cpu==1.7.4
    

3. Jupyter内核资源限制

Jupyter内核默认的内存配额可能不足以支撑相似度搜索的内存需求,即使系统有剩余内存。

  • 解决方案:
    1. 尝试在终端直接运行代码(而非Jupyter),验证是否仍会崩溃:将代码保存为.py文件,执行python your_script.py。如果终端运行正常,说明问题出在Jupyter内核配置。
    2. 修改Jupyter内核配置,增加内存限制:
      • 生成Jupyter配置文件:jupyter notebook --generate-config
      • 打开配置文件,找到c.NotebookApp.max_buffer_size,取消注释并设置较大值(例如c.NotebookApp.max_buffer_size = 10737418240,即10GB)。

4. Embeddings批量生成异常

使用FAISS.from_documents批量生成embeddings时,可能存在隐藏的内存泄漏或数据异常,导致后续搜索出错。

  • 解决方案:手动分批生成embeddings并构建FAISS库:
    # 拆分文档为小批次
    batch_size = 100
    batches = [documents[i:i+batch_size] for i in range(0, len(documents), batch_size)]
    
    # 初始化FAISS库
    vectorstore = None
    for batch in batches:
        contents = [doc.page_content for doc in batch]
        embeddings = embeddings_model.embed_documents(contents)
        if vectorstore is None:
            vectorstore = FAISS.from_embeddings(
                list(zip(contents, embeddings)),
                embeddings_model
            )
        else:
            vectorstore.add_embeddings(
                list(zip(contents, embeddings))
            )
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 08:44:54