[NLP] Mistral 7B 정리

    arxiv pdf

     

    NLP 모델에서는 일반적으로 모델의 크기가 클수록 성능이 향상되는 경향이 있습니다. 하지만, 모델이 커질수록 계산 비용과 추론 시간이 증가하게 되며, 이는 모델을 실제 환경에 배포하는 데에 있어서 큰 장애물이 됩니다. 그렇기 때문에 높은 성능과 함께 효율성을 제공하는 모델이 필요합니다.

     

    그러한 요구사항을 만족시키는 모델로 이 논문에서는 'Mistral 7B'을 제안합니다. 

     

    Mistral 7B는 잘 설계된 모델로, 13B 크기의 'llama2' 모델보다 모든 테스트 벤치마크에서 우수한 성능을 보여주며, 동시에 효율적인 추론을 유지합니다.

    0. Mistral 모델의 핵심 로직은 'Grouped-query attention'과 'Sliding window attention'입니다.

    Grouped-query attention (GQA)

     

    이 기술은 추론 속도를 향상시키고, 디코딩하는 동안 메모리 요구 사항을 줄입니다. 즉, 모델이 더 빠르게 결과를 도출할 수 있게 하며, 더 적은 양의 메모리로도 효율적으로 작동할 수 있게 합니다.

     

    Sliding window attention (SWA)

     

    이 기술은 더 긴 시퀀스를 처리할 수 있도록 설계되었으며, 이를 위해 적은 계산 비용을 사용합니다. 즉, 모델이 더 긴 텍스트를 더 적은 자원을 사용하여 처리할 수 있게 해줍니다.

     

    또한, Mistral 모델은 파인튜닝이 용이하다는 장점을 가지고 있습니다. 이는 모델을 특정 작업이나 데이터에 맞게 조정하는 과정이 더 쉽다는 것을 의미하며, 이를 통해 모델의 성능을 더욱 향상시킬 수 있습니다. 이러한 특성 덕분에 Mistral 7B는 높은 성능과 효율성을 동시에 제공하는 모델로, 다양한 NLP 작업에 유용하게 사용될 수 있습니다.

     

    1. Sliding Window Attention과 Transformer 모델 비교 

     

    Transformer 모델은 전체 입력 시퀀스에 대해 모든 위치에서 다른 모든 위치로의 attention을 계산합니다. 

     

    transformer

    이는 RNN 기반 Encoder-Decoder 모델들이 순차적으로 입력값을 처리하는 것과 달리, Transformer는 전체 입력값을 한 번에 처리하여 모든 시점의 데이터를 고려할 수 있게 합니다. 그러나 이로 인해 미래 시점의 데이터까지 참고할 수 있는 문제가 발생하며, 이를 해결하기 위해 Masked Multi-Head Attention을 사용합니다. 

    masked multi-head attention

    Sliding Window Attention은 Transformer의 Masked Attention 개념에 "window"라는 개념을 추가한 것입니다. 이 방식은 각 위치에서 고정된 크기의 윈도우 내 위치들에만 attention을 계산하여, 계산량과 메모리 사용량을 줄이면서도 중요한 지역적 정보를 포착할 수 있게 합니다. 이는 특히 긴 시퀀스를 처리할 때 유용하며, 필요한 attention 스코어의 수를 줄여줍니다. 

     

    sliding window attention

    2. KV Cache와 Rolling Buffer 

    KV cache

     

    Transformer 모델의 추론과정은 시작점(컨텍스트)에서부터 시작하여, 한 번에 한 단어씩 문장을 만들어 나가는 과정입니다. 모델은 매 단계마다 문맥을 고려하여 다음에 올 단어를 선택하고, 이를 반복함으로써 전체 문장을 생성합니다. 이 self-attention(선택된 단어는 이전 컨텍스트와 함께 다시 모델에 입력)을 위해 현재 sequence에 있는 각 항목의 key-value값을 필요로 하며 이러한 벡터들을 KV Cache라  합니다.

    • 모든 추론 단계에서 우리는 이미 이전의 토큰에 대한 정보는 가지고 있기때문에 오직 모델에 의한 마지막 토큰에만 관심이 있습니다. 그러나 모델은 이전의 토큰 모두에 대한 접근이 필요합니다. 왜냐하면 이전의 모든 토큰이 이번의 맥락을 구성하기때문에 output으로 이미 만들어진 토큰 중 어떤 토큰을 내보낼지 결정해야하기때문입니다. 
    • 토큰을 샘플링할때마다 이미 계산된 k,v 값이 있다면 약간의 저장 비용을 들여 계산 비용을 절약하자는 것이다.

    how to reduce computation amount(source:  https://medium.com/@joaolages/kv-caching-explained-276520203249 )

     

    Rolling Buffer Cache는 데이터 스트림이나 시계열 데이터를 처리할 때 사용되는 메모리 관리 기법입니다. 고정된 크기의 메모리 공간(버퍼)을 사용하여 최신 데이터를 유지하고, 새로운 데이터가 들어올 때마다 가장 오래된 데이터를 제거하는 방식으로 작동합니다. 이는 특히 긴 시퀀스나 큰 데이터셋을 효율적으로 처리하는 데 유용합니다. 

    Rolling Buffer Cache

    3. Pre-fill과 Chunking 

     

    Pre-fill은 모델이 작업을 시작하기 전에 입력 데이터 또는 버퍼를 사전에 채우는 과정입니다. 이는 모델이 바로 작업을 시작할 수 있도록 준비하는 단계로, 효율성을 높이는 데 도움이 됩니다. 

     

    Chunking은 큰 데이터셋이나 긴 시퀀스를 더 작은 단위로 나누는 과정입니다. 이는 데이터를 더 관리하기 쉬운 크기로 나누어 처리하는 것으로, 메모리 관리를 개선하고, 병렬 처리를 용이하게 합니다. 

     

    이러한 기술들은 모두 Transformer 기반의 모델들이 효율성과 성능을 동시에 달성할 수 있도록 돕는 데 중요한 역할을 합니다. Sliding Window Attention은 계산량과 메모리 사용량을 줄이는 동시에 중요한 정보를 포착할 수 있게 하며, Rolling Buffer Cache는 데이터 처리 과정에서의 효율성을 높입니다. Pre-fill과 Chunking은 모델이 데이터를 더 쉽게 처리할 수 있도록 준비하는 과정에서 중요한 역할을 합니다.

    mistral architecture (source : https://github.com/hkproj/mistral-llm-notes/blob/main/Slides.pdf)

     

    댓글