추론 엔지니어링의 부상 (1)
대규모 언어 모델(LLM)이 응답을 생성할 때마다 동일한 GPU에서 두 가지 연산이 순차적으로 수행된다. 첫 번째 연산은 입력 프롬프트를 처리하고 하나의 토큰을 생성한다. 두 번째 연산은 그 이후의 모든 토큰을 하나씩 순차적으로 생성한다.
외부에서 보면 두 단계는 하나의 생성 과정에 포함된 연속적인 단계처럼 보인다. 그러나 하드웨어 내부에서는 서로 정반대의 병목 현상을 가진다. 하나는 순수한 연산 능력에 의해 제한되고, 다른 하나는 메모리를 통해 데이터가 이동하는 속도에 의해 제한된다.
현재 운영 환경에서 사용되는 AI 시스템을 빠르게 만드는 대부분의 엔지니어링 작업은 이러한 차이에서 출발한다. 그리고 이 차이를 효과적으로 처리하기 위해 개발된 다양한 최적화 기술이 추론 엔지니어링의 핵심 기반이 된다.
1. 추론 엔지니어링 정의
추론 엔지니어링(inference engineering)은 학습이 완료된 AI 모델을 실제 운영 환경에서 효율적으로 실행하기 위한 기술 분야이다. 이 분야는 저수준 GPU 코드, 모델 서빙 프레임워크, 그리고 이러한 구성 요소를 연결하는 클라우드 인프라까지 폭넓게 다룬다.
추론 엔지니어는 시스템의 목적에 따라 지연 시간, 처리량, 비용, 품질의 균형을 최적화한다. 어떤 요소를 가장 중요하게 고려할지는 해당 AI 서비스를 제공하는 제품과 요구 사항에 따라 달라진다.
몇 년 전까지만 해도 이러한 작업은 대부분 최첨단 AI 모델을 개발하는 선도적인 AI 연구소 내부에서만 수행되었다. 하지만 현재는 상황이 달라졌다. 대규모 AI 워크로드를 운영하는 거의 모든 기업이 추론 엔지니어링을 중요한 전문 영역으로 인식하고 있으며, 하나의 독립적인 기술 분야로 투자하고 있다.
이 글에서는 AI 모델의 추론 과정이 실제로 어떻게 동작하는지 살펴보고, 왜 다양한 추론 최적화 기술이 등장했는지 그 배경을 설명한다.
2. 추론 엔지니어링의 부상
3년 전만 해도 추론 엔지니어링은 대부분 최첨단 AI 연구소 내부에서만 수행되던 전문 분야였다.당시 이 분야의 작업은 폐쇄형 모델을 개발하고, 다른 산업의 기업들이 API를 통해 사용하는 환경을 구축하는 소수의 엔지니어 그룹에 집중되어 있었다.
그러나 2024년 이후 이러한 상황은 크게 변화했다. 이러한 변화를 이끈 핵심 요인은 오픈 모델의 확산이다. AI 모델 공개 저장소인 허깅페이스(Hugging Face)는 현재 200만 개가 넘는 오픈 모델을 호스팅하고 있으며, 이는 5년 전에 존재했던 모델 수와 비교하면 약 25배 증가한 규모이다.
DeepSeek V3와 같은 공개 모델은 폐쇄형 모델과의 성능 격차를 크게 줄였다. 이로 인해 기업은 비용을 지불하고 폐쇄형 API를 사용하는 방식과, 직접 오픈 모델을 운영하는 방식 사이에서 실제적인 선택을 할 수 있게 되었다.
3. 오픈 모델 자체 운영의 장점
오픈 모델을 직접 운영하는 방식(self-hosting)은 폐쇄형 API(closed API)와 비교하여 세 가지 운영상의 장점을 제공한다.
1) 지연 시간 최적화(Latency Optimization)
특정 제품의 워커로드 패턴(workload pattern)에 맞게 지연 시간 특성을 조정할 수 있다. 공개 API 서비스는 여러 고객의 요청을 동시에 처리해야 하기 때문에 일반적인 처리량을 최적화한다. 반면 자체 운영 환경에서는 특정 서비스 요구 사항에 맞게 추론 성능을 조정할 수 있다.
2) 높은 가용성(Availability)
전용 배포 환경(dedicated deployment)을 구성하면 가용성은 99.99% 이상 수준까지 달성할 수 있다. 이는 일반적인 공개 API 서비스가 제공하는 약 99% 수준의 가용성과 비교하여 높은 안정성을 제공한다.
3) 비용 절감(Cost Reduction)
충분한 요청량(request volume)이 발생하는 대규모 환경에서는 추론 엔지니어링에 대한 초기 투자 이후 비용을 약 80% 수준까지 절감할 수 있다. 이러한 변화의 결과로 다양한 산업 분야의 기업들이 자체적인 추론 스택을 구축하기 시작했다.
여기에는 AI 기반 서비스를 처음부터 구축하는 스타트업(AI-native startup), 기존 업무 흐름에 AI 기능을 추가하는 기업, 그리고 의료 분야처럼 기존에는 기술 변화에 비교적 신중했던 산업까지 포함된다.
대표적인 사례가 커서(Cursor)이다. 커서는 오픈 모델을 기반으로 Composer 2.0을 개발했으며, 광범위한 추론 엔지니어링을 적용하여 폐쇄형 API보다 낮은 자동 완성(autocomplete) 지연 시간을 구현했다.
4. LLM 추론의 두 단계
추론 엔지니어링이 현재와 같은 형태로 발전한 이유를 이해하려면 먼저 사용자가 프롬프트를 입력했을 때 LLM 내부에서 실제로 어떤 과정이 발생하는지 이해해야 한다. LLM 추론 과정은 GPU에 서로 매우 다른 물리적 요구 사항을 가지는 두 단계로 나뉜다.

1) 토큰
토큰(token)은 LLM이 처리하는 기본 단위이다. 일반적으로 하나의 단어 또는 단어 일부에 해당한다.예를 들어, “inference”라는 단어는 하나의 토큰이 될 수 있지만, “engineering”이라는 단어는 두 개의 토큰으로 분리될 수 있다. 초당 토큰 수(tokens per second)와 같은 지연 시간 및 성능 지표는 모두 이 토큰 단위를 기준으로 측정한다.
2) 첫 번째 단계: 프리필
첫 번째 단계는 프리필 단계(prefill phase)라고 한다. 이 단계에서 모델은 전체 입력 프롬프트를 받아 모델의 모든 가중치(weight) 계층을 통과시키면서 병렬로 처리한다.
이 과정에서는 두 가지 결과가 생성된다. 첫 번째는 응답의 첫 번째 토큰이다. 두 번째는 KV 캐시이다. KV 캐시는 어텐션 메커니즘에서 생성되는 중간 값을 저장하는 데이터 구조이다. 이후 더 많은 토큰이 생성될 때 기존 계산 결과를 다시 활용할 수 있도록 저장한다.
또한, 프리필 단계는 연산 중심(Compute-bound) 작업이다. GPU의 행렬 연산 장치(math unit)가 주요 병목 지점이 된다. 그 이유는 입력 프롬프트의 모든 토큰이 모델의 모든 계층을 동시에 통과하며 처리되기 때문이다.
따라서 이 단계에서는 더 많은 계산 성능(raw computational power)을 투입하면 속도가 향상된다. Prefill 성능을 측정하는 대표적인 지표는 첫 번째 토큰까지 걸리는 시간(Time To First Token, TTFT) 이다. ChatGPT와 같은 서비스에서 질문을 입력한 후 첫 번째 글자가 나타날 때까지 잠시 기다리는 시간이 바로 프리필 과정에서 발생하는 시간이다.
3) 두 번째 단계: 디코드
두 번째 단계는 디코드 단계(decode phase)이다. 이 단계에서는 모델이 이후의 모든 토큰을 하나씩 순차적으로 생성한다. 각 토큰을 생성할 때마다 모델의 모든 가중치 계층을 통과하는 전체 순전파(forward pass)가 실행된다.
새로운 토큰은 이전에 생성된 모든 토큰에 의존하기 때문에 이 과정은 본질적으로 순차적(sequential)이다. 긴 응답을 생성하는 경우 GPU는 이러한 과정을 수천 번 반복 수행한다.
디코드 단계는 메모리 대역폭 제한(memory-bandwidth-bound) 작업이다. 이 단계에서는 GPU의 연산 처리 능력보다 모델 가중치를 메모리에서 읽어오는 속도가 더 중요한 제한 요소가 된다.
GPU는 각 순전파 과정마다 모델 가중치를 읽기 위해 많은 시간을 사용하며, 주요 병목은 산술 연산(arithmetic)이 아니라 데이터 이동에 존재한다. 디코드 성능을 측정하는 대표적인 지표는 초당 생성 토큰 수(Tokens Per Second, TPS) 이다. 긴 응답을 생성할 때 일정한 속도로 토큰이 출력되는 과정은 디코드 단계에서 발생한다.
4) Prefill과 Decode의 분리 구조
Prefill 단계와 Decode 단계는 서로 반대되는 병목 특성을 가지고 있기 때문에, 한쪽 단계를 가속하는 기술이 다른 단계에는 거의 영향을 주지 못하는 경우가 많다. 이러한 이유로 LLM 성능 벤치마크에서는 TTFT(Time To First Token)와 TPS(Tokens Per Second)를 별도의 지표로 보고한다. 각 단계의 성능을 독립적으로 측정하기 때문이다.
이러한 분리는 추론 엔지니어링의 전체 구조를 이해하는 핵심 개념이다. Prefill과 Decode를 서로 다른 두 개의 연산으로 이해하면, 추론 최적화 기술은 크게 세 가지 범주로 구분할 수 있다.첫 번째는 Prefill 단계를 빠르게 만드는 기술이다. 두 번째는 Decode 단계를 빠르게 만드는 기술이다. 세 번째는 두 단계 사이의 균형을 재조정하여 전체 시스템 효율을 높이는 기술이다.
물론 실제 추론 엔진은 이러한 두 단계 위에 배칭, 스케줄링, 메모리 관리 등 다양한 복잡한 기능을 추가로 수행한다. 하지만 이러한 모든 기능의 내부에는 Prefill과 Decode 분리 구조가 존재한다. 따라서 이 개념은 이후 설명하는 모든 추론 엔지니어링 기술의 기반이 된다.
댓글남기기