Prefix caching은 여러 프롬프트가 공유하는 시작

동일한 시작 문구를 공유하는 여러 요청의 토큰 재계산을 생략해 프리필(Prefill, 입력값 처리) 속도를 끌어올린다. 특정 길이 이상의 프리픽스(Prefix, 접두사)를 한 번만 계산해 KV 캐시 페이지드 메모리(KV cache paged memory)에 저장하고, 이후 동일한 프리픽스를 가진 요청이 들어오면 해시(hash) 매칭을 통해 해당 블록을 즉시 재사용하는 방식이다. 이 과정을 통해 시스템은 전체 토큰을 처음부터 다시 계산할 필요 없이, 요청마다 달라지는 새로운 프롬프트 토큰만 처리하면 된다. 반복되는 입력 구조에서 발생하는 중복 연산을 제거해 초기 처리 시간을 단축했다.

긴 프롬프트를 작은 청크(chunk, 덩어리)로 나누어 처리하는 청크드 프리필(Chunked prefill) 기술은 개별 요청의 지연 시간을 낮춘다. 단일 요청의 길이가 너무 길면 엔진 단계를 독점하게 되어, 대기 중인 다른 프리필 요청들이 실행되지 못하고 계속해서 뒤로 밀리는 현상이 발생하기 때문이다. 이러한 자원 독점은 다른 모든 요청의 실행 시점을 늦춰 결과적으로 전체적인 레이턴시(latency, 응답 지연)를 증가시키는 원인이 된다. vLLM V1에서는 `long_prefill_token_threshold` 설정을 양의 정수로 지정해 이 기능을 활성화할 수 있다. 특정 요청이 엔진 자원을 독점해 시스템 전체의 응답성을 떨어뜨리는 병목 현상을 방지한다.

비동기 엔진은 연속 배칭(continuous batching)

초기 프롬프트만 처리할 수 있는 동기 엔진은 실행 중간에 새로운 요청을 주입하는 메커니즘이 없다. vLLM의 비동기 엔진은 연속 배칭(continuous batching, 실행 중 새로운 요청을 계속 추가하는 방식)을 통해 실행 중인 상태에서도 새로운 요청을 넣을 수 있게 했다. 매 단계(step)가 끝날 때마다 시스템은 기존에 처리하던 요청과 새로 유입된 요청을 모두 검토하여 함께 처리한다. 이는 새로운 요청이 들어올 때까지 기다리지 않고, 매 처리 단계마다 요청 목록을 갱신해 처리 흐름에 편입시키는 구조다.

vLLM V1 스케줄러는 prefill(입력 텍스트를 처음 처리하는 단계)과 decode(다음 토큰을 생성하는 단계) 요청을 동일한 단계에서 혼합해 처리한다. 이전 버전인 vLLM V0 엔진은 prefill 또는 decode 중 하나만 한 번에 처리할 수 있는 제약이 있었다. V1은 스케줄러 설계 개선을 통해 두 가지 서로 다른 유형의 워크로드를 한 단계에서 동시에 처리할 수 있도록 구현했다. prefill과 decode라는 서로 다른 성격의 요청을 묶어 한 번에 처리함으로써, V0의 순차적 처리 방식에서 발생하던 병목을 해결했다.

핵심인 LLM 엔진은 KV-cache manager

가용 KV-cache 블록 풀인 `free_block_queue`를 유지하는 KV-cache manager가 추론 엔진의 핵심 제어를 담당한다. 엔진 코어는 이러한 하위 컴포넌트들의 유기적인 조합으로 구성되어 작동한다. Model executor가 구축되는 과정에서 Worker 객체가 생성되며, 이 Worker는 다시 model runner에 모델 실행을 위임하는 구조를 통해 실제 연산을 처리한다.

Paged Attention(페이지드 어텐션, 메모리 효율을 높이는 어텐션 기법)은 토큰을 계산된 KV cache 블록에 매핑하는 인덱싱 구조를 활용한다. KV-cache manager가 관리하는 블록들이 이 인덱싱 구조의 역할을 직접 수행하며 각각의 토큰을 계산된 KV cache 블록에 정확히 연결한다. 이를 통해 메모리 관리 효율을 극대화하고 토큰 매핑 과정을 최적화한다.

워크로드의 성격 중 긴 프롬프트 비중이 높다면 `long_prefill_token_threshold` 설정값과 `--tensor-parallel-size`, `--data-parallel-size-local` 분산 처리 옵션을 통해 프리필과 디코드 인스턴스를 물리적으로 분리하는 Disaggregated P/D(분리형 프리필-디코드) 구조를 채택하고, 빠른 응답 속도가 우선이라면 통합 구조를 유지하는 것이 실행 기준이 된다.