SSM State vs KV Cache

마지막 수정:

ssmmambakv-cacheinferenceserving

Transformer serving의 중심 자원은 KV cache다.

Mamba/SSM serving의 중심 자원은 state cache다.

둘 다 “과거를 다시 쓰기 위해 저장한다”는 점은 같지만, 저장하는 것과 커지는 방식이 다르다.

KV cache

Transformer attention은 decode step마다 새 query가 과거 모든 key/value를 봐야 한다.

그래서 과거 token마다 K와 V를 저장한다.

KV cache size ~= layers * tokens * kv_heads * head_dim * 2

context가 길어지면 cache도 길어진다.

SSM state cache

SSM은 과거 token 전체를 직접 다시 보지 않고, recurrent state를 갱신한다.

Mamba 계열에서는 보통 두 종류의 state를 생각해야 한다.

conv state:
최근 token 주변의 convolution 계산을 위한 state

SSM / temporal state:
state-space recurrence를 위한 state

이 state들은 과거 token마다 K/V를 전부 저장하는 방식과 다르다.

serving에서 달라지는 질문

KV cache 시스템에서는 이런 질문이 중요하다.

새 K/V block을 어디에 붙일 것인가?
긴 context의 block table을 어떻게 관리할 것인가?
여러 request의 KV block을 어떻게 batch로 읽을 것인가?

SSM state 시스템에서는 질문이 바뀐다.

각 request의 current state는 어디에 있는가?
prefill 이후 decode state를 어떻게 넘길 것인가?
prefix caching을 하려면 어느 지점의 state를 저장해야 하는가?
state update kernel은 batch 안에서 어떻게 호출되는가?

즉 SSM은 cache를 없애는 것이 아니라 cache의 의미를 바꾼다.

연결

확인

  • KV cache는 token 수가 늘 때 어떻게 커지는가?
  • Mamba 계열에서 conv state와 SSM state를 나눠 생각하는 이유는 무엇인가?
  • “SSM은 cache 문제를 없앤다”보다 “cache의 의미를 바꾼다”가 더 정확한 이유는 무엇인가?