Skip to content

추론 최적화는 “더 빠른 계산”의 문제가 아니다

대규모 언어 모델(LLM)의 추론을 이야기할 때, 사람들은 흔히 “더 빠른 GPU”를 떠올린다. 그러나 실제 병목은 계산 속도가 아니다. LLM의 내부 구조를 들여다보면, 추론 최적화의 핵심은 오히려 얼마나 덜 계산하고, 이미 계산한 것을 얼마나 잘 재사용하며, 얼마나 효율적으로 묶어서 처리하느냐에 달려 있다.


1. LLM의 병목은 계산이 아니라 구조다

LLM의 중심에는 트랜스포머 구조가 있다. 그리고 그 핵심 연산은 self-attention이다. 이 연산은 현재 토큰이 이전 모든 토큰과 관계를 맺도록 설계되어 있으며, 이로 인해 계산량은 입력 길이에 따라 급격히 증가한다.

특히 추론 단계에서는 토큰을 하나씩 생성하면서 매번 attention을 다시 계산해야 한다. 이 과정에서 동일한 과거 정보가 반복적으로 참조되며, 계산 자체보다 더 큰 비용은 메모리에서 데이터를 읽고 쓰는 과정에서 발생한다.


2. 덜 계산하기: 불필요한 연산 제거

모든 토큰이 모든 과거 토큰을 동일하게 참조할 필요는 없다. 일부 중요한 토큰만 선택하거나, attention 범위를 제한하거나, 근사 계산을 사용하는 방식으로 전체 연산량을 줄일 수 있다.

이는 단순한 최적화가 아니라, attention 구조 자체를 재설계하는 문제에 가깝다. 최근 다양한 기법들은 정확도를 크게 해치지 않으면서 계산량을 줄이는 방향으로 발전하고 있다.


3. 다시 쓰기: KV Cache의 역할

두 번째 전략은 이미 계산한 것을 재사용하는 것이다. 대표적인 예가 KV cache이다.

attention 연산에서 key와 value는 과거 토큰에 대해 한 번 계산되면 변하지 않는다. 따라서 이를 저장해두고 이후 토큰 생성 시 재사용하면 동일한 연산을 반복할 필요가 없다.

이 단순한 구조는 긴 문장 생성에서 압도적인 성능 차이를 만들어낸다. KV cache가 없다면, LLM의 추론 비용은 길이에 따라 감당하기 어려운 수준으로 증가한다.


4. 한 번에 처리하기: 배치와 병렬성

GPU는 본질적으로 병렬 연산 장치다. 하지만 요청이 하나씩 들어오면 이 병렬성이 제대로 활용되지 않는다.

따라서 여러 요청을 모아 batch로 처리하거나, 서로 다른 시퀀스를 동시에 계산하는 방식이 필요하다. 이는 단순한 속도 향상이 아니라, 하드웨어 구조를 제대로 활용하기 위한 필수 조건이다.


5. 결론: 계산 문제가 아니라 시스템 문제다

이 세 가지를 종합하면 중요한 사실이 드러난다.

LLM 추론 최적화는 더 이상 “연산을 얼마나 빠르게 하느냐”의 문제가 아니다.

그것은 연산을 어떻게 줄이고, 데이터를 어떻게 재사용하며, 시스템을 어떻게 스케줄링하느냐의 문제다.

다시 말해, 모델의 문제가 아니라 실행 구조의 문제다.


마지막 질문

“이 계산, 정말 다시 해야 하는가?”

출처: https://elanvital.tistory.com/204 [Feel it:티스토리]