AI VIDEO BRIEFING

KV 캐싱이란? LLM 디코딩 속도를 끌어올리는 핵심 최적화 원리

LLM이 토큰을 생성할 때 키·값 벡터를 재계산하지 않고 캐싱해 속도를 높이는 KV 캐싱의 원리와 메모리 비용, 페이지 어텐션 최적화를 쉽게 풀어 설명합니다.

LLM이 글자를 더 빨리 생성하는 비결, KV 캐싱과 페이지 어텐션 영상 대표 이미지

핵심 메시지

  • 어텐션은 입력 토큰 수에 대해 시간 복잡도가 제곱으로 커질 수 있어, 디코딩 시 불필요한 재계산을 줄이는 것이 중요하다.
  • 다음 토큰을 예측할 때는 마지막 토큰의 쿼리만 필요하므로, 이전 토큰들의 키·값 벡터는 매번 다시 계산하지 말고 캐시에서 꺼내 쓴다.
  • KV 캐싱은 프롬프트를 처리하는 단계와 토큰을 이어 생성하는 디코딩 단계로 나뉘며, 첫 토큰이 더 오래 걸리는 이유도 여기에 있다.
  • 캐시는 메모리를 많이 먹는다. 라마 3 70B 기준 토큰당 약 2.62MB, 최대 4,096토큰을 미리 잡으면 약 10.73GB를 선점한다.
  • 페이지 어텐션은 메모리를 한꺼번에 최대치로 잡지 않고 청크 단위로 동적 할당해, 메모리를 아끼고 더 많은 시퀀스를 동시에 디코딩할 수 있게 한다.

쉽게 이해하기

이 영상은 LLM이 텍스트를 생성(디코딩)할 때 속도를 끌어올리는 핵심 최적화인 'KV 캐싱'을 그림 예시로 설명합니다. 출발점은 어텐션 메커니즘의 비용입니다. 일반적인 어텐션은 입력 시퀀스의 토큰 수에 대해 시간 복잡도가 제곱으로 늘어날 수 있어, 디코딩 과정에서 같은 계산을 반복하지 않도록 영리하게 설계해야 합니다.

핵심 통찰은 '다음 토큰을 만들 때 실제로 필요한 것은 마지막 토큰에 해당하는 예측뿐'이라는 점입니다. 셀프 어텐션 층에서 다음 토큰을 생성하려면 마지막 토큰의 쿼리 벡터 하나만 새로 만들면 되고, 키와 값은 모든 입력 토큰의 것이 필요합니다. 그런데 자기회귀적으로 토큰을 하나씩 붙여가며 디코딩하면, 이전 토큰들의 키·값 벡터를 매 반복마다 똑같은 값으로 다시 계산하게 됩니다.

그래서 도입하는 것이 KV 캐시입니다. 일종의 로컬 데이터베이스로, 새 토큰의 키·값만 새로 계산해 캐시에 넣고 이전 토큰들의 키·값은 캐시에서 그대로 꺼내 씁니다. 덕분에 재계산을 없애 디코딩이 훨씬 빨라집니다. 영상은 이를 프롬프트를 처리하며 캐시를 채우는 단계와, 그 캐시를 활용해 토큰을 이어 생성하는 디코딩 단계로 정리하고, 챗봇에서 첫 토큰이 이후 토큰보다 오래 걸리는 이유도 이 구조로 설명합니다.

다만 KV 캐싱은 메모리를 많이 소모합니다. 흔한 구현은 디코딩될 최대 출력 길이만큼 메모리를 미리 통째로 할당하는데, 라마 3 70B(은닉 크기 8192, 80개 층, fp16 2바이트)를 예로 들면 토큰당 약 2.62MB가 필요하고, 최대 4,096토큰을 가정해 곱하면 약 10.73GB를 미리 선점하게 됩니다. 이렇게 미리 잡힌 메모리 중 상당 부분은 실제로 쓰이지 않은 채 다른 프로세스가 쓸 수 없게 묶여 있어 확장성의 발목을 잡습니다.

이 비효율을 푸는 개선책이 '페이지 어텐션(PagedAttention)'입니다. 최대 출력 크기에 맞춰 한 번에 메모리를 잡는 대신, 필요한 만큼만 청크 단위로 동적으로 할당합니다. 출력이 짧으면 추가 청크를 잡지 않아도 되므로 메모리 활용도가 좋아지고, 특히 여러 시퀀스를 배치로 디코딩할 때 더 많은 시퀀스를 동시에 처리할 수 있게 됩니다.

주요 인사이트

  • 디코딩에서 진짜 비용은 '같은 키·값을 매 스텝 다시 계산하는 중복'에 있으며, 이를 캐싱으로 제거하는 것이 속도 향상의 본질이다.
  • 첫 토큰 지연(프롬프트 처리)과 이후 토큰의 빠른 생성이라는 사용자 경험 차이는 KV 캐싱의 두 단계 구조에서 자연스럽게 따라온다.
  • 속도를 위해 캐시를 쓰면 메모리를 대가로 치르게 되며, 모델 규모가 커질수록 이 메모리 비용이 확장성의 한계로 작용한다.
  • 정적·최대치 메모리 선할당은 단순하지만 낭비가 크고, 청크 단위 동적 할당(페이지 어텐션)이 동시 처리량을 늘리는 열쇠다.
  • 배치 디코딩에서는 시퀀스마다 캐시가 필요하므로, 메모리를 아끼는 것이 곧 더 많은 동시 요청 처리로 직결된다.

자주 묻는 질문

KV 캐싱이 속도를 높이는 원리는 무엇인가요?

다음 토큰 예측에는 마지막 토큰의 쿼리만 필요하고 이전 토큰들의 키·값은 값이 변하지 않으므로, 이를 매번 재계산하지 않고 캐시에 저장해 꺼내 씀으로써 중복 계산을 없애 디코딩을 빠르게 합니다.

왜 챗봇에서 첫 토큰이 더 오래 걸리나요?

처음에는 프롬프트 전체에 대한 키·값을 계산해 캐시를 채우는 단계를 거치기 때문입니다. 이후 디코딩 단계에서는 캐시를 활용하므로 다음 토큰들이 더 빠르게 생성됩니다.

KV 캐싱은 메모리를 얼마나 쓰나요?

영상의 라마 3 70B 예시에서는 토큰당 약 2.62MB가 필요하고, 최대 4,096토큰을 미리 할당하면 약 10.73GB를 선점합니다. 이 선할당이 메모리를 크게 소모합니다.

페이지 어텐션은 무엇을 해결하나요?

최대 출력 크기만큼 메모리를 한 번에 잡는 대신 필요한 만큼 청크 단위로 동적 할당해, 쓰이지 않는 메모리 낭비를 줄이고 더 많은 시퀀스를 동시에 디코딩할 수 있게 합니다.

원문과 출처

이 글은 원본 영상의 자막을 바탕으로 한국어 독자를 위해 요약했습니다. 전체 맥락과 최신 정보는 원문에서 확인하세요.

YouTube 원본 영상 보기 ↗

관련 AI 소식

#KV캐싱#LLM#페이지어텐션#어텐션#추론최적화