PReCache가 멀티 LoRA 에이전트의 반복 프리필과 KV 캐시 메모리를 줄인다

PReCache: Efficient KV Cache Sharing for Multi-LoRA Agents via Low-Rank Precomputation and Neutral Reconstruction

arXiv2609.34054v1

Hyesung Jeon2026-09-28조회 2

무엇인가

Multi-LoRA 에이전트 시스템은 하나의 사전학습 백본을 공유하면서 역할별로 작은 LoRA 어댑터를 붙여 전문화한다. 문제는 각 에이전트가 사용자 요청, 검색 정보, 도구 관찰, 이전 에이전트 출력이 누적된 공유 궤적을 매번 처음부터 다시 처리하고 자기 KV 캐시를 새로 만든다는 점이다. 에이전트 수와 턴 수가 늘수록 궤적은 길어지고 프리필 부담이 커지며, 같은 컨텍스트에 대한 KV 캐시가 에이전트마다 중복 저장된다. 기존 KV 캐시 공유 방법은 추가 학습이나 아키텍처 제약을 요구하거나, 여전히 상당한 모델 연산을 남긴다. 게다가 이전 에이전트의 어댑터로 생성된 캐시를 그대로 재사용하면 현재 에이전트가 자기 LoRA에 담긴 역할별 행동을 약화시킨다.

어떻게 동작하나

이 논문은 PReCache라는 학습 불필요 KV 캐시 공유 프레임워크를 제안한다. 핵심은 사전학습 가중치로 계산한 베이스 캐시를 공유하고, 에이전트별 저랭크(LR) 캐시를 미리 계산해 두는 것이다. LoRA가 적용된 투영은 Y_i = X_i,adpt(W_0 + A_i B_i)로, 베이스 기여 X_i,adpt W_0와 어댑터 기여 (X_i,adpt A_i)B_i로 나뉜다. 어댑터 기여가 에이전트마다 다르고 그 차이가 다음 레이어로 전파되면서 은닉 상태 자체가 에이전트 의존적으로 변하기 때문에, 같은 컨텍스트라도 베이스 기여까지 달라진다. 기존 LRAgent의 BaseShared는 베이스 캐시를 공유하고 LR 캐시를 따로 두지만, LR 캐시를 만들기 위해 현재 에이전트가 누적 컨텍스트 전체를 다시 백본에 통과시켜야 했다.

무엇과 다른가

PreLRShared는 이 반복 처리를 없앤다. 에이전트 i가 길이 L_P의 컨텍스트를 처음 처리할 때, 그때 생성되는 은닉 상태 X_i,adpt에 모든 에이전트의 다운프로젝션 A_k를 적용해 X_i,adpt A_k를 k=1..N에 대해 만들어 둔다. 즉 LR 캐시를 각 세그먼트가 처음 처리되는 시점에 미리 계산하는 것이다. 이후 에이전트 j는 공유 베이스 캐시와 자신의 사전 계산된 LR 캐시를 L_P 구간에 그대로 재사용하고, 새로 추가된 컨텍스트 L_C에 대해서만 어댑터가 적용된 백본 연산을 수행한다. 에이전트 j가 L_C를 처리할 때도 모든 다운프로젝션 A_k를 적용해 LR 캐시를 확장한다. 결과적으로 L_P에 대한 나중의 전체 차원 백본 처리가 랭크 r의 가벼운 다운프로젝션으로 대체된다.

어떻게 쓰나

ReBaseShared는 공유 베이스 캐시가 이전 에이전트에 의존하는 문제를 줄인다. W_0는 공유되지만 X_i,adpt에는 이전 레이어에서 전파된 어댑터 효과가 섞여 있어 베이스 캐시가 이전 에이전트에 조건화된다. ReBaseShared는 LoRA 어댑터를 끈 상태로 공유 컨텍스트를 처리해 어댑터 없는 은닉 상태 X_neut를 얻고, 이를 바탕으로 중립 베이스 캐시 X_neut W_0를 만든다. 논문의 Figure 2는 이 재구성이 현재 에이전트가 만들 베이스 캐시에 더 가까워지며, PreLRShared 대비 레이어별 은닉 상태 오차와 베이스 캐시 오차를 줄인다고 보고한다. ReBaseShared는 LR 캐시 사전 계산도 유지하는데, 다른 에이전트의 LR 캐시를 같은 어댑터 없는 은닉 상태로부터 만든다. 추론 스케줄은 두 가지다. 단일 스트림 추론용 lazy prefill(LP)은 에이전트 j의 턴 동안 어댑터 경로만 실행하고, 디코딩이 끝난 뒤 L_C를 어댑터 없이 한 번 처리해 중립 베이스 캐시를 L_P에서 L_C까지 연속 프리필로 확장한다. 동시 서빙용 double batching(DB)은 프리필과 디코딩 동안 어댑터 경로와 어댑터 없는 경로를 함께 배치해 처리한다. 두 경로는 같은 토큰을 같은 위치에서 처리하되 KV 캐시 뷰를 따로 유지한다. DB와 LP는 논리적으로 동등한 캐시 상태를 만들고, 어댑터 없는 재구성을 언제 하느냐만 다르다.

전제와 한계

실험은 AutoAct의 멀티홉 에이전트 프레임워크를 쓴다. 계획, 행동, 성찰 세 역할 에이전트가 있고, 계획과 행동이 번갈아 관찰을 얻은 뒤 성찰이 다음 사이클을 시작하거나 최종 답을 반환한다. 모델은 LLaMA-3.1-8B-Instruct와 Ministral-8B-Instruct, 데이터셋은 HotpotQA와 ScienceQA이며 각각 세 난이도를 둔다. LoRA는 쿼리와 밸류 투영에 랭크 r=8로 적용하고, 키 투영에는 LR 성분이 없어 완전히 공유되며 밸류 캐시가 베이스와 LR 캐시로 분해된다. 비교 대상은 NonShared, FullShared, DroidSpeak, CacheBlend, RelayCaching, BaseShared이고, 선택적 재계산 방법은 30% 재계산 비율을 쓴다. BaseLRShared는 모든 어댑터가 공유 다운프로젝션으로 학습되어야 해서 기존 어댑터를 지원하지 않으므로 제외했다. 결과적으로 ReBaseShared가 NonShared에 가장 가깝고 평균 정확도 하락이 1.1점으로 BaseShared와 비슷한 수준을 유지한다. PreLRShared는 평균 1.0~3.3점 하락하며, ReBaseShared가 중립 재구성으로 이 하락을 평균적으로 줄인다. 효율은 PreLRShared가 NonShared 대비 TTFT를 최대 3.1배 줄이고 요청당 처리량을 최대 2.3배 높인다. ReBaseShared LP는 TTFT를 최대 3.0배 줄이고 처리량을 최대 1.6배 높인다. 66.4k 토큰에서 두 방법의 피크 메모리는 FullShared의 2% 이내이면서 선택적 재계산 베이스라인보다 17~23% 적다. 동시 서빙에서 포화되지 않은 부하 기준으로 PreLRShared와 ReBaseShared는 NonShared 대비 각각 1.6배, 1.3배 높은 요청당 처리량을 보인다. 실험 궤적은 1.9k에서 66.4k 토큰까지이며, 단일 스트림은 NVIDIA A6000 48GB, 동시 서빙은 vLLM을 쓴 NVIDIA A100 80GB에서 측정했다.

개발자 입장에서 이 논문은 멀티 LoRA 에이전트를 서빙할 때 긴 공유 컨텍스트 때문에 프리필과 KV 캐시 메모리가 병목이 되는 상황에 직접 적용할 수 있는 선택지를 준다. 재학습이나 아키텍처 변경 없이 기존 LoRA 어댑터를 그대로 쓰면서, 단일 스트림 엣지 추론에는 LP를, 동시 서빙에는 DB를 고를 수 있다. 다만 기본 설정이 쿼리와 밸류 투영에만 LoRA를 적용한 QV 구성이라는 점을 확인해야 한다. 키 투영은 공유되고 밸류 캐시만 베이스와 LR로 분해된다. 논문은 부록 D.2에서 모든 어텐션 투영에 LoRA를 적용한 경우도 평가해 효율 이점이 유지된다고 밝히지만, 본문 수치는 QV 기준이다. LoRA 랭크는 부록 D.1에서 r=8부터 정확도가 포화한다고 보고한다. 또한 매치된 프리픽스 설정에서는 프리픽스 기반 편차 보정 방법들이 어댑터별 보정을 제공하지 못해 FullShared와 동등해진다는 점도 비교 해석에 유의해야 한다.

한계와 전제도 분명하다. ReBaseShared LP는 디코딩 후 어댑터 없는 재구성을 한 번 더 수행하기 때문에 PreLRShared보다 종단 간 연산이 늘어 처리량이 낮다. PreLRShared는 여전히 평균 1.0~3.3점의 정확도 하락을 보이며, ReBaseShared가 이를 평균 1.1점까지 줄이지만 NonShared와 완전히 같지는 않다. BaseLRShared처럼 공유 다운프로젝션을 전제로 하는 방법은 기존 어댑터에 바로 쓸 수 없어 비교에서 제외됐다. 논문은 자연 생성된 에이전트 궤적에서 캐시 공유가 궤적 행동을 바꿀 때도 정확도-지연 영역이 유리하게 유지된다고 부록 B.1에서 보고하지만, 본문 Table 2의 데이터셋별 절대 정확도 수치는 제시되지 않았다. 메모리 효율이 에이전트 수가 늘어도 유지되는지는 부록 C.5에서 다룬다.