소프트웨어 마에스트로/BackEnd(Django)

[Django] openAI connection pool적용기 3회차

alpakaka 2024. 10. 23. 00:33

오늘은 pool 을 진짜 진짜 넣어볼 예정이다..

 

 

어제 벤치마크 달려다가 포기했는데, 멘토님께서 센트리를 연결했으니 그거 사용하면 된다고 하셨다.

이럴수가...

 

그래서 추천 api를 요청하는 간단한 테스트를 작성하고 센트리에서 확인해보려고한다.

이런식으로 만들고 sentry 로 시간을 재봤다.

 

그런데 sentry에서 안보인다...

안적힌다..

저번에 sentry 초기화를 함수로 설정했던 게 문제가 있는 듯하다.

대략 흐름도를 보니 pytest 는 settings 파일만 참고하고 다른 settings 파일을 참고하지 않아서 init 이 되지 않는 듯 했다.

그래서 다음과 같이 수정해주었다.

이렇게 수정하고 돌려본다...!

잡히긴 한다!

그런데 jwt 헤더 관련때문에 일단 제대로된 결과는 안나왔으니 이제 pytest 를 돌려서 확인해본다.

 

해결하다 한 세월 걸릴 것 같다.. 생각보다 sentry 에 나타나는데 시간이 걸린다. 한 1분정도..?

그래서 그냥 뷰하나를 대략 만들고 비교해보려고 한다.

 

그리고 공식문서에서 지원해준다던 create_and_poll은 async 에 대한 poll 이였다. 내가 원하는 connection pool 이 아니였다..^^ ㅎㅎ (지금보니 철자도 달랐네...)

httpx 를 사용하면 된다고 하니 한번 찾아보자.

https://www.python-httpx.org/advanced/resource-limits/

 

Resource Limits - HTTPX

Resource Limits You can control the connection pool size using the limits keyword argument on the client. It takes instances of httpx.Limits which define: max_keepalive_connections, number of allowable keep-alive connections, or None to always allow. (Defa

www.python-httpx.org

https://github.com/openai/openai-python/blob/main/src/openai/_constants.py

 

openai-python/src/openai/_constants.py at main · openai/openai-python

The official Python library for the OpenAI API. Contribute to openai/openai-python development by creating an account on GitHub.

github.com

 

멘토님 항상 감사합니다...

 

어떻게 사용하는건지 사실 감이 잘 안온다. 열심히 서치를 해보자.

 

https://linked2ev.github.io/spring/2019/08/14/Spring-3-%EC%BB%A4%EB%84%A5%EC%85%98-%ED%92%80%EC%9D%B4%EB%9E%80/

 

[Spring] 커넥션 풀(Connection pool)이란?

커넥션 풀(Connection pool)에 대해서 그래도 알고 사용하자. 쉽게 알고 갔으면 좋겠습니다.

linked2ev.github.io

 

오... 대략 이해가 되었다. 

사용하는게 그리 어렵진 않아보여서 일단 적용해보자

https://github.com/openai/openai-python/issues/874

 

Unclear how to use the new AsyncClient at scale - memory leaks or timeouts · Issue #874 · openai/openai-python

Confirm this is an issue with the Python library and not an underlying OpenAI API This is an issue with the Python library Describe the bug I have a containerized FastAPI server. When I create new ...

github.com

 

여기를 참고했다!

이거.. 그대로 넣어보자...!

이 두개를 참고해서 아래와 같이 만들어줬다.

10분정도 동안 풀링이 유지될 것이다. 논리상...

 

v2는 connection 풀링을 적용한 버전이고 안붙어 있는 버전은 풀링을 하지 않은 버전이다.

 

이제 테스트를 진행해보자!

약 5번 정도 recommend 요청을 보내고 시간을 측정해보려고 한다. 

 

일단 간단하게  기본버전이다. 한번 평균을 내보자...! 지원해주는게없나..>?

일단 하나를 들어갔을 때의 모습이었다. 보면 openai 쪽에서 답변을 받기까지 4.54초가 소요되었다.

총 차례대로 3.88, 4.97s, 3.56s, 4.54s, 4.45s, 4.04s 등 4초 언저리로 나왔다. 

그러면 이제 connection 풀링을 적용하고 5번을 보내보자!

의외로 시간이 더 걸렸다....?

들어가보니까 어째서인지 openai 가 7.36, 11.96, 5.33, 4.54 로 걸렸다.

근데 12초는 내 문제가 아닐 것 같아서 다시 해본다..!

 

3.88, 4.69, 5.17, 8.46(처음 커넥션), 정도로.. 오히려 안하는게 더 나은 결과를 보였다..

 

흠 어째서 인걸까.. 속도를 더 빠르게 내려면 다른 방법을 찾아봐야할 것 같다..