기술 가이드

분리된 미리 채우기 및 디코드 제공

대규모 언어 모델 추론을 두 개의 개별 단계(미리 채우기 및 디코딩)로 분할하고 이를 다양한 GPU 풀에서 실행하는 제공 아키텍처입니다.

2분 읽기마지막 업데이트

개요

It matters because these two phases have opposite hardware appetites, and forcing them onto the same machines wastes capacity and hurts latency.

심층 분석

LLM이 응답하면 두 단계로 작동합니다. Prefill은 전체 프롬프트를 한 번에 읽고 KV(키-값) 캐시를 구축합니다. 이는 GPU의 수학 단위를 포화시키는 대규모 병렬 컴퓨팅 바인딩 버스트입니다. 그런 다음 디코드는 한 번에 하나씩 토큰을 생성하며, 각 단계는 전체 KV 캐시(메모리 대역폭 제한, 가벼운 컴퓨팅 트리클)를 읽습니다. 함께 실행하면 긴 프리필로 인해 모든 사람의 디코드가 지연되고(헤드 오브 라인 차단) 두 가지를 일괄 처리하면 간섭이 발생합니다. 분할은 하나의 GPU 풀에 사전 채우기를 배치하고 다른 GPU 풀에 디코딩하여 NVLink 또는 InfiniBand와 같은 빠른 상호 연결을 통해 둘 사이에 KV 캐시를 전송합니다. 각 풀은 독립적으로 조정 및 확장되어 굿풋(goodput)을 개선하고 꼬리 지연 시간을 완화하며 운영자가 빡빡한 첫 번째 토큰 도달 시간과 출력 토큰당 시간 목표를 동시에 달성할 수 있도록 해줍니다.

기술적 통찰력

두 단계의 병목 현상은 다릅니다. Prefill은 모든 프롬프트 토큰을 병렬로 처리하므로 FLOP는 프롬프트 길이에 따라 확장되고 텐서 코어를 최대화합니다. 디코드는 자동 회귀적입니다. 각각의 새 토큰에는 HBM에서 전체 KV 캐시를 다시 읽는 하나의 정방향 패스가 필요하므로 처리량은 컴퓨팅이 아닌 메모리 대역폭에 따라 결정됩니다. 분할은 각 풀에 대해 크기 조정, 일괄 처리 및 서로 다른 병렬 처리를 선택한 다음 사전 채우기 작업자에서 KV 캐시를 작업자 디코딩으로 전달하여 이를 활용합니다.

전략적 영향

비용 및 예산

아키텍처 결정은 수년 동안 성능과 운영 비용을 결정합니다.

더 명확한 결정들

기술 교육은 팀이 최신 스택뿐만 아니라 올바른 스택을 선택하는 데 도움이 됩니다.

품질 관리

더 나은 엔지니어링 선택은 생산 시 신뢰성 사고를 줄입니다.

분리된 프리필 및 디코드 제공의 미래

생산 스택에서는 분리가 기본값이 될 것으로 예상됩니다. DistServe, Splitwise 및 Mooncake와 같은 시스템이 이를 대중화했으며 vLLM 및 NVIDIA Dynamo는 이제 분리된 모드를 제공합니다. 연구에서는 KV 캐시 전송 최적화, 요청 전반에 걸친 캐시 풀링 및 재사용, 트래픽 이동 시 사전 채우기/디코딩 비율의 동적 재조정, 접두사 캐싱 및 청크 사전 채우기와의 긴밀한 통합을 추진하고 있습니다. 컨텍스트 창이 수백만 개의 토큰으로 성장함에 따라 비용 효율적이고 지연 시간이 짧은 서비스를 제공하려면 이러한 단계를 분리하는 것이 점점 더 중요해지고 있습니다.

실제 구현

채팅 도우미는 긴 문서 메시지를 계산량이 많은 미리 채우기 클러스터로 라우팅한 다음 메모리 최적화 디코드 클러스터에서 응답을 스트리밍하여 입력 대기 시간을 원활하게 유지합니다.

NVIDIA Dynamo 및 vLLM을 통해 운영자는 별도의 사전 채우기 및 작업자 그룹을 배포하여 긴 프롬프트가 급증하더라도 진행 중인 세대가 중단되지 않도록 할 수 있습니다.

Mooncake(Moonshot AI의 Kimi에서 사용)는 사전 채우기와 디코딩을 분리하고 분산 KV 캐시 풀을 추가하여 대규모로 중복되는 프롬프트 재계산을 줄입니다.

대부분의 비용은 많은 출력 토큰을 스트리밍하는 데서 발생하므로 코드 완성 서비스는 짧은 프롬프트를 위한 작은 미리 채우기 풀과 큰 디코드 풀을 전용으로 사용합니다.

위험 및 가드레일

하나의 벤치마크를 최적화하면 더 광범위한 시스템 약점을 숨길 수 있습니다.

인프라 및 유지 관리 비용은 종종 과소평가됩니다.

시스템이 더욱 복잡해짐에 따라 보안 및 관찰 가능성의 격차가 커질 수 있습니다.

구현 로드맵

1

구현하기 전에 지연 시간, 품질, 비용 목표를 정의하세요.

2

현실적인 로드 및 데이터 조건에서 벤치마킹합니다.

3

오류, 드리프트 및 사용자 영향에 대한 계측기 모니터링.

4

확장하기 전에 롤백 및 사고 대응 경로를 준비하세요.

계속 탐색하세요

Free newsletter

Get the daily AI briefing

Three verified AI stories every weekday morning, written in plain English. Free forever, no ads.

One email each weekday. Unsubscribe in one click. We never sell or share your address.

Test yourself

Take the Disaggregated Prefill and Decode Serving quiz

Instant feedback on every answer, and a shareable certificate with a verifiable ID once you pass a course.

퀴즈 시작

Support free AI education. AI Understanding is a 501(c)(3) nonprofit — no ads, no paywall, ever. Make a donation

다음 가이드

Kubernetes의 KServe 및 모델 서비스

자주 묻는 질문

What is Disaggregated Prefill and Decode Serving?

대규모 언어 모델 추론을 두 개의 개별 단계(미리 채우기 및 디코딩)로 분할하고 이를 다양한 GPU 풀에서 실행하는 제공 아키텍처입니다. 이 두 단계는 하드웨어 성향이 반대이고 이를 동일한 시스템에 강제로 적용하면 용량이 낭비되고 대기 시간이 단축되기 때문에 중요합니다.

사전 채우기와 디코딩을 서로 다른 GPU 풀로 분리하는 핵심 하드웨어 이유는 무엇입니까?

Prefill은 전체 프롬프트를 병렬로 처리하고 컴퓨팅을 포화시키는 반면, 디코드는 각 단계에서 KV 캐시를 읽고 메모리 대역폭에 의해 제한됩니다. 이는 별도의 독립적으로 조정된 풀을 정당화하는 반대 방향입니다.

프리필 워커에서 디코딩 워커로 어떤 데이터 구조를 전송해야 합니까?

미리 채우기는 프롬프트에 대한 KV 캐시를 구축합니다. 디코드는 생성을 계속하려면 해당 캐시가 필요하므로 캐시는 디코드 풀에 대한 빠른 상호 연결을 통해 배송됩니다.

공유 GPU 설정에서 분할이 특히 감소하는 문제는 무엇입니까?

공유 GPU에서 긴 프리필 버스트는 진행 중인 디코딩 단계를 차단할 수 있습니다. 이들을 분리하면 간섭이 방지되고 꼬리 대기 시간이 안정화됩니다.

사전 채우기를 적극적으로 일괄 처리할 수 있지만 디코드는 다른 조정을 통해 이점을 얻을 수 있는 이유는 무엇입니까?

Prefill은 모든 프롬프트 토큰을 함께 처리하므로 더 큰 배치가 텐서 코어에 잘 공급됩니다. 디코드는 한 번에 하나의 토큰을 생성하고 메모리에 의해 제어되므로 다르게 확장됩니다.

분리된 풀 간에 KV 캐시를 이동하는 데 일반적으로 어떤 상호 연결이 사용됩니까?

KV 캐시 전송이 새로운 병목 현상이 되지 않도록 NVLink(노드 내) 및 InfiniBand(노드 간)와 같은 고대역폭, 저지연 링크가 필요합니다.