LLM이 여러 응답을 동시에 효율적으로 처리하는 방법을 살펴봅니다.
#93 위클리 딥 다이브 | 2025년 5월 28일
에디터 민재

💡 이번주 뉴스레터에는 이런 내용을 담았어요!

  • LLM의 배치 추론 개념을 살펴봅니다.
  • Static Batching이 갖는 한계를 정리합니다.
  • 빠른 추론을 위한 핵심 기술인 Continuous Batching을 소개합니다.
⚡ 빠른 추론을 위한 핵심 기술, Continuous Batching

안녕하세요, 에디터 민재입니다.


우리는 매일을 살아가며 수많은 일을 바쁘게 처리합니다. 어떤 업무는 온 힘을 다해 몰입해야 겨우 끝낼 수 있지만, 때로는 커피를 마시면서 최신 뉴스를 훑어보거나 통화를 하는 중에 메모를 하는 등 여러 가지 일을 동시에 수행하기도 합니다. 이처럼 사람은 일의 특성이나 난이도에 따라 자원을 효율적으로 나눠서 사용할 수 있습니다. 

사실 이는 대규모 언어 모델(LLM)도 마찬가지입니다. LLM 역시 메모리에 여유가 있다면 동시에 여러 작업을 처리할 수 있습니다. LLM이 추론(Inference)을 수행할 때, 하나의 프롬프트가 입력되면 모델은 적절한 응답을 완성할 때까지 한 번에 하나의 토큰을 생성하는 과정을 반복합니다. 그렇다면 만약 여러 개의 프롬프트가 동시에 입력된다면 어떻게 처리할까요?

이렇게 여러 개의 프롬프트를 한 번에 입력받아 각 프롬프트에 대한 응답을 동시에 생성하는 방식을 배치 추론(Batched Inference)이라고 합니다. 그런데, 한 가지 문제가 있습니다. 만약 여러 작업을 함께 시작했을 때, 어떤 일은 금방 끝나고 어떤 일은 조금 더 오래 걸리면 어떻게 할까요?
Static Batching이 갖는 한계
실제로 과거의 LLM은 이런 방식으로 여러 응답, 즉 배치(Batch)를 처리했습니다. 이를 정적 배칭(Static Batching)이라고 하는데요, 정적 배칭은 배치가 구성되면 배치 내 모든 프롬프트에 대한 추론이 완료될 때까지 고정적으로 유지됩니다.

문제는 프롬프트마다 응답 길이가 모두 제각각이라는 점입니다. 어떤 질문에는 50개의 토큰만으로도 대답할 수 있지만, 또 다른 질문에는 500개의 토큰도 부족할 수 있습니다. Static Batching을 사용하면 짧은 응답이 먼저 완료되었더라도 가장 긴 응답이 끝날 때까지 짧은 응답을 처리하는 메모리가 유휴 상태로 남아있을 수밖에 없습니다.

Static Batching의 동작 방식, 배치 내 모든 시퀀스의 생성이 완료될 때까지 기다려야 한다.

출처: Anyscale 블로그

Static Batching은 메모리 문제도 갖습니다. LLM의 추론 속도를 높이기 위해 사용하는 기법 중 하나로 KV 캐싱을 사용합니다. KV 캐싱은 기존에 처리한 토큰에 대한 정보의 일부를 메모리에 보관하여 같은 연산이 비효율적으로 반복되는 현상을 방지합니다. 그런데 Static Batching을 사용하면 이미 처리가 완료된 시퀀스의 KV 캐시가 배치 전체에 대한 처리가 끝날 때까지 메모리에 남아 있어야 하므로, 새로운 요청이 사용할 수 있는 메모리 공간도 제한됩니다.

특히 Static Batching은 온라인 서비스에서 지연시간 문제가 심각합니다. 간단한 질문을 한 사용자도 다른 누군가의 복잡한 질문에 대한 처리가 완료될 때까지 기다려야 하므로, 사용자 경험이 크게 저하됩니다. 그래서 서비스가 배포된 환경에서는 이런 문제가 더욱 두드러질 수밖에 없습니다.
Continuous Batching의 등장
이런 문제를 해결하기 위해 등장한 개념이 바로 연속 배칭(Continuous Batching)입니다. Continuous Batching의 개념 자체는 간단합니다. 배치 내에서 한 시퀀스의 처리가 완료되면, 그 자리를 새로운 요청으로 즉시 대체하는 것입니다. 이런 방식을 사용하면 GPU 자원이 낭비되는 시간을 최소화할 수 있겠죠. 그러면 Continuous Batching은 실제로 어떻게 구현되었을까요?

이 기술의 핵심은 동적으로 변화하는 배치 크기를 효율적으로 관리하는 것입니다. 앞서 LLM은 한 번(Step)에 하나의 토큰을 반복적으로 생성한다고 했으므로, Continuous Batching을 사용하면 추론 스텝마다 배치의 구성이 달라질 수 있습니다. 그만큼 메모리 할당과 해제가 빈번하게 발생하게 됩니다.
Continuous Batching의 동작 방식, 하나의 시퀀스에 대한 처리가 완료되면 즉시 다른 시퀀스로 대체한다.

이는 Iteration-level Scheduling이라는 과정에 의해 이루어집니다. 스케줄러가 실행할 요청을 선택하면, 선택된 요청에 대해서는 단 한 번의 반복(Iteration)만 실행됩니다. 즉, 일단 하나의 토큰만을 생성하도록 지시하는 것이죠. 이후 실행 결과를 수신한 후, 완료된 요청이 감지되면 결과를 반환하고 새로운 요청으로 대체합니다.


그런데 Iteration-level Scheduling을 실제로 구현하기 위해서는 임의의 요청들을 배치 단위로 처리할 수 있어야 합니다. 문제는 각 요청마다 처리된 토큰의 개수가 다르기 때문에 모든 연산을 배치 처리할 수가 없다는 것입니다. 딥러닝 모델이 여러 데이터를 배치 단위로 처리하기 위해서는 각 데이터가 갖는 형태가 동일해야 합니다.


사실 배치 내 데이터의 형태가 같아야 한다는 제약은 Static Batching에서도 예외는 아닙니다. 하지만 Static Batching을 사용하는 상황에서는 길이가 짧은 시퀀스에는 패딩(Padding)이라는 기술을 적용해서 강제로 입력의 형태를 동일하게 맞춰줄 수 있었습니다. 또한, 짧은 응답이 생성된 시퀀스에는 긴 응답이 완료될 때까지 계속해서 패딩 토큰을 추가하면서 출력의 형태까지 일관되게 유지할 수 있습니다.


그런데 Continuous Batching에서는 패딩을 사용하여 데이터의 형태를 맞춰줄 수가 없습니다. 그래서 제안된 방법이 Selective Batching입니다. 이는 추론 과정에서 이루어지는 모든 연산을 배치 단위로 처리(Batchify)하는 대신, 선택된 일부 연산만 배치 단위로 처리하는 기법입니다. 예를 들어, 어텐션(Attention)과 관련된 연산은 요청별로 분리하여 처리하고, 선형 레이어(Linear Layer) 연산 등 다른 연산은 배치 처리를 수행합니다.


Continuous Batching은 최신 LLM 추론 과정에서 실제로도 널리 사용되고 있습니다. 특히 vLLM, HuggingFace의 Text Generation Interface(TGI)와 같은 주요 프레임워크에서도 적극적으로 도입되고 있습니다. 연구 결과에 따르면 GPT-3 175B 모델에서 기존 시스템 대비 무려 36.9배의 처리량(Throughput) 향상을 달성했다고 하며, 다른 연구에서도 Continuous Batching의 실질적인 효과가 입증되었습니다.


놀라운 점은 이 혁신적인 연구가 한국인 연구자들에 의해 최초로 제안되었다는 것입니다. Continuous Batching은 ORCA: A Distributed Serving System for Transformer-Based Generative Models 논문에서 최초로 제안되었으며, 이 논문은 2022년 USENIX OSDI라는 학회에서 서울대학교와 FriendliAI의 연구진이 공동으로 발표했습니다. 원래 Iteration-level Scheduling이라는 이름으로 제안된 이 기술은, 이후 Continuous Batching이라는 용어로 대중화 되었습니다.

학습보다는 추론

이제는 LLM의 능력이 비약적으로 발전해서 복잡한 작업도 상당히 만족스러운 수준으로 해내는 시대가 왔습니다. 문제는 한 번의 요청을 처리하는 데 적게 잡아도 수백에서 많게는 수만 토큰을 생성해야 한다는 것입니다. 과거에는 주로 학습 단계에서 발생하는 비용을 고려하여 효율성을 논의하곤 했습니다. 하지만 이제는 추론 단계에서의 효율을 고민하지 않을 수 없습니다. 학습은 한 번 이루어지지만, 추론은 반영구적으로 이루어집니다.


잘 훈련된 모델의 가치는 실제 세상에서 얼마나 효율적으로, 그리고 경제적으로 동작하느냐에 달려 있습니다. ChatGPT의 유료화 배경에도 추론 과정에서의 천문학적인 비용 문제가 자리하고 있습니다. 샘 알트만은 실제로 연산 비용이 눈물 날 정도라고 했는데요, 이는 단순한 과장이 아닙니다. 앞으로 LLM이 더욱 강력해지고 복잡해질수록, 추론 효율성의 중요성은 더욱 커질 것입니다. Continuous Batching으로 시작된 이 새로운 경쟁의 장은 과연 어디로 향하게 될까요?

SNS를 팔로우하면
최신 소식을 가장 빠르게 확인하실 수 있습니다 😆

지금 읽고 있는 뉴스레터를 매주 받아 보고 싶다면
아래 '구독하기' 버튼을 클릭해주세요 😉
deep daiv.
manager@deepdaiv.com