Chunked Prefill
긴 프롬프트를 토큰 청크로 분할하여 동시 워크로드 환경에서 더 원활한 서빙을 제공함으로써 청크 프리필(chunked prefill)이 LLM 추론 지연 시간과 처리량을 개선하는 방법을 알아보세요.
청크 프리필은 전체 프롬프트를 중단 없는 단일 연산으로 처리하는 대신, 긴 입력 프롬프트를 더 작은 tokens 그룹으로 나누는 추론 스케줄링 기법입니다. 추론 엔진은 이러한 청크를 다른 요청의 토큰 생성과 인터리빙하여 하나의 긴 프롬프트가 GPU를 독점하는 것을 방지할 수 있습니다. 그 결과 동시 작업 부하에서 일반적으로 더 부드러운 지연 시간, 향상된 하드웨어 활용도, 그리고 대화형 large language model 애플리케이션을 위한 더욱 예측 가능한 서비스를 제공합니다.
청크 프리필 작동 방식#
자기회귀적 Transformer 추론에는 두 가지 주요 단계가 있습니다:
- 프리필: 모델이 모든 입력 토큰을 처리하고, 어텐션 상태를 계산하며, KV cache를 채웁니다. 프리필은 많은 토큰을 병렬로 평가하며 일반적으로 연산 집약적입니다.
- 디코드: 모델이 이전에 캐시된 상태를 읽으면서 한 번에 하나의 토큰씩 출력을 생성합니다. 디코드는 순수 연산보다는 메모리 대역폭에 의해 제한되는 경우가 많습니다.
청킹이 없으면 20,000토큰 요청이 짧은 요청보다 훨씬 더 오래 추론 단계를 점유할 수 있습니다. 이로 인해 활성 생성 작업에 일시 정지가 발생하여, 자체 프롬프트가 작더라도 토큰 간 지연 시간이 증가할 수 있습니다.
청크 프리필을 사용하면 스케줄러가 각 반복에 토큰 예산을 할당합니다. 먼저 활성 디코드 작업을 스케줄링한 다음, 남은 예산을 하나 이상의 프롬프트 청크에 사용합니다. 프롬프트가 맞지 않으면 남은 토큰은 이후 반복을 위해 대기합니다. 현재 vLLM optimization guidance에서는 이 접근 방식을 연산 집약적인 프리필 작업과 메모리 집약적인 디코딩 작업을 결합하는 방법으로 설명합니다.
청킹은 프롬프트 토큰의 처리 시점을 변경하며, 순서나 의미를 바꾸지 않습니다. 완료된 각 청크는 전체 프롬프트가 준비되고 디코딩이 시작될 수 있을 때까지 요청의 캐시된 어텐션 상태를 확장합니다.
청크 프리필이 중요한 이유#
청크 프리필은 프로덕션 model serving에서 상충되는 성능 목표를 해결합니다:
- 토큰 간 지연 시간: 기존 디코드 요청 우선순위 지정을 통해 스트리밍 응답이 긴 일시 정지 없이 계속될 수 있도록 돕습니다.
- 첫 토큰 생성 시간: 큰 청크는 새 프롬프트를 더 빨리 완료하는 반면, 매우 작은 청크는 첫 번째 생성된 토큰을 지연시킬 수 있습니다.
- 처리량: 프리필과 디코드 작업을 결합하면 GPU 연산과 메모리 대역폭을 보다 효과적으로 사용할 수 있습니다.
- 공정성: 긴 프롬프트가 많은 짧은 대화형 요청을 차단할 가능성이 줄어듭니다.
따라서 청크 또는 토큰 예산 설정은 절충안입니다. vLLM scheduler configuration은 일괄 처리된 토큰 제한, 부분 프리필, 긴 프롬프트 임계값에 대한 제어 기능을 제공합니다. 예산이 작을수록 응답성이 좋은 디코딩에 유리하고, 예산이 클수록 빠른 프롬프트 수용에 유리합니다.
청킹이 모든 병목 현상을 없애는 것은 아닙니다. 긴 컨텍스트는 여전히 캐시 메모리를 소비하며, 지나치게 공격적인 수용은 캐시 압박, 요청 선점 또는 반복 작업을 유발할 수 있습니다. 운영자는 현실적인 프롬프트 분포 하에서 중앙값 및 테일 inference latency, 첫 토큰 생성 시간, 토큰 간 지연 시간, 처리량, GPU 메모리 사용량을 측정해야 합니다.
관련 추론 개념#
청크 프리필은 여러 최적화와 밀접하게 연결되어 있지만 고유한 목적을 수행합니다:
- Continuous batching: 생성 중에 요청을 동적으로 추가하고 제거합니다. 청크 프리필은 긴 프롬프트 처리를 토큰 수준 경계에서 스케줄링 가능하게 만들어 이를 보완합니다.
- Prompt caching: 반복되는 프롬프트 접두사에 대해 이전에 계산된 상태를 재사용합니다. 청크 프리필은 새로운 연산을 스케줄링하며, 해당 연산을 건너뛰지 않습니다.
- 페이지드 KV-캐시 관리: 캐시된 어텐션 상태를 메모리 블록으로 구성합니다. NVIDIA의 TensorRT-LLM overview에는 프롬프트 처리 최적화와 함께 페이지드 캐싱 및 인플이트 배칭이 포함되어 있습니다.
- 동적 배칭: NVIDIA Triton dynamic batching guide에 설명된 대로 별도의 요청을 배치로 결합합니다. 개별 긴 프롬프트를 부분 프리필로 반드시 나누는 것은 아닙니다.
- 분산형 프리필 및 디코드: 별도의 워커에서 단계를 실행합니다. NVIDIA의 prefill and decode deployment guidance는 대신 각 단계를 독립적으로 확장할 수 있는 방법을 보여줍니다.
Ultralytics YOLO26 Triton deployment workflow는 확장 가능한 컴퓨터 비전 추론과 자동 배칭을 지원하지만, 표준 YOLO 객체 검출에는 자기회귀적 텍스트 프리필 단계가 없습니다. 청크 프리필은 주로 생성형 언어 및 멀티모달 모델에 적용됩니다.
실제 애플리케이션 사례#
-
문서 어시스턴트: 검색 증강 어시스턴트는 짧은 질문을 하는 사용자를 동시에 서비스하면서 긴 보고서를 받을 수 있습니다. 보고서의 프리필을 청킹하면 전체 컨텍스트가 처리될 때까지 멈추는 대신 진행 중인 채팅이 계속 디코딩할 수 있습니다.
-
멀티모달 비디오 분석: vision-language model은 이미지 특징, 객체 설명, 긴 텍스트 지시사항을 받을 수 있습니다. 비전 파이프라인은 먼저 Ultralytics YOLO prediction을 사용하여 검출을 수행한 다음, 구조화된 시각적 컨텍스트를 생성형 모델에 보낼 수 있습니다. 청크 프리필은 결과 시각 및 텍스트 토큰을 다른 요청과 함께 스케줄링하는 데 도움이 됩니다. NVIDIA의 multimodal encode-prefill-decode workflow는 이러한 단계를 독립적으로 관리하는 것이 확장성을 어떻게 향상시킬 수 있는지 보여줍니다.
실무 배포 지침#
대상 아키텍처를 공식적으로 지원하는 서빙 엔진을 통해서만 청크 프리필을 활성화하세요. 예를 들어 TensorRT-LLM backend configuration은 지원되는 배포에 대한 청크 컨텍스트 제어 기능을 문서화하고 있습니다.
단일 요청에 의존하는 대신 현실적인 동시성, 입력 길이, 출력 길이로 벤치마크를 수행하세요. 런타임에서 권장하는 토큰 예산으로 시작한 다음, 첫 토큰 생성 시간과 토큰 간 지연 시간을 모니터링하면서 조정하세요. 마지막으로 매우 긴 프롬프트와 매우 짧은 프롬프트가 모두 포함된 혼합 작업 부하를 테스트하세요. 바로 이 지점에서 청크 프리필이 가장 명확한 운영상의 가치를 제공합니다.






