OpenAI Docs
OpenAI에서 제안하는 지연 시간 최소화 방안을 소개합니다. LLM을 실제 서비스에 활용할 때, 다양한 프롬프트 요청이 필수적입니다. 각 프롬프트를 각각의 시간에 맞춰 기다린다면, 불필요하게 긴 대기 시간이 발생할 수 있습니다. 본 글에서는 이러한 지연 시간을 최소화할 수 있는 전략을 공유합니다.
지연시간 최적화를 위한 7가지 원칙
- 토큰을 더 빠르게 처리하기
- 더 적은 수의 토큰을 생성하기
- 더 적은 수의 입력 토큰을 사용하기
- 더 적은 요청을 하기
- 병렬화하기
- 사용자의 대기 시간을 줄이기
- LLM을 기본값으로 설정하지 않기
토큰을 더 빠르게 처리하기
LLM의 추론 속도는 토큰을 처리하는 속도로 TPM(분 당 토큰)과 TPS(초 당 토큰)으로 측정됩니다. 이 속도에 주로 영향을 미치는 요소는 모델의 크기인데, 작고 효율적인 모델을 사용하는 것이 큰 모델보다 나을 수 있습니다.
- 상세한 프롬프트 추가
- 예제 사례 추가
- 피드백 기반 미세 조정
더 적은 수의 토큰을 생성하기
LLM을 사용할 때, 생성되는 토큰은 지연 시간을 증가시킵니다. 출력되는 토큰을 50% 줄이는 것이 대기 시간을 약 50% 줄일 수 있습니다.
- 자연어 생성 요청 시 더 간략히 요청하기
- 모델 학습을 통해 짧은 응답 도출
- 구조화된 출력 요청 시
더 적은 수의 입력 토큰을 사용하기
입력 토큰을 줄이면 대기 시간이 감소하지만, 이는 큰 요소는 아닙니다. 프롬프트를 50% 줄이면 대기 시간이 1~5% 정도 개선됩니다.
- 입력 텍스트 필터링
- 후보 문서 필터링
- HTML 태그 정리
- 텍스트 요약 처리
더 적은 요청을 하기
요청 하나마다 발생하는 대기 시간이 쌓이면, 시스템 전체의 지연을 야기합니다. 만약 LLM이 여러 순차적인 단계를 처리해야 한다면, 각 단계별로 별도 요청을 보내는 대신, 한 번의 프롬프트로 모두 처리할 수 있습니다.
- 여러 작업을 하나의 프롬프트로 통합하여, 모델이 단일 응답으로 결과를 줄 수 있도록 합니다.
- JSON 형식의 응답을 유도하여, 결과를 쉽게 파싱하고 적용할 수 있게 합니다.
병렬화하기
작업들이 순차적일 필요가 없다면 병렬로 처리해보세요. 이렇게 하면 전반적인 처리 속도를 높일 수 있습니다. 순차 처리가 필요하다면 투기적 실행을 통해 효율성을 높일 수 있습니다.
- 1단계와 2단계를 동시에 시작합니다.
- 1단계의 결과 확인 후, 필요하면 2단계에서의 요청을 취소하고 다시 시도합니다.
사용자의 대기 시간을 줄이기
사용자 경험을 개선하려면 대기 시간을 최소화해야 합니다. 실시간으로 피드백을 제공하면 사용자는 더 이상 답답함을 느끼지 않을 것입니다.
- Streaming: 대기 시간을 1초 이하로 줄이는 가장 효과적인 방법입니다.
- Chunking: 답변을 필터링이나 번역이 필요한 부분으로 나눠서 보여줍니다.
- Show your steps: 진행 중인 단계를 사용자에게 시각적으로 제공하여 투명성을 높입니다.
- Loading states: 진행률을 표시하여 사용자가 현재 상태를 이해할 수 있게 합니다.
LLM을 기본값으로 설정하지 않기
모든 작업에 LLM을 활용할 필요는 없습니다. 때로는 전통적인 방법이 더 효과적일 수 있습니다.
- 하드코딩: 매우 특정한 출력인 경우는 LLM을 사용하지 않고 직접 코딩합니다.
- 사전 계산: 한정된 입력의 경우 여러 응답을 미리 준비합니다.
- UI 활용: 요약된 정보나 분석 결과는 직접 전하는 것이 더 효과적일 수 있습니다.
- 전통적인 최적화 기법: 바이너리 검색이나 캐싱 같은 기법은 여전히 유용합니다.