Closed sengineer00 closed 1 month ago
你自己开的多线程?FAISS属于文件,明显不能并行写入。
不是自己开的多线程,是项目的上传接口支持多个文件同时上传,项目后台本身也是用多线程逻辑处理的
说一下你的操作步鄹,我试试能不能复现。 另外,大量文件不建议走 API,至少不要一次性走太多。最好是到服务器运行 chatchat kb -r 命令。
其实就是循环调用upload接口,每次传送6个文件,我设置的是600的超时时间,我发现有的上传会超时,这时候其实客户端已经停止请求了,但是langchain服务端还在运行上一次请求的upload逻辑。另外,我修改了kb_doc_api.py里面的update_docs方法,在接口快要结束时,我读取了向量库的文件并做了bm25关键字检索的预处理过程,将预处理后的结果保存在本地我呢间。这样修改的目的是为了保证在关键字检索知识库的时候加快相应速度,这里我读取向量库的方法比较粗暴,没有用.acquire()锁, v = kb.load_vector_store().obj.docstore._dict.values()。 我检查了faiss_kb_service.py中的do_add_doc方法,用了with self.load_vector_store().acquire() as vs:,按理说向量库更新这个动作应该是线程安全的了吧。
建议你把读取向量库和 bm25 预处理的功能先禁掉,超时设大一点,再试试。
嗯,我准备加上锁,然后超时加大一些再试试
2024-09-06 12:08:33.117 | ERROR | chatchat.server.knowledge_base.kb_cache.faiss_cache:load_vector_store:140 - Error in struct faiss::Index __cdecl faiss::read_index(struct faiss::IOReader ,int) at D:\a\faiss-wheels\faiss-wheels\faiss\faiss\impl\index_read.cpp:540: Error: 'ret == (size)' failed: read error in D:\data\chatchat_data\data\knowledge_base\29082024\vector_store\text-embedding-3-large\index.faiss: 448339923 != 448339968 (No error) 2024-09-06 12:08:33.118 | ERROR | chatchat.server.chat.kb_chat:knowledge_base_chat_iterator:301 - error in knowledge chat: 向量库 29082024 加载失败。