- 7B~65B parameters
- 13B outperforms GPT-3(165B)
- 65B is competititive with Chinchila 70B and Palm 540B
- Introduction
- model size가 커지면 성능이 증가한다는 가정하에 few shot learning이 도입되었다.
- 그러나 Hoffmann의 scaling law에 따르면 더 많은 데이터로 학습한 상대적으로 크기가 작은 모델들이 두각을 나타내기 시작했다. 하지만, scaling law의 목적은 training budget 내에 best scale을 정하는 것으로 inference budget은 고려하지 않았다.
- 이에 더 많은 token을 사용해 다양한 inference budget에서 최상의 성능을 내는 실험이 이루어 졌는데 그렇게 나온 모델이 LLaMa이다.
- LLaMa가 기존 transformer 구조에서의 modification과 training method가 어떤지 살펴보자.
- Approach
2.1 Data
- tokenizer
- Sentencepiece를 사용한 byte-pair encoding(BPE)
- 토큰화한 후 1.4T token 사용
- 각 token을 한번만 사용했다. (몇개만 두번)
2.2 Architecture
1) Pre-normalization (GPT-3)
- training stability를 높이기 위해 output을 normalize하는 것 대신에 sub layer의 input을 정규화
- RMSNorm normalization
2) SwiGLU activation (PaLM)
- ReLU 대신 SwiGLU 사용
- 2/3*4d // PaLM=4d
3) Rotary Embedding (GPT-Neo)
- absolute positional embedding 대신 각 layer마다 rotary embedding 추가
2.3 Optimizer
- AdamW
- Cosine learning rate Schedule 사용
- final lr = max(lr)*10%
- Weight decay : 0.1
- Gradient clipping : 1.0
- Warmup : 2000 step
2.4 Efficient implementation (optimization)
1) Causal multihead attention
- attention weight 저장하지 않고, LM의 causal한 성질 때문에 masked 된 k/q score 계산하지 않아 memory 사용과 runtime이 줄어든다.
- Xformers library에서 사용가능하다
2) Backward pass 동안 checkpointing과 다시 계산되는 activation 양이 준다
- linear layer의 output과 같은 계산이 많이 드는 activation을 저장
- auto grad 대신 transformer layer의 backward function에 수동으로 실행
3) model & sequence parallelism으로 메모리가 줄어든다.
4) 가능한 all_reduce operation을 사용해서 GPU간의 연산과 activation의 연산이 overlap 된다.
- Results