LLM 병렬 호출은 속도 제한 때문에 오히려 느려질 수 있다
오픈소스 자바 AI 작업 조율 도구인 OxyJen에서 여러 문서를 동시에 처리하는 MapNode가 만들어지고 있다. MapNode는 목록의 각 항목에 같은 작업을 나누어 적용하고, 동시에 몇 개까지 실행할지, 시간 초과와 개별 오류 처리를 정할 수 있다. 문제는 각 작업 안에서 Gemini 같은 대형 언어 모델을 부를 때 생긴다.
Gemini 무료 요금제는 분당 15회 호출 제한이 있어, 동시에 3개 요청을 보내면 일부 요청이 429 오류로 막힌다. LLMChain은 실패한 요청을 다시 시도하고 지수 백오프를 쓰지만, 30초와 60초씩 기다리는 벌칙 때문에 전체 시간이 더 길어진다. 대안으로 RateLimitedChatModel이 호출 시작 시간을 분당 허용량에 맞춰 띄우는 방식이 검토되고 있다.
이 방식은 재시도 폭주를 줄이고 이론상 최소 시간에 가까워질 수 있지만, 호출 시간이 5초 정도일 때는 실제 병렬성이 거의 사라질 수 있다. 현재 제한 조절 구현은 CAS를 쓰는 방향으로 고쳐지고 있다.
핵심 포인트
용어 한 줄 설명
- MapNode
- 여러 항목에 같은 작업을 나누어 동시에 실행하도록 만든 기능 이름입니다.
- 대형 언어 모델
- ChatGPT, Claude처럼 글을 읽고 쓰고 코드를 짜는 데 쓰이는 대규모 AI 프로그램.
- 무료 요금제
- 기간 제한 없이 일부 기능을 공짜로 사용할 수 있게 제공하는 등급입니다.
- 429 오류
- 서버가 '요청이 너무 많다'고 거부할 때 반환하는 HTTP 상태 코드
- 지수 백오프
- 실패할 때마다 다음 재시도까지 기다리는 시간을 점점 크게 늘리는 방식이다.
- RateLimitedChatModel
- 정해진 호출 제한을 넘지 않도록 모델 호출 속도를 조절하는 감싸기 구조다.
- AI 에이전트
- 사람 대신 정보를 찾거나 작업을 처리하도록 만든 AI 프로그램입니다.
- LLM 호출
- ChatGPT나 Claude 같은 AI 언어 모델에 질문을 보내고 답변을 받는 동작입니다.