Я пытаюсь выполнить индексный поиск, учитывая вектор в индексе FAISS, который сохраняется на диске и читается в память. Это происходит в функции, которая называется в конечной точке с использованием FastApi.
# Endpoint
@app.get('/neighbours', response_model=Neighbours)
async def get_neighbours(case: str, ids: str, request: Request):
"""
Retrieves a set of neighbors for a single id
"""
id_list = ids.split(';')
return Neighbours(result=get_neighbours_from_id(case, [int(id) for id in id_list]))
< /code>
# Functions and objects
class Neighbour(BaseModel):
id: int
neighbours: List[int]
class Neighbours(BaseModel):
result: List[Neighbour]
def get_neighbours_from_id(case, ids):
case_path = validate_case_path(case)
index = read_index(case_path.as_posix())
# The above works well, the index is loaded properly.
vec = index.reconstruct_n(0, 1)
# This also works, I can see the vector being reconstructed.
faulthandler.enable()
faulthandler.dump_traceback()
# Enabling faulthandler for the traceback
d, i = index.search(vec, 1)
# This is where the code crashes.
< /code>
Код вылетает, когда я пытаюсь выполнить поиск по загруженному индексу с учетом реконструированного вектора, со следующим Traceback: < /p>
Current thread 0x000000010781adc0 (most recent call first):
File "/../api/app/vectors.py", line 37 in get_neighbours_from_id
File ".../api/service.py", line 87 in get_neighbours
File ".../pypoetry/virtualenvs/env1-py3.8/lib/python3.8/site-packages/fastapi/routing.py", line 160 in run_endpoint_function
File ".../pypoetry/virtualenvs/env1-py3.8/lib/python3.8/site-packages/fastapi/routing.py", line 227 in app
File ".../pypoetry/virtualenvs/env1-py3.8/lib/python3.8/site-packages/starlette/routing.py", line 61 in app
File ".../pypoetry/virtualenvs/env1-py3.8/lib/python3.8/site-packages/starlette/routing.py", line 259 in handle
File ".../pypoetry/virtualenvs/env1-py3.8/lib/python3.8/site-packages/starlette/routing.py", line 656 in __call__
File ".../pypoetry/virtualenvs/env1-py3.8/lib/python3.8/site-packages/fastapi/middleware/asyncexitstack.py", line 18 in __call__
File ".../pypoetry/virtualenvs/env1-py3.8/lib/python3.8/site-packages/starlette/exceptions.py", line 71 in __call__
File ".../pypoetry/virtualenvs/env1-py3.8/lib/python3.8/site-packages/starlette/middleware/cors.py", line 84 in __call__
File ".../pypoetry/virtualenvs/env1-py3.8/lib/python3.8/site-packages/starlette/middleware/base.py", line 34 in coro
File ".../anaconda3/lib/python3.8/asyncio/events.py", line 81 in _run
File ".../anaconda3/lib/python3.8/asyncio/base_events.py", line 1859 in _run_once
File ".../anaconda3/lib/python3.8/asyncio/base_events.py", line 570 in run_forever
File ".../anaconda3/lib/python3.8/asyncio/base_events.py", line 603 in run_until_complete
File ".../anaconda3/lib/python3.8/asyncio/runners.py", line 43 in run
File ".../run_service.py", line 19 in
Fatal Python error: Segmentation faultFatal Python error: Fatal Python error:
Segmentation faultFatal Python error:
Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)
Traceback заставляет меня думать, что это что-то связано с Asyncio или многопоточным чтением в FastApi?
Я пытаюсь выполнить индексный поиск, учитывая вектор в индексе FAISS, который сохраняется на диске и читается в память. Это происходит в функции, которая называется в конечной точке с использованием FastApi.[code]# Endpoint @app.get('/neighbours', response_model=Neighbours) async def get_neighbours(case: str, ids: str, request: Request): """ Retrieves a set of neighbors for a single id """ id_list = ids.split(';') return Neighbours(result=get_neighbours_from_id(case, [int(id) for id in id_list])) < /code> # Functions and objects class Neighbour(BaseModel): id: int neighbours: List[int]
class Neighbours(BaseModel): result: List[Neighbour]
def get_neighbours_from_id(case, ids):
case_path = validate_case_path(case)
index = read_index(case_path.as_posix()) # The above works well, the index is loaded properly.
vec = index.reconstruct_n(0, 1) # This also works, I can see the vector being reconstructed.
faulthandler.enable() faulthandler.dump_traceback() # Enabling faulthandler for the traceback
d, i = index.search(vec, 1) # This is where the code crashes. < /code> Код вылетает, когда я пытаюсь выполнить поиск по загруженному индексу с учетом реконструированного вектора, со следующим Traceback: < /p> Current thread 0x000000010781adc0 (most recent call first): File "/../api/app/vectors.py", line 37 in get_neighbours_from_id File ".../api/service.py", line 87 in get_neighbours File ".../pypoetry/virtualenvs/env1-py3.8/lib/python3.8/site-packages/fastapi/routing.py", line 160 in run_endpoint_function File ".../pypoetry/virtualenvs/env1-py3.8/lib/python3.8/site-packages/fastapi/routing.py", line 227 in app File ".../pypoetry/virtualenvs/env1-py3.8/lib/python3.8/site-packages/starlette/routing.py", line 61 in app File ".../pypoetry/virtualenvs/env1-py3.8/lib/python3.8/site-packages/starlette/routing.py", line 259 in handle File ".../pypoetry/virtualenvs/env1-py3.8/lib/python3.8/site-packages/starlette/routing.py", line 656 in __call__ File ".../pypoetry/virtualenvs/env1-py3.8/lib/python3.8/site-packages/fastapi/middleware/asyncexitstack.py", line 18 in __call__ File ".../pypoetry/virtualenvs/env1-py3.8/lib/python3.8/site-packages/starlette/exceptions.py", line 71 in __call__ File ".../pypoetry/virtualenvs/env1-py3.8/lib/python3.8/site-packages/starlette/middleware/cors.py", line 84 in __call__ File ".../pypoetry/virtualenvs/env1-py3.8/lib/python3.8/site-packages/starlette/middleware/base.py", line 34 in coro File ".../anaconda3/lib/python3.8/asyncio/events.py", line 81 in _run File ".../anaconda3/lib/python3.8/asyncio/base_events.py", line 1859 in _run_once File ".../anaconda3/lib/python3.8/asyncio/base_events.py", line 570 in run_forever File ".../anaconda3/lib/python3.8/asyncio/base_events.py", line 603 in run_until_complete File ".../anaconda3/lib/python3.8/asyncio/runners.py", line 43 in run File ".../run_service.py", line 19 in Fatal Python error: Segmentation faultFatal Python error: Fatal Python error:
Segmentation faultFatal Python error: Process finished with exit code 139 (interrupted by signal 11: SIGSEGV) [/code] Traceback заставляет меня думать, что это что-то связано с Asyncio или многопоточным чтением в FastApi?[code]import faiss
index = faiss.read_index("my_index.index")
vec = index.reconstruct_n(0, 1)
d, i = index.search(vec, 1)
print(i) # Works properly. [/code] Я рассмотрел эту проблему, но, похоже, она зафиксирована в новых версиях Faiss, и это то, что я использую. Большое спасибо за помощь!
Несогласованный индекс возвращается из index.search после сохранения индекса на диск.
quantizer = faiss.index_factory(1024, Flat , faiss.METRIC_INNER_PRODUCT)
index = faiss.IndexIVFPQ(quantizer, 1024, nlist, 8, 8)
index2 = faiss.IndexIDMap(index)...
Я объединяю два вторжения, и оба являются численными встроениями, имеющими форму (1,1)
combined_embeddings = np.hstack((price_embeddings, location_embeddings))
index = faiss.IndexFlatL2(combined_embeddings.shape )...
Я объединяю два вторжения, и оба являются численными встроениями, имеющими форму (1,1)
combined_embeddings = np.hstack((price_embeddings, location_embeddings))
index = faiss.IndexFlatL2(combined_embeddings.shape )...