연재 중집필 중인 책입니다. 아직 본문이 비어 있거나 채워지는 중인 장이 있습니다.

시작하며

언어 모델을 API로 호출하던 팀이 모델을 직접 서빙하기로 결정하는 이유는 여러 가지다. 데이터를 회사 밖으로 보낼 수 없거나, 호출량이 늘어 API 비용이 GPU 비용을 넘어서거나, 공개 가중치 모델을 미세 조정(fine-tune)해서 써야 하는 경우다. 어느 쪽이든 허깅페이스 등에서 가중치를 내려받아 추론 엔진에 올리면 모델은 금방 돌아간다. LLM으로부터 응답을 받는 파이프라인을 만드는 데까지는 반나절이면 충분하다.

하지만 문제는 그 다음이다. 동시에 수십, 수백 개의 요청이 들어오면 같은 GPU에서 요청마다 기다리는 시간이 크게 벌어지고, 벤치마크에서 보던 숫자는 재현되지 않는다. GPU 사용률은 100%인데 처리량은 기대에 못 미치고, 배치를 키우면 처리량은 오르지만 응답이 끊겨 나온다. 이 책은 그 사이에서 추론 엔진 안에 무슨 일이 일어나는지를 설명한다.

이 책이 다루는 문제

LLM 서빙의 설정 대부분은 두 가지 사실에서 나온다. 하나는 생성이 프롬프트를 한 번에 읽는 프리필과 토큰을 하나씩 만드는 디코드로 나뉘고, 프리필은 GPU의 연산 성능에, 디코드는 메모리 대역폭에 묶인다는 사실이다. 다른 하나는 요청마다 쌓이는 KV 캐시가 GPU 메모리를 차지해 동시에 처리할 수 있는 요청 수를 정한다는 사실이다.

배치와 스케줄링, 페이지 단위 메모리 관리, 프리픽스 캐시, 양자화, 투기적 디코딩, 텐서 병렬, 프리필과 디코드의 분리는 모두 이 두 가지 제약 안에서 지연과 처리량을 맞바꾸는 방법이다. 책은 각 기법이 어느 제약을 건드리는지, 그래서 무엇을 얻고 무엇을 내주는지를 중심으로 설명한다. 엔진의 설정 이름은 예로 들 뿐이고, 설정을 고르는 기준이 되는 원리를 남기는 것이 목표다.

읽는 사람

GPU에 모델을 올려 서비스로 운영하는 인프라 엔지니어와 ML 엔지니어를 생각하고 썼다. 트랜스포머가 어텐션과 MLP 층으로 이뤄진다는 정도의 구조, GPU에 HBM과 연산 유닛이 있다는 정도의 하드웨어 지식이 있으면 읽을 수 있다. 행렬 곱의 연산량을 세는 계산이 자주 나오지만 곱셈과 나눗셈 이상의 수학은 쓰지 않는다.

모델을 API로만 써 왔고 애플리케이션 쪽 설계가 궁금하다면 『개발자를 위한 AI 엔지니어링』이 그 층을 다룬다. 이 책은 그보다 한 층 아래, 요청이 추론 엔진에 들어간 뒤의 일을 다룬다.

숫자를 다루는 방식

책에 나오는 숫자는 공개된 사양과 논문에서 계산한 값이다. 기준으로 삼는 조합은 NVIDIA H100 SXM 80GB 한 장과 Llama 3.1 8B Instruct(BF16)이고, 모델이 한 장에 들어가지 않는 경우를 다룰 때는 Llama 3.1 70B를 쓴다. 장마다 같은 조합을 쓰므로 앞에서 구한 값이 뒤에서 그대로 이어진다. 예를 들어 이 조합에서 디코드 스텝 하나의 하한은 약 4.8ms이고, 토큰 하나의 KV 캐시는 128KiB다.

이 값들은 이론적인 하한이다. 메모리 대역폭과 연산 성능을 100% 쓴다고 가정하고, 커널 실행 비용과 통신 지연을 빼고 계산한다. 실제 시스템은 이보다 느리다. 그래도 하한은 쓸모가 있다. 어떤 설정이 어느 자원에 묶여 있는지, 설정을 바꾸면 어느 쪽으로 얼마나 움직일지를 크기로 가늠하게 해 주기 때문이다. 실제 값은 각자의 모델과 장비, 부하로 재야 하고, 그 방법은 운영 부에서 다룬다.

사양과 논문의 수치에는 본문에 출처를 링크로 달았다. 엔진 설정 이름과 기본값은 2026년 10월에 확인한 vLLM 문서를 기준으로 했으며, 엔진은 빠르게 바뀌므로 쓰는 버전의 문서를 다시 확인하기 바란다.

다루지 않는 것

모델 학습과 미세 조정, 모델 품질을 평가하는 방법, 프롬프트와 검색 증강 같은 애플리케이션 설계는 다루지 않는다. 양자화처럼 품질에 영향을 주는 기법에서는 무엇을 확인해야 하는지만 짚는다. 특정 클라우드나 쿠버네티스 배포 도구의 사용법, 설치와 실행 명령도 싣지 않는다. 도구는 바뀌어도 판단의 근거는 덜 바뀐다는 생각에서다.

구성

부다루는 것
측정의 기준지연을 재는 지표, 프리필과 디코드가 묶이는 자원, 지연 목표와 굿풋
배치와 스케줄링정적 배치에서 연속 배치로, 청크 프리필과 우선순위
KV 캐시와 메모리KV 캐시의 크기 계산, 페이지 단위 관리, 프리픽스 캐시
양자화가중치 양자화와 KV 캐시 양자화
디코딩 가속투기적 디코딩과 어텐션 커널
분산 서빙텐서 병렬과 파이프라인 병렬, 프리필과 디코드의 분리
운영부하 테스트, 라우팅과 오토스케일, 추론 엔진 선택

첫 부는 나머지 모든 부의 바탕이므로 먼저 읽기를 권한다. 그 뒤로는 지금 겪는 문제에 맞는 부부터 읽어도 된다. 응답이 끊겨 나온다면 배치와 스케줄링을, 동시 처리 요청 수가 모자라다면 KV 캐시와 메모리를, 모델이 GPU 한 장에 들어가지 않는다면 분산 서빙을 먼저 펴면 된다.