Language Models

김희규
4 min readApr 25, 2023

GPT-2, GPT-3 외의 Decoder Only 언어모델들에 대해서 살펴본다

GPT-Neo(125M, 350M, 1.3B, 2.7B)

GPT-J(6B)

  • Mesh Transformer Jax 프레임워크 학습(TPU 기반)
  • RoPE
  • The Pile 로 학습
  • TPU v3–256 Pod 에서 402토큰을 383500step 학습

GPT-NeoX(20B) — 2022/2

  • RoPE(25%)
  • Parallel Attention + FF Layers: 성능향상을 위해 Attention과 Feed-forward를 병렬수행한 뒤 나중에 더함. Mesh-transformer-jax에서 15% 스루풋 향상
  • 실수로 LayerNorm 2개 썼다
  • 가중치 초기화: Feed Forward Output Layer에는 2/(L*sqrt(d)) 를 쓰고(평균 말한듯?) 나머지는 sqrt(2/(d+4d))
  • 96 A100 40GB GPUs + InfiniBand + GPUDirect RDMA
  • Megatron-DeepSpeed Codebase
  • GPT-3 hyperparameter 값을 interpolate 해서 사용(13~175B)
  • Batch Size: 3.15M = 1538 contexts x 2048 tokens
  • 150K steps, cosine decay to minimum 10%
  • AdamW optimizer, beta1 = 0.9, beta2 =0.95, epsilon=1e-8
  • ZeRO Optimizer, 2 Tensor Parallelism x 4 Pipeline Parallelism
  • Dataset: The Pile(825GiB): StackExchange 포함, code generation 에 영향을 주는 것 같다.
  • Tokenizer: 코드에서 공백이 연속되는걸 더 적은 토큰으로 효율적으로 표현할 수 있다.
  • Deduplication: 이전의 모델들은 어떻게 했는지도 모르고 성능향상이 있는지도 모른다. The Pile을 그대로 썼다. 1epoch 이후에도 validation loss는 감소했다.
  • Code Generation을 염두해 만들었으나, code evaluation 이 굉장히 힘들어서 진행하지 못함.

OPT — 2022/5

메타에서 공개한 Open Pretrained Transformer. 125M, 350M, 1.3B, 2.7B, 6.7B, 13B, 30B, 66B, 175B 종류가 있으며 175B는 신청 후 받을 수 있다.

  • 175B는 992 80GB A100 GPUs 사용
  • Weight-initialization: Megatron-LM codebase에서 std=0.006, output layer는 1.0/sqrt(2L) 로 scale, bias = 0
  • ReLU activation(신기), 2048 sequence length
  • AdamW, beta1=0.9, beta2=0.95, weight decay=0.1
  • warmup steps 2000(375M token), 300B 토큰까지 0.1 LR로 linear하게 감소
  • 학습 중간부터 배치를 0.5M → 4M 으로 키운다.
  • 임베딩 제외 dropout 0.1, gradient clipping 1.0

데이터

  • RoBERTa(BookCorpus, Stories, CCNews) + The Pile(CC, DM, Gutenberg, HackerNews, OpenSubtitles, OpenWebText2. USPTO, Wikipedia) + PushShift.io Reddit
  • The Pile에서 위에만 쓴 이유는 학습 불안정때문, 1.3B 부터 발생.
  • English Filter but 조금 있다
  • Min-hasLSH로 deduplication(Jaccard 유사도 ≥ 0.95). The Pile은 중복문서가 많다. 토크아니저는 GPT-2 BBPE, 최종 학습 토큰은 180B

학습

  • Fully-sharded Data Parallel with Megatron-LM TP
  • Dymamic loss scaling to avoid underflow
  • Loss Divergence: LR을 낮추고 마지막 체크포인트에서 재시작. dynamic loss가 0이 되고 마지막 l2 norm이 spiking한다. dynamic loss가 1.0 이상인 healthy한 곳부터 재시작. 낮은 LR이 학습 불안정 해소에 도움이 된다. Gradient Clipping 1.0–0.3이 좋다.

BLOOM(176B) — 2022/11

A 176B-Parameter Open-Access Multilingual Language Model 한국어없다 ㅠ

Dataset

  • Roots Corpus: 498 huggingface datasets(1.6TB, 46 natural languages + 13 programming languages)
  • Deduplication + Privacy Redaction
  • BLOOM을 P3(Public Pool of Prompts)와 PromptSource로 Instruction Tuning + 외국어(xP3) → BLOOMZ

Ablations

  • 6.7B에서 objective ablation, 1.3B 에서 positional embedding, activations, layer norm ablation. 그러나 1.3B 에서 한 게 extrapolate할지는 의문이다(6.7B 이상에서 emergence하는 것에 대한 연구가 있어서).
  • objective 는 causal이 최고다.

Model

  • ALiBi PE → Learned PE, RoPE 보다 좋다.
  • Embedding LayerNorm

Tokenizer

  • Non-deduplicated ROOTS로 학습
  • vocab 250K(250680)
  • NFKC normalization

학습

  • 노드당 8개 80GB A100 x 48 nodes = 384 GPUs
  • Megatron-DeepSpeed

LLaMA — 2023/2

7B, 13B, 33B, 65B → 7B가 1T까지 계속 학습해도 성능 오르더라.

Data

Tokenizer

  • BBPE, 숫자는 각 수별로 구분하도록 처리

모델

  • Pre-norm: post-norm 대신 pre-norm. RMSNorm 사용
  • SwiGLU(PaLM에서 제안)
  • RoPE

Optimizer

  • AdamW, beta1=0.9, beta2=0.95,
  • cosine LR decay, minimum 0.1 * LR
  • weight decay 0.1, gradient clipping 1.0, 2000 warmup

구현체

  • xformer로 효과적인 multi-head attention → masking된 부분은 계산안하도록
  • 값비싼 activation 들은 checkpointing
  • model & sequence parallelism
  • 65B 1.4T token 학습에 21일

공개 데이터만으로 학습했는데 굉장히 뛰어난 성능

--

--

김희규

나는 최고의 선수다. 나를 최고라고 믿지 않는 사람은 최고가 될 수 없다.