AI VIDEO BRIEFING
LLM 추론 최적화 총정리: KV 캐시, 연속 배칭, 페이지드 어텐션, 추측 디코딩과 서빙 지표
대학 LLM 강의가 추론 서빙 기술을 한자리에 정리했다. 프리필과 디코드가 왜 다른지, TTFT·TPOT·굿풋은 무엇을 재는 지표인지, 페이지드 어텐션과 연속 배칭·추측 디코딩·양자화가 서빙 비용을 어떻게 줄이는지 짚었다.

핵심 메시지
쉽게 이해하기
이 강의는 대규모 언어 모델을 '어떻게 학습시킬 것인가'에서 '어떻게 돌릴 것인가'로 주제를 옮긴다. 강연자는 학습은 모델이 바뀌지 않는 한 한 번으로 끝나지만, 추론은 서비스가 유지되는 동안 매일 반복된다는 점을 출발점으로 삼는다. 공식 수치는 아니지만 업계에서 추정하는 하루 처리 토큰량과 한 대형 모델의 총 학습 토큰량을 비교하면, 며칠이면 학습에 쓴 만큼의 토큰을 추론으로 소모한다는 계산이 나온다는 설명이다.
추론이 까다로운 이유는 이미지 분류처럼 입력 하나에 출력 하나가 나오는 구조가 아니기 때문이다. 언어 모델은 토큰을 하나씩 순차적으로 만들어 내므로 한 요청에 순전파가 여러 번 필요하고, 응답 길이도 요청마다 제각각이다. 그래서 사용자가 준 프롬프트를 한꺼번에 처리해 KV 캐시를 만드는 프리필과, 그 캐시를 이용해 토큰을 한 개씩 뽑는 디코드로 단계를 나눠 처리한다.
두 단계의 성격은 정반대다. 프리필은 여러 토큰을 한 번에 넣기 때문에 행렬 곱 형태의 큰 연산이 되어 연산 병목에 가깝고, 디코드는 행렬과 벡터를 곱하는 작은 연산을 반복하므로 메모리 접근 비용이 커져 메모리 병목이 된다. 같은 모델, 같은 추론인데도 단계에 따라 하드웨어가 느끼는 부하가 달라지고, 그래서 필요한 최적화 기법도 달라진다.
서빙을 개선하려면 먼저 무엇을 재는지 정해야 한다. 사용자 쪽 지표로는 첫 토큰이 나오기까지의 시간(TTFT)과 토큰 사이의 간격(TPOT)이 있고, 전체 응답 시간은 대략 TTFT에 TPOT와 출력 길이를 곱한 값을 더한 형태로 계산된다. 서버 쪽에서는 처리량이 중요한데, 배치를 키우면 처리량은 오르지만 요청당 지연은 늘어난다. 그래서 미리 정해 둔 서비스 수준 목표를 만족한 요청만 세는 '굿풋'을 함께 본다.
구체적인 기법들은 모두 이 지표를 끌어올리기 위한 시도다. 배치를 한 덩어리로 묶어 가장 늦게 끝나는 요청을 기다리는 정적 배칭 대신, 요청이 끝날 때마다 자리를 비우고 새 요청을 끼워 넣는 연속 배칭을 쓴다. 여기에 KV 캐시를 블록 단위로 관리하는 페이지드 어텐션, 반복되는 시스템 프롬프트 구간을 재사용하는 프리픽스 캐싱, 프리필을 잘라서 넣는 청크 프리필, 프리필과 디코드를 아예 다른 노드로 분리하는 PD 분리, 그리고 추측 디코딩과 양자화가 얹힌다.
주요 인사이트
- 샘플링 방식 자체가 품질과 다양성의 트레이드오프다. 확률이 가장 높은 토큰만 고르는 그리디 방식은 늘 비슷한 답을 내놓고, 온도 값을 낮추면 그리디에 가까워지며, 상위 K개나 누적 확률 상위 몇 퍼센트까지만 후보로 남기는 방식으로 극단적으로 낮은 확률의 토큰을 걸러 낸다.
- 처리량만 좇아 배치 크기를 무작정 키우면 첫 토큰 지연이 폭발한다. 그래서 지표를 하나만 보지 않고, 사전에 정의한 서비스 수준을 지킨 요청만 세는 굿풋으로 판단해야 사용자가 체감하는 품질과 서버 효율이 함께 관리된다.
- KV 캐시 메모리 관리 문제는 사실상 운영체제 교과서의 반복이다. 최대 길이만큼 미리 잡으면 내부 단편화가 생기고, 필요한 만큼만 이어 붙여 잡으면 외부 단편화로 구멍이 남는다. 페이징이라는 오래된 해법을 그대로 가져와 KV 캐시에 적용한 것이 페이지드 어텐션이다.
- 프리필과 디코드를 같은 배치에 섞으면 긴 프리필이 디코드를 붙잡아 토큰 간 지연이 튄다. 프리필을 조각내 넣는 청크 프리필과, 두 단계를 서로 다른 노드에 맡기고 KV 캐시를 전송하는 PD 분리가 이 간섭을 줄이는 두 갈래 해법이다.
- 추측 디코딩에서 초안 모델은 작을수록 좋은 것이 아니다. 너무 작으면 제안이 계속 기각되어 의미가 없으므로, 같은 계열의 작은 모델이나 멀티 토큰 예측용 경량 레이어처럼 큰 모델과 예측이 잘 맞는 쪽을 고른다.
자주 묻는 질문
프리필과 디코드는 무엇이 다른가요?
프리필은 사용자가 입력한 프롬프트 전체를 한 번에 처리해 KV 캐시를 만드는 단계로, 큰 행렬 곱 연산이라 연산 병목에 가깝습니다. 디코드는 그 캐시를 써서 토큰을 하나씩 만들어 내는 단계로, 작은 연산을 반복하며 메모리 접근이 잦아 메모리 병목이 되기 쉽습니다.
굿풋은 처리량과 어떻게 다른가요?
처리량은 초당 만들어 낸 토큰 수나 처리한 요청 수를 그대로 세는 값입니다. 굿풋은 지연 시간이나 오류율 같은 사전에 정의한 서비스 수준 목표를 만족한 요청만 골라 세기 때문에, 배치를 키워 숫자만 올리고 사용자 경험을 망치는 상황을 걸러 낼 수 있습니다.
추측 디코딩을 써도 답변 품질이 떨어지지 않나요?
강의에서는 그 점을 지키는 것이 이 기법의 핵심 성질이라고 설명합니다. 초안 모델이 제안한 토큰을 큰 모델의 확률과 비교해 확률적으로 받아들이고, 기각된 경우에는 두 분포의 차이를 이용해 다시 뽑기 때문에 큰 모델만 썼을 때와 같은 분포가 유지됩니다.
프리픽스 캐싱은 어떤 상황에서 이득이 큰가요?
챗봇이나 에이전트 도구처럼 사용자 눈에 보이지 않는 긴 시스템 프롬프트가 매 요청 앞에 똑같이 붙는 경우입니다. 이 고정된 앞부분의 KV 캐시를 블록 단위로 저장해 두면 요청이 달라져도 그대로 재사용할 수 있어 중복 계산이 사라집니다.
원문과 출처
이 글은 원본 영상의 자막을 바탕으로 한국어 독자를 위해 요약했습니다. 전체 맥락과 최신 정보는 원문에서 확인하세요.
YouTube 원본 영상 보기 ↗