Langchain에서 similarity search를 연속적으로 수행하면 속도가 느려지는 문제

김인조·2024년 3월 15일
post-thumbnail

문제 상황


최근 사이드 프로젝트로 친구와 함께 라이브 방송용 챗봇을 만들고 있습니다.

챗봇의 답변 품질을 높이기 위해 RAG 기법을 사용하고 있는데, 연속으로 프롬프트를 제공하니 답변 생성이 느려지는 문제가 발생하였습니다.

처음엔 OpenAI가 답변을 생성하는 과정에서 시간이 지연되는줄 알았습니다.

그런데, 확인해보니 vector DB의 similarity search 과정에서 이미 많은 시간이 소모되고 있더라고요.

import time
import random 

for query in queries:
    # time measure start 
    start_time = time.time()

    # search 
    docs = db.similarity_search(query)

    # time measure end 
    end_time = time.time()

    # print
    print(f"Query: {query}")
    print(f"Matched doc: {docs[0].page_content}")
    print(f"Time: {end_time - start_time}")
    print("\n")
    print("----------------------------------")

아래에 보시는것처럼 초기 검색 속도는 2초정도로 매우 짧았으나, 3번째 프롬프트부터는 검색시간이 20-40초로 급격히 증가하고 있습니다.

3번째 프롬프트 이후로 시간이 20초로 증가



임시 해결


이런 경우 이전의 작업을 다 완료하지 않은 상태에서 다음 작업을 곧 바로 수행하려다보니 시스템의 과부화가 걸리면서 지연이 생기는 경우가 많습니다.

그래서 각 loop마다 15-20초 가량의 time delay를 주고 경과를 살펴보기로 하였습니다.

# 시간 지연을 15-20초 적용한 코드 
import time
import random 

for query in queries:
    # random time between 15, 20
    delayed_time = random.randint(15, 20)

    # time measure start 
    start_time = time.time()

    # search 
    docs = db.similarity_search(query)

    # time measure end 
    end_time = time.time()

    # print
    print(f"Query: {query}")
    print(f"Matched doc: {docs[0].page_content}")
    print(f"Time: {end_time - start_time}")
    print("\n")
    print("----------------------------------")

    time.sleep(delayed_time)

빠르게 답변 생성

빙고⭐️ 쿼리마다 딜레이를 주니 similarity search에서 딜레이 되는 문제가 해결되었습니다. 생각보다 싱겁게 문제를 해결했네요.

여담으로 10초 가량 딜레이를 주는 것은 큰 효과가 없었습니다.



그래서 원인이 뭔데?


솔직히 모르겠습니다. 아시는 분은 댓글 부탁드립니다.

CPU나 메모리에 불필요한 데이터가 쌓여 과부화가 걸렸을거라고 생각했지만 확인해보니 그렇지도 않았습니다.

저희도 원인이 궁금해서 열심히 구글링을 해봤는데 관련 자료를 찾을 수가 없더라고요.

챗봇 시스템 특성상 저희 실험처럼 연속으로 프롬프트를 입력하는 경우가 없기도 하고, 그 지연 시간도 20초 가량으로 짧기 때문에 이런 문제를 겪으신 분이 거의 없는 것 같습니다.

비슷한 문제를 호소하는 글들을 아래에 링크 달아둘테니 관심있는 분들은 보시고 원인을 분석해보셔도 좋을 것 같습니다.

Need help in increasing the speed of my llm based application

RetrievalQA costs long time to get the answer

1개의 댓글

comment-user-thumbnail
2024년 3월 15일

저도 비슷한 문제를 겪었는데 해결방법 궁금하네요 포스팅 잘 읽고 갑니다!

답글 달기