AI/Gen AI

Project HowAbout RAG API - Outro: TPM Back Off 적용

문괜 2024. 10. 3. 12:00
반응형

Vector Store에서의 TPM 문제 개선에 이어 이번에는 Generation과 Query Translation파트에서의 개선을 진행해 봤다.

  1. Vector Store 생성 파트
    • 사용 토큰 수 지정
    • Batch API 사용
    • Embedding Model 변경
  2. Query Translation & Generation 파트
    • Tenacity 혹은 Backoff 적용

 

문제 개선에 대한 동기와 그 선정과정이 궁금하다면 아래의 링크로 가면 된다.

Project HowAbout RAG API - Outro: Optimization - TPM 문제 정의

 

실시간 응답이 필요한 경우 Tenacity나 Backoff를 사용해야 한다. 하지만 여기서 중요한 부분이 있는데 OpenAI에서 이 방식을 추천하나 절대로 장담하지 못한다는 사실이다. 

 

그래서 직접적인 비교를 통해 정확한 수치를 얻으려고 했으나 로컬환경에서 위와 같은 문제를 테스트하기가 까다로웠다. 그리고 이런 문제는 단순히 Tenacity 뿐만이 아니라 request queue를 설정해 보는 것도 나쁘지 않겠다는 생각이 들었다. 일단은  Tenacity를 적용한 코드는 아래와 같다.

from tenacity import (
    retry,
    stop_after_attempt,
    wait_random_exponential,
)

@retry(wait=wait_random_exponential(min=1, max=20), stop=stop_after_attempt(3))
def completion_with_backoff(qa_chain, question):
    return qa_chain.invoke({"question":question})

 

그리고 로컬에서 아래와 같은 코드로 테스트를 진행했으나 결과가 좋지는 않았다.

import time
from time import sleep

for i in range(100):
  start_time = time.time()
  final_rag_chain.invoke({"question":"성북구에서 할 수 있는 식도락 데이트!"})
  end_time = time.time()
  print(f"{i+1} Elapsed Time: {end_time - start_time:.2f} seconds")

for i in range(100):
  start_time = time.time()
  completion_with_backoff(final_rag_chain, question = "성북구에서 할 수 있는 식도락 데이트!")
  end_time = time.time()
  print(f"{i+1} Elapsed Time: {end_time - start_time:.2f} seconds")

 

기본적으로 "gpt-4o-mini"로 전환해서 그런 걸로 보이는데 여기서 "gpt-4o" 보다 TPM이나 Rate Limits 유연해서 그런 듯하다. 하지만 "gpt-4o"로 테스트하기엔 비용이 너무 많이 들어 보류하게 됐다.

 

추가적으로 처음에는 간단하게 mvp버전으로 테스트를 진행하려고 했으나 LCEL 문법 덕분에 하나에서만 확인하면 된다는 사실 또한 알게 됐다.

 

이로서 Rate Limit 중에서도 TPM과 관련하여 개선을 마무리하게 됐다. 다음에 이와 같은 구현의 기회가 있다면 Batch API와 Request Queue 또한 적용해 보고 싶다.

 

Exponential Backoff가 적용된 코드를 보고 싶으면 아래의 깃헙 저장소에서 확인할 수 있다.

RAG/rag-optimization/exponential_backoff

 

RAG/rag-optimization/exponential_backoff.ipynb at main · jwywoo/RAG

1. RAG Practice. Contribute to jwywoo/RAG development by creating an account on GitHub.

github.com

 

반응형