아티클 목록으로
추론·배포

vLLM의 계층형 KV 캐시, GPU 밖 확장과 노드 간 공유 지원

약 3분 소요

긴 컨텍스트와 다중 턴 대화는 KV 캐시를 빠르게 키워 가속기 메모리를 압박합니다. 오래된 데이터가 제거된 뒤 같은 내용이 다시 필요해지면 기존 시스템은 처음부터 재계산해야 했습니다. vLLM의 Tiered KV Cache Offloading은 제거된 KV 청크를 낮은 계층에 보관하고, 필요할 때 다시 읽어오는 경로를 제공합니다.

호스트 메모리를 중심으로 한 구조

이 설계의 핵심은 GPU가 외부 저장장치와 직접 통신하지 않고 모든 KV 데이터를 호스트 메모리를 거치게 하는 것입니다. 오프로드 시 데이터는 먼저 가속기에서 CPU DRAM으로 복사됩니다. 이 복사가 끝나는 즉시 GPU 메모리를 해제할 수 있으며, 이후 저장장치 기록이나 원격 전송은 호스트 사본을 기반으로 비동기 진행됩니다. 다시 불러올 때는 반대로 보조 계층에서 호스트 메모리로 올린 다음 GPU에 배치합니다. 따라서 데이터가 실제로 준비되기 전까지 GPU 메모리를 미리 오래 점유할 필요가 없습니다.

호스트 메모리는 단순한 임시 버퍼가 아니라 LRU/ARC를 사용하는 1차 캐시입니다. 스케줄러는 먼저 이 계층을 확인하고, 캐시 미스가 발생하면 설정된 순서대로 보조 계층을 조회합니다. 하나의 요청에 포함된 서로 다른 청크가 호스트, 파일 시스템, 원격 피어 등 각기 다른 계층에서 제공될 수도 있습니다.

이기종 환경을 위한 표준 표현

텐서 병렬 환경에서는 각 가속기가 KV 캐시의 일부를 나눠 가집니다. vLLM은 이 조각들을 공유 호스트 메모리 영역으로 모으고, 한 페이지에 한 레이어의 한 블록을 저장하며 여러 병렬 랭크의 KV 헤드를 연속 영역에 배치하는 표준 레이아웃을 사용합니다. 그 결과 보조 계층에 대한 작은 전송을 줄이고 더 크고 효율적인 I/O로 처리할 수 있습니다.

호스트 측 표현이 고정되어 있으므로 가속기 종류, 어텐션 백엔드, 병렬화 설정이 다른 노드도 GPU 메모리 배치를 다시 매핑하지 않고 KV 데이터를 교환할 수 있습니다. 보조 계층은 가속기별 API를 이해할 필요 없이 일반적인 CPU 기반 I/O 라이브러리로 구현됩니다.

보조 계층과 사용 사례

  • 파일 시스템: 콘텐츠 주소 기반으로 청크를 저장하며, 같은 마운트를 사용하는 여러 인스턴스가 자동으로 공유할 수 있습니다.
  • 오브젝트 스토리지: S3 호환 서비스를 사용해 네트워크 기반의 공유 저장 계층을 구성합니다.
  • P2P 전송: ZMQ로 조정하고 NIXL 기반 RDMA로 호스트 간 데이터를 이동합니다.

P2P는 Prefill/Decode 분리와 부하 분산에 특히 유용합니다. Prefill 인스턴스가 호스트 메모리에 준비한 청크를 Decode 인스턴스가 가져올 수 있고, 청크 단위 Prefill에서는 계산과 전송을 더 일찍 겹칠 수 있습니다. 부하가 높은 인스턴스의 KV 청크를 여유 있는 인스턴스가 가져가는 방식도 가능합니다. GPU별 조각을 호스트에서 먼저 통합하면 네트워크에서 더 큰 전송 단위로 처리할 수 있습니다.

의미와 고려할 점

이 구조는 KV 캐시를 단일 GPU의 임시 상태에서 계층화되고 공유 가능한 추론 인프라로 확장합니다. 재계산을 줄이고 클러스터의 실질적인 서비스 용량을 높일 수 있지만, 효과는 호스트 메모리 크기, 저장장치 지연, 네트워크 대역폭, 캐시 적중률에 따라 달라집니다. 원격 계층은 재계산을 줄여도 데이터 이동 비용까지 없애지는 않습니다. 그럼에도 vLLM은 여러 노드에 컨텍스트 상태를 분산하기 위한 일관된 구현 기반을 제시하고 있습니다.

vLLM Blog

댓글

로그인 상태 확인 중…

댓글 불러오는 중…

관련 게시물

CCTest · Blog
병목을 따라가다: AMD MI355X에서 MiniMax M3를 최적화한 방법
추론·배포
cctest.ai
추론·배포

병목을 따라가다: AMD MI355X에서 MiniMax M3를 최적화한 방법

vLLM은 AMD Instinct MI355X에서 MiniMax M3의 성능을 높인 과정을 공개했다. 핵심은 단일 커널을 찾는 것이 아니라 로컬 텐서 형태, 중복 계산, 데이터 이동, 디스패치, 대기열을 차례로 점검하며 이동하는 병목을 추적하는 것이다.

더 보기