이 글을 통해 많은 사람이 KV Caching을 쉽게 이해할 수 있기를 바란다.
Transformer(Q, K, D)

아래와 같은점만 명심하고 넘어가자.
- $Q, K ,D$에 곱해지는 입력 $X$ 값은 실제로 모두 같은 값이다.
- $W^Q, W^K, W^V$의 초기값은 '랜덤' 값이다. 특정한 의미를 가지고 있지 않다.(다만 학습을 통해 점점 업데이트됨.)
- $Q$ 와 $K^T$를 통해 유사도를 계산.(Q: 내가 찾는 정보, K: 제공할 수 있는 정보 = 즉 둘간의 매칭정보)
- $\sqrt{d_k}$로 값이 너무 커지는것을 방지
- $softmax$로 각 토큰에 대한 가중치를 확률분포로 변환.
- $V$와 곱셈하여 최종 출력 생성.(V: 그래서 뭘 전달할건데? 전달할 실제 정보)
- $Z$는 문맥정보가 통합된 최종 출력 벡터값
외에도 Transformer 에는 여러가지 레이어들이 같이 들어있기에 엄밀히 말해 위 Attention 구조만으로 Transformer를 모두 설명한다고 볼 수는 없다. 하지만 KV Caching에 대해 이해하기 위해선 위 부분만이 필수적이다.
Transformer의 문제점
Transformer를 기반으로 하는 모델들은 텍스트를 생성할 때 이전 토큰을 모두 검토하여 다음 토큰을 예측한다. 때문에 '이미 알고 있는' 값을 다시 계산하기 위해서 동일한 계산을 반복적으로 수행하게 되고, 이것은 곧 엄청난 리소스 낭비로 직결된다.
위 동영상에서 '!' 라는 값을 출력하기 위해선, Hello의 $Z$값이 필요하기에, 이를 다시 계산 하는 모습을 확인할 수 있다. 하지만 이는 이미 계산해 뒀던 값이고, 저 Hello의 $Z$ 값은 변하지 않는다. 그럼에도 저장해둔 값이 없으니(KV Cache) 이를 다시 계산해야 하는 것이다.(간혹 VRAM이 아니라 DRAM을 사용해도 되지 않냐는 의견이 있지만... 이건 컴퓨터 공학을 너무 모르고 하는 소리다.)
때문에 시간 복잡도를 $O(n^2)$에서 $O(n)$으로 감소 수준으로 감소시킬 수 있다.
Deepseek 의 KV Caching 은 뭐가 다른가?
이전 Deepseek 논문 리뷰를 참조하면 좋다.
'Artificial Intelligence > Basic' 카테고리의 다른 글
| Transformer 의 CrossAttention 차이점 (0) | 2024.04.23 |
|---|---|
| 행렬 기초 (0) | 2024.04.17 |
| 모델 훈련시 Epoch 와 Steps 의 차이 (0) | 2024.03.05 |
| batch_size 란? (0) | 2024.03.05 |
| 인공지능에서 Parameter 란? (0) | 2024.01.27 |