본문 바로가기

논문 리뷰/Language Model

Mistral 7B

효율성이 높은 LLaMA2 기반 모델. LLaMA2 보다 성능 좋음.

 

[Project Page]

[Github]

[arXiv](2023/10/10 version v1)

 

 

Model Architecture

 

Sliding Window Attention

Window size W개의 이전 토큰에 대해 attention을 수행한다. 이전 토큰은 또다시 이전 레이어에서 이전 토큰에 대한 attention을 수행하므로 마지막 레이어의 토큰은 최대 약 13만개(4096x32) 토큰의 영향을 받는다.

 

FlashAttentionxFormers를 추가로 채택하여 Vanilla attention에 비해 2배의 속도 향상을 얻었다.

 

Rolling Buffer Cache

고정된 캐시 크기를 사용한다. 아래 그림은 캐시 크기 = 4일 때의 예시이다.

캐시에 자리가 없을 경우 가장 먼저 추가됐던 캐시의 자리에 덮어쓴다.

 

Pre-fill and Chunking

시퀀스 생성 시 각 토큰은 이전 토큰에 따라 조건이 달라지기 때문에 토큰을 하나씩 예측해야 한다.

그러나 프롬프트는 이미 알고 있으므로 (K, V) 캐시를 미리 채울 수 있으며, 프롬프트가 매우 긴 경우 메모리를 제한하기 위해 청크로 나누어서 캐시를 미리 채운다. chunk size= window size.


 

근데 이 부분을 읽으면 나만 그런 건지는 모르겠는데 설명이 상당히 애매하다. 위 그림만 보면 캐시 청크가 고정돼 있는 것처럼 보이는데 그렇다면 현재 청크의 이전 토큰의 K, V는 매번 다시 계산하는 것인가? 그리고 캐시 청크의 sliding window가 지나간 부분은 필요 없는 부분인데?

 

내 생각에는 이렇게 작동하는 것 같다.

 

K 시점:

 

K + 1 시점:

 

이거 아님??? 아님말고