- LLM 문장 생성 시 KV 캐시는 초기 O(L²) 계산 후 단어당 O(L)로 효율적인 생성을 가능하게 하는 핵심 기술입니다. 🚀
- 하지만 KV 캐시를 사용하더라도 한 번의 O(L²) 계산은 여전히 큰 부담으로 작용합니다. 🏋️♀️
- Prefill은 시스템 프롬프트처럼 미리 알고 있는 문장의 KV 캐시를 서빙 전에 계산하여, 서빙 시 O(L_p²) 계산 부담을 없애는 최적화 기법입니다. 🧠
- 사용자 입력 길이(L_u)는 예측할 수 없어 O(L_u²) 계산 부담이 여전히 존재하며, GPU 자원 활용에 딜레마를 야기합니다. ❓
- Prefill_chunk는 사용자 입력의 KV 캐시 계산을 한 번에 하지 않고, GPU가 감당할 수 있는 '청크' 단위로 나누어 처리함으로써 O(L_u²) 부담을 완화합니다. 🧩
- Prefill_chunk_size는 일반적으로 128과 같은 특정 청크 크기를 설정하여, GPU가 한 번의 추론에서 처리해야 할 계산 복잡도를
chunk_size²로 제한합니다. 📏
- 전체 LLM 서빙 과정은 시스템 프롬프트는 Prefill로, 사용자 입력은 Prefill_chunk로 처리하여 KV 캐시를 효율적으로 구축한 후, 단어 단위 응답 생성을 진행합니다. ⚙️
- Prefill과 Prefill_chunk는 제한된 GPU 환경에서 LLM 서빙의 효율성을 극대화하는 중요한 최적화 기법입니다. ✨