개요
이 두 단계는 하드웨어 성향이 반대이고 이를 동일한 시스템에 강제로 적용하면 용량이 낭비되고 대기 시간이 단축되기 때문에 중요합니다.
심층 분석
LLM이 응답하면 두 단계로 작동합니다. Prefill은 전체 프롬프트를 한 번에 읽고 KV(키-값) 캐시를 구축합니다. 이는 GPU의 수학 단위를 포화시키는 대규모 병렬 컴퓨팅 바인딩 버스트입니다. 그런 다음 디코드는 한 번에 하나씩 토큰을 생성하며, 각 단계는 전체 KV 캐시(메모리 대역폭 제한, 가벼운 컴퓨팅 트리클)를 읽습니다. 함께 실행하면 긴 프리필로 인해 모든 사람의 디코드가 지연되고(헤드 오브 라인 차단) 두 가지를 일괄 처리하면 간섭이 발생합니다. 분할은 하나의 GPU 풀에 사전 채우기를 배치하고 다른 GPU 풀에 디코딩하여 NVLink 또는 InfiniBand와 같은 빠른 상호 연결을 통해 둘 사이에 KV 캐시를 전송합니다. 각 풀은 독립적으로 조정 및 확장되어 굿풋(goodput)을 개선하고 꼬리 지연 시간을 완화하며 운영자가 빡빡한 첫 번째 토큰 도달 시간과 출력 토큰당 시간 목표를 동시에 달성할 수 있도록 해줍니다.
실제 구현
채팅 도우미는 긴 문서 메시지를 계산량이 많은 미리 채우기 클러스터로 라우팅한 다음 메모리 최적화 디코드 클러스터에서 응답을 스트리밍하여 입력 대기 시간을 원활하게 유지합니다.
NVIDIA Dynamo 및 vLLM을 통해 운영자는 별도의 사전 채우기 및 작업자 그룹을 배포하여 긴 프롬프트가 급증하더라도 진행 중인 세대가 중단되지 않도록 할 수 있습니다.
Mooncake(Moonshot AI의 Kimi에서 사용)는 사전 채우기와 디코딩을 분리하고 분산 KV 캐시 풀을 추가하여 대규모로 중복되는 프롬프트 재계산을 줄입니다.
대부분의 비용은 많은 출력 토큰을 스트리밍하는 데서 발생하므로 코드 완성 서비스는 짧은 프롬프트를 위한 작은 미리 채우기 풀과 큰 디코드 풀을 전용으로 사용합니다.
분리된 프리필 및 디코드 제공의 미래
생산 스택에서는 분리가 기본값이 될 것으로 예상됩니다. DistServe, Splitwise 및 Mooncake와 같은 시스템이 이를 대중화했으며 vLLM 및 NVIDIA Dynamo는 이제 분리된 모드를 제공합니다. 연구에서는 KV 캐시 전송 최적화, 요청 전반에 걸친 캐시 풀링 및 재사용, 트래픽 이동 시 사전 채우기/디코딩 비율의 동적 재조정, 접두사 캐싱 및 청크 사전 채우기와의 긴밀한 통합을 추진하고 있습니다. 컨텍스트 창이 수백만 개의 토큰으로 성장함에 따라 비용 효율적이고 지연 시간이 짧은 서비스를 제공하려면 이러한 단계를 분리하는 것이 점점 더 중요해지고 있습니다.
실천에 옮기기
왜 중요한가요?
- 비용 및 예산. 아키텍처 결정은 수년 동안 성능과 운영 비용을 결정합니다.
- 더 명확한 결정들. 기술 교육은 팀이 최신 스택뿐만 아니라 올바른 스택을 선택하는 데 도움이 됩니다.
- 품질 관리. 더 나은 엔지니어링 선택은 생산 시 신뢰성 사고를 줄입니다.
조심하세요
- 하나의 벤치마크를 최적화하면 더 광범위한 시스템 약점을 숨길 수 있습니다.
- 인프라 및 유지 관리 비용은 종종 과소평가됩니다.
- 시스템이 더욱 복잡해짐에 따라 보안 및 관찰 가능성의 격차가 커질 수 있습니다.
다음 단계
- 구현하기 전에 지연 시간, 품질, 비용 목표를 정의하세요.
- 현실적인 로드 및 데이터 조건에서 벤치마킹합니다.
- 오류, 드리프트 및 사용자 영향에 대한 계측기 모니터링.
- 확장하기 전에 롤백 및 사고 대응 경로를 준비하세요.
계속 탐색하세요
무료 뉴스레터
일일 AI 브리핑 받기
매주 평일 아침마다 3개의 검증된 AI 스토리를 일반 영어로 작성합니다. 무료이며, 광고 없음.
매주 평일마다 한 번 이메일을 받습니다. 한 번 클릭으로 구독 해지. 주소를 판매하거나 공유하지 않습니다.
자신을 테스트해 보세요
Disaggregated Prefill and Decode Serving 퀴즈 풀기
모든 답변에 즉각적인 피드백과, 과정을 통과하면 검증 가능한 ID가 있는 공유 가능한 인증서를 제공합니다.
무료 AI 교육을 지원합니다. AI Understanding는 501(c)(3) 비영리 단체입니다 — 광고 없음, 유료 장벽 없음, 영원히. 기부하기
자주 묻는 질문
분리된 미리 채우기 및 디코드 제공이란 무엇입니까?
대규모 언어 모델 추론을 두 개의 개별 단계(미리 채우기 및 디코딩)로 분할하고 이를 다양한 GPU 풀에서 실행하는 제공 아키텍처입니다. 이 두 단계는 하드웨어 성향이 반대이고 이를 동일한 시스템에 강제로 적용하면 용량이 낭비되고 대기 시간이 단축되기 때문에 중요합니다.
사전 채우기와 디코딩을 서로 다른 GPU 풀로 분리하는 핵심 하드웨어 이유는 무엇입니까?
Prefill은 전체 프롬프트를 병렬로 처리하고 컴퓨팅을 포화시키는 반면, 디코드는 각 단계에서 KV 캐시를 읽고 메모리 대역폭에 의해 제한됩니다. 이는 별도의 독립적으로 조정된 풀을 정당화하는 반대 방향입니다.
프리필 워커에서 디코딩 워커로 어떤 데이터 구조를 전송해야 합니까?
미리 채우기는 프롬프트에 대한 KV 캐시를 구축합니다. 디코드는 생성을 계속하려면 해당 캐시가 필요하므로 캐시는 디코드 풀에 대한 빠른 상호 연결을 통해 배송됩니다.
공유 GPU 설정에서 분할이 특히 감소하는 문제는 무엇입니까?
공유 GPU에서 긴 프리필 버스트는 진행 중인 디코딩 단계를 차단할 수 있습니다. 이들을 분리하면 간섭이 방지되고 꼬리 대기 시간이 안정화됩니다.
사전 채우기를 적극적으로 일괄 처리할 수 있지만 디코드는 다른 조정을 통해 이점을 얻을 수 있는 이유는 무엇입니까?
Prefill은 모든 프롬프트 토큰을 함께 처리하므로 더 큰 배치가 텐서 코어에 잘 공급됩니다. 디코드는 한 번에 하나의 토큰을 생성하고 메모리에 의해 제어되므로 다르게 확장됩니다.
분리된 풀 간에 KV 캐시를 이동하는 데 일반적으로 어떤 상호 연결이 사용됩니까?
KV 캐시 전송이 새로운 병목 현상이 되지 않도록 NVLink(노드 내) 및 InfiniBand(노드 간)와 같은 고대역폭, 저지연 링크가 필요합니다.