[NLP] 라마(LLaMA) 정리

    라마(LLaMA) 모델에 대해 정리해보자.

    Introduction

    라마는 메타(Meta)가 만들어낸 초거대 Language model로 2023년 2월 24일에 공개되었다. 

    Meta가 만든 Langauge model 의 첫 시작은 아니었다. 첫 시작은 OPT라는 모델이었는데, GPT3와 모델 크기가 같지만 성능은 그만큼 잘 나오지 않아서 논문에 자랑보다는 왜 성능이 안나오는지에 대한 고민이 많다. 그렇게 OPT이후에 나온 모델이 라마이다. 

    라마와 OPT가 나온 시기적 차이사이에는 딥마인드의 친칠라 모델 논문에서 언어모델이 학습 데이터를 충분히 투입하지 않아 덜 학습된 것 같다는 주장이 있었다. 라마도 이 아이디어를 적용해 GPT3의 모델 크기는 반도 안되지만 데이터를 4배 더 투입하여 이전보다는 좋은 성능을 내는 모습을 보여주었다. 

    라마1은 4가지 버전(6.7B, 13B, 32.5B, 65.2B)으로 릴리즈되었고 6.7B 모델은 Single GPU(V100)에 실행 가능하며 13B 모델까지는 V100에서 추론할 수 있는 모델 사이즈이다. 또한 라마는 공개 데이터셋으로만 학습되었다. 

     

    라마 깃허브: https://github.com/facebookresearch/llama

     

    라마 모델을 튜닝한 모델로 AlpacaVicuna도 존재한다. 라마를 포함한 알파카, 비쿠냐 모델 모두 재현 가능하고 완전한 개방형 언어 모델을 만들기 위한 프로젝트이다. 

    알파카(왼쪽) 와 비쿠냐(중간) 그리고 친칠라(오른쪽)

    데이터셋

    라마는 웹 크롤 데이터셋을 많이 사용하였는데 웹 크롤 데이터셋은 품질이 낮아 정제과정이 필요하다.

    라마는 정제를 위해 출처가 위키백과의 인용 출처에 속할 수 있는지 판별하는 모델을 만들어 사용하였다. 

    * 영문 위키백과는 수많은 참여자의 검증으로 고품질 데이터로 인식된다.

     

    라마 데이터셋 구성

    • CommonCrawl: 웹 크롤링 데이터
    • C4: Colossal, Cleaned version of Common Crawl
    • GitHub: 라이센스와 품질로 필터링된 GitHub의 데이터
    • Wikipedia: 위키피디어의 일부 페이지들 (boilerplate 제거)
    • Books (26b): 콘텐츠 유사성에 따라서 중복을 제거한 공개 서적 Corpus
    • arXiv (28b: 과학 논문과 기사들 (boilerplate 제거)
    • StackExchange: 스택익스체인지의 일부 페이지들 (boilerplate 제거)

    아키텍처

    그동안 Foundation Model의 문제점은 추론 시 compute budget을 고려하지 않고 오직 학습 성능에 초점을 맞추었다는 점이다. 예를들어 모델 파라미터를 늘려 모델 성능을 높이는데 성공하였지만, 추론 compute budget의 한계로 인해 현실적으로 추론 서비스가 거의 불가능한 반쪽짜리 모델이 대부분이었다. 학습 비용보다 추론 비용이 더 큰 문제라는 것이다. 

     

    추론 서비스를 고려한 Foundation Model을 만들기 위해 성능은 유지하면서 모델 파라미터의 사이즈를 줄이는 것이 필요했다. 

    * 추론 컴퓨팅 비용은 모델 파라미터에 비례한다.

     

    라마의 아키텍처를 GPT3와 비교를 했을때 다음의 차이가 존재한다. 

    1. activation function으로 SwiGLU(Swish + GLU) 사용
    2. 토크나이저 BBPE → 센텐스피스 변경, 폴백옵션(언노운 토큰을 대비)
    3. 학습 안정성을 위해 attention보다 normalize 를 먼저 하였음.
    4. RMSNorm을 사용
    5. RoPE(rotary positional embeddings) 사용하여 긴 입력도 처리 가능

    +) MMLU (Massive Multitask Language Understanding) : 인공지능 모델이 획득한 지식을 측정하는 벤치마크이다. 약 57개의 주제(STEM, the humanities, the social sciences 등)에 대해 다지선다 문제를 푸는 테스트이다. 특히 zero-shot 환경이나 few-shot 환경에 맞게 되어있다고 한다.

    +) Gradient clipping : 주로 RNN계열에서 gradient vanishing이나 gradient exploding이 많이 발생하는데, gradient exploding을 방지하여 학습의 안정화를 도모하기 위해 사용하는 방법이다. gradient가 일정 threshold를 넘어가면 clipping을 해준다. clipping은 gradient의 L2norm(norm이지만 보통 L2 norm사용)으로 나눠주는 방식으로 하게된다.

     

    라마의 아키텍처를 Villia Transformer와 비교하였을때 다음의 차이가 존재한다.

    1. AdamW optimizer 사용
    2. 학습 한정성을 위해 attention보다 normalize 를 먼저 하였음.
    3. RMSNorm을 사용
    4. RoPE(rotary positional embeddings) 사용하여 긴 입력도 처리 가능

     

    라마 1 vs 라마 2

    모델 구조상 차이는 한가지다.

     

    GQA(Grouped Query Attention)가 적용되었다는 점이다.

    GQA는 추론 속도를 빠르게 하려고 도입한 것이며 구글에서 발표한 것이다.

    MHA(왼쪽) GQA(중간) MQA(오른쪽)

    +) MQA (Multi-Query Attention) : QKV (Query, Key, Value) head가 각각 H개씩 있는 MHA와 달리 MQA에서는 QKV 중에서 key와 value의 헤드가 하나씩만 있다. Key와 value는 공유하는데, query는 여전히 여러개라서 multi query라고 부른다. ( MQA는 메모리 대역폭을 절약할 수 있다는 장점 MQA는 MHA에 비해 성능이 저하될 위험이 있고, 학습이 불안정. 그래서 GQA가 나옴. )

    +) GQA (Grouped Query Attention) : GQA는 MHA와 MQA의 중간. H개 있던 KV 헤드를 1개로 줄이는 대신 적절한 G개의 그룹으로 줄이는 것입니다. G가 1이 되면 MQA가 되고 H가 되면 MHA가 되니까 GQA는 MHA와 MQA를 포함한 일반화라 볼 수 있음. 성능은 MQA만큼 빠르고 MHA만큼 성능이 좋아서 굉장히 훌륭함.

    +) Attention의 경우 주어진 입력값에서 중요한 단어들에 더 집중할 수 있도록 한다.

    +) MHA(Multi-Head Attention): Self-Attention의 경우 동일한 문장 내 토큰들 간의 관계(유사도)를 토대로 어텐션을 계산하는 방법이다. 트랜스포머는 self-attention 를 병렬로 h번 학습시키는 Multi-head attention 구조로 되어있다. 병렬로 학습시키는 것의 이점은 어디에 어텐션을 가해야할지를 다양하게 시도할 수 있어 다양한 유형의 종속성을 포착할 수 있다. (여기서 어디의 예시란 문장 타입, 명사, 관계, 강조) 모델이 입력 토큰간의 더 복잡한 관계를 다룰 수 있다는 말.

    +) 파이썬의 딕셔너리에서 value를 찾을 때 key값이 같아야만 값을 가져오듯이, attention에서도 key와 query가 어느정도 유사해야만 그 유사한 만큼(key와 query의 행렬곱 = attention score) value값을 갖고온다. 코사인 유사도 공식(벡터 곱을 크기만큼으로 나누는 공식)을 softmax에 취해 value값을 곱해준게, self-attention 값이다.

     

    라마 1 vs 라마 2 자세한 비교

    1. 모델 사이즈

    7B , 13B, 33B, 65B vs 7B, 13B, (34B : 나올 예정이라 했는데 23.09.05 기준으로 나오지 않았음), 70B

    2. 성능

    13B 모델이 대부분의 NLP benchmarks에 대해 gpt3를 능가  vs natural language understanding과 head to head comparision에 대해 다른 open-source 모델들 능가

    3. 접근성 

    상업적 이용은 제한하는 것으로 출시되었으나 이후 가중치 유출 vs 라마 2를 포함한 모든 모델들이 가중치 공개 및 상업적 이용도 무료, 오픈소스

    4. 데이터

    라마 2는 라마 1보다 40% 더 많은 데이터를 가짐

    5. context 길이

    라마 2는 라마 1보다 2배 길어진 context length를 가짐.

     

     

    라마로 뭘 할 수 있을까?

    1. 한국어 비중이 낮음.
    2. 벤치마크 비교시 성능 굉장히 굿. 
    3. 학술적 상업적 이용 가능한 오픈소스임.

     

    참고자료

    댓글