본문 바로가기

STUDY/실전 RAG 기반 생성형 AI 개발

LLM 비용 최적화: 토큰, 캐싱, 그리고 파인튜닝

반응형

 

LLM 서비스의 비용과 토큰

 

 

토큰은 LLM이 텍스트를 처리하는 가장 기본적인 단위이다. 텍스트가 입력되면 LLM은 이를 토큰으로 분해한다. 예를 들어, GPT에서는 "The capital of Korea is Seoul“이 [“The”, “capital”, “of”, “Korea”, “is”, “Seoul”]와 같이 여러 개의 토큰으로 나누어진다. 나누어진 토큰들은 임베딩을 통해 다차원 벡터로 변환되어 LLM 모델의 입력값이 된다. 모델은 이 토큰들의 벡터 값을 계산해서 다음 토큰을 예측한다. 결론적으로 LLM은 토큰을 입력받고, 다음에 올 토큰을 반환하는 것이다. 

 

 

일반적으로 LLM의 비용은 프롬프트(입력)와 응답(출력)에 사용된 토큰 수에 따라 청구된다. Bedrock에서 Llama 4 Maverick 17B 모델을 사용한다고 했을 때 1000개의 입력토큰 당 0.00024 USD의 비용이 발생하고, OpenAI에서 GPT-4.1-mini 모델을 사용하면 1000개의 입력토큰당 0.0004 USD의 비용이 발생한다. 따라서 토큰의 효율적인 사용은 LLM의 비용을 결정짓는 핵심 요소라고 할 수 있다.

 

 

오픽 영어 스크립트 생성하는 AI 서비스를 만든다고 생각해보자. 위와 같이 가이드가 담긴 시스템 프롬프트와 영어 스크립트로 만들어질 내용을 유저 프롬프트로 보낸다. 이렇게 100개의 요청을 보내고 사용한 토큰들을 계산해보았다. GPT-4.1-mini 모델 기준으로 입력토큰 102,020개, 출력토큰 14,056개를 사용하여 약 0.0673 USD의 비용이 발생하였다

 

  입력 토큰 출력 토큰 비용
100회 요청 102,020 14,056 약 0.0673 USD

 

 


 

프롬프트 캐싱

 

 

LLM은 다음 토큰을 생성하기 위해 입력된 모든 토큰을 재귀적으로 계산한다. 따라서 입력된 토큰이 동일하다면 이 벡터 값들을 재활용함으로써 처음부터 다시 계산하는 비효율을 방지할 수 있다. 프롬프트 캐싱은 동일한 프롬프트 접두사가 반복되는 경우, 앞의 요청에서 계산된 벡터값을 저장해 두었다가, 이후의 요청에서 해당 접두사 부분을 다시 계산하지 않고 않고 저장된 값을 그대로 재사용하는 것을 말한다. 여러 LLM 서비스에서 캐시된 프롬프트 토큰의 비용을 할인해주기 때문에, 이를 활용하면 많은 비용을 절약할 수 있다.

 

 

 

이때 주의해야 할 점이 있다. LLM 서비스 별로 프롬프트 캐싱을 할 수 있는 기준들이 존재한다. 당연한 얘기이지만 프롬프트의 앞부분은 변하지않고 동일해야한다. 따라서 프롬프트 템플릿을 만들 때, 변경이 있는 부분을 마지막에 위치하도록 해야한다. 그리고 캐싱할 토큰의 크기가 1024는 되어야한다.

 

 

아까 비용을 계산해봤던 영어 스크립트 생성 프롬프트를 다시 봐보자. 시스템 프롬프트는 바뀌지 않고 반복되고 있으므로 첫번째 조건은 만족하였다. 하지만 반복되는 토큰의 크기가 1024가 되지않아서 캐시되고 있지 않았다. 예시부분을 하나 더 추가해서 시스템 프롬프트의 토큰 크기를 늘려주었다. 수정한 프롬프트로 100개의 요청을 보내고 사용한 토큰들을 계산해보았다. 그 결과 사용한 총 토큰수는 늘었지만 캐시된 토큰 덕분에 실제 비용은 감소하였다.

 

  입력 토큰 입력 토큰(Cached) 출력 토큰 비용
100회 요청 102,020   14,056 약 0.0673 USD
100회 요청 with Prompt Cacing 34,460 117,760 14,506 약 0.0488 USD

 

 


 

파인튜닝

 

 

파인튜닝은 LLM을 특정 작업에 맞게 조정하는 것을 말한다. 파인튜닝을 통해 반복적으로 사용되는 프롬프트를 내재화하는 것이 가능하다. LLM에 요청이 들어오면, 항상 이러한 지침을 따라 응답하라는 것을 학습시키는 것이다. 그리고 이는 사용되는 토큰의 수를 줄이는데 도움이된다. 다만 일반적인 LLM 서비스에서 파인튜닝한 모델을 사용하려면 추가적인 비용이 발생한다.

 

 

기존에는 시스템 프롬프트 + 유저 프롬프트를 보내서 영어 스크립트를 받았었다. 여기서 파인튜닝을 통해 시스템 프롬프트를 내재화 시켰다. 그 결과 별도의 지시 없이 한글 스크립트만 보내도 영어 스크립트를 반환하는 모델이 만들어졌다. 이 모델에 100개의 요청을 보내고 사용한 토큰들과 비용을 계산해보았다. 그 결과 사용한 총 토큰수는 큰 폭으로 줄었지만, 비용은 감소하지않았다.

 

  입력 토큰 입력 토큰(Cached) 출력 토큰 비용
100회 요청 102,020   14,056 약 0.0673 USD
100회 요청 with Prompt Cacing 34,460 117,760 14,506 약 0.0488 USD
100회 요청 with Fine tuning 17,560   16,947 약 0.0683 USD

 

 

 

반응형