Language Model

LLaMa 3.1 알아보자

DasArchiv

1. LLaMa 3.1

  • 405B, 70B, 8B 버전이 공개되었다.
  • INT8, FP8로 양자화 버전 공개
  • context length를 128K로 확장, 8개 언어를 지원(Guard model)
  • Llama 3.1 405B는 최초 frontier-level open source. 지금까지 open source LLM은 closed source LLM에 비해 성능이 좋지 않았지만 LLaMa 3.1 405B는 closed source model에 견줄만한 성능을 보인다.
    reference system을 포함하고 있다.
  • 이번 release에서는 8B와 70B model의 upgrad가 있다. 두 모델은 multilingual을 지원하며, context length가 128K로 크게 증가했다. 또한 state-of-the-art tool을 사용하여 전반적인 reasoning capability를 향상시켰다. 이를 통해 이번에 공개된 LLaMa 모델은 advanced use case(long-form text summarization, multilingual conversation, coding)성능이 크게 향상되었다.

2. LLaMa 3 vs LLaMa 3.1

2.2 context length and multilingual token

  LLaMa 3.1 LLaMa 3
context length 128K 8K
multilingual token 8% 5%

2.3 math and reasoning capability

LLaMa 3.1이 LLaMa 3보다 수학 분야와 추론 능력이 더 뛰어나다. Meta의 tech blog(llama3, llama3.1))에 아래와 같은 내용이 기재되어 있다:

(8B) LLaMa 3.1 LLaMa 3
MATH MATH (0-shot, CoT) 73.0 MATH (5-shot) 68.4
MMLU 51.9 30.0

2.4 architecture

LLaMa 3과 LLaMa 3.1은 동일한 dense network architecture를 가지고 있다.

(8B 기준)

  • decoder-only transformer
  • 32 layers
  • 4K embedding dimension
  • 32 heads
  • 8KV heads
  • rotary positional encoding (RoPE) 사용
  • 4 grouped query attention (GQA)
  • 15T(15조) token으로 사전 훈련
  • 8,192개의 token sequence로 사전 훈련
  • tokenizer vocab size 128K

LLaMa 3.1

n_vocab          = 128256
n_merges         = 280147
vocab_only       = 0
n_ctx_train      = 131072
n_embd           = 4096
n_layer          = 32
n_head           = 32
n_head_kv        = 8
n_rot            = 128
n_swa            = 0
n_embd_head_k    = 128
n_embd_head_v    = 128
n_gqa            = 4
n_embd_k_gqa     = 1024
n_embd_v_gqa     = 1024
f_norm_eps       = 0.0e+00
f_norm_rms_eps   = 1.0e-05
f_clamp_kqv      = 0.0e+00
f_max_alibi_bias = 0.0e+00
f_logit_scale    = 0.0e+00
n_ff             = 14336
n_expert         = 0
n_expert_used    = 0
causal attn      = 1
pooling type     = 0
rope type        = 0
rope scaling     = linear
freq_base_train  = 500000.0
freq_scale_train = 1
n_ctx_orig_yarn  = 131072
model params     = 8.03 B

LLaMa 3

n_vocab          = 128256
n_merges         = 280147
n_ctx_train      = 8192
n_embd           = 4096
n_layer          = 32
n_head           = 32
n_head_kv        = 8
n_rot            = 128
n_swa            = 0
n_embd_head_k    = 128
n_embd_head_v    = 128
n_gqa            = 4
n_embd_k_gqa     = 1024
n_embd_v_gqa     = 1024
f_norm_eps       = 0.0e+00
f_norm_rms_eps   = 1.0e-05
f_clamp_kqv      = 0.0e+00
f_max_alibi_bias = 0.0e+00
f_logit_scale    = 0.0e+00
n_ff             = 14336
n_expert         = 0
n_expert_used    = 0
causal attn      = 1
pooling type     = 0
rope type        = 0
rope scaling     = linear
freq_base_train  = 500000.0
freq_scale_train = 1
n_ctx_orig_yarn  = 8192
model params     = 8.03 B

3. Model Architecture

Mixture-of-Agents Enhances Large Language Model Capabilities

 

training stability를 maximize하기 위해 MOE(mixture-of-experts) model이 아닌 standard decoder-only transformer model architecture를 선택하였다.

학습 시, supervised fine-tuning과 direct preference optimization 과정을 거침으로써 각 round에서 highest quality synthetic data를 생성하고 각 capability’s performance를 향상시킬 수 있었다.

405B의 경우 15 trillion(15조)이상의 token으로 학습을 수행했다. 이와 같은 규모의 학습을 수행하며 합리적인 시간 내에 원하는 결과를 얻기 위해 Meta 팀은 full training stack을 최적화하고, 16,000개 이상의 H100 GPU를 사용하였다.

이전 버전들과 비교하여 data 품질도 개션시켰다. careful pre-processing과 curation pipeline 개발을 통해 pre-training data의 품질을 개선시켰고, 더 엄격한 품질 보증 및 filtering approach를 통해 post-training data를 개선시켰다.

LLM의 scaling laws(확장 법칙)에 따라 이번 flagship model(405B)모델은 8B와 70B에 비해 높은 성능을 보이다. 따라서 405B를 활용하여 8B와 70B의 post-training quality를 개선하였다.

4. Pre-Training

  • keyword
    • a large-scale training corpus 선별 및 filtering
    • scaling law 개발
    • 대규모 모델에 대한 효율적 pre-training 방법 개발

LLaMa 3.1 논문에서는 이전 LLaMa 1이나 2의 논문보다 학습 방법을 더 구체적으로 적어 놓았다.

4.1 Pre-Training Data

LLaMa 3.1 사전 학습에는 web 수집 데이터가 사용되었다. Web에서 수집된 데이터는 다양한 cleaning 작업을 거쳐서 모델 학습에 적합하도록 만들었다.

데이터를 수집한 웹 출처는 정확히 적혀 있지 않지만 성인 콘텐츠나 유해한 웹사이트에서는 데이터를 수집하지 않았다고 한다.

  • PII and safety filtering

    PII(개인 식별 정보)나 안전하지 않은 내용이 포함된 데이터를 제거하는 filtering 작업을 수행한다.
  • Text extraction and cleaning
    • 웹 페이지의 HTML 코드를 분석하여 불필요한 부분(광고 등)은 제외하고 주요 내용만 추출한다.
    • 수학이나 코드와 같은 내용은 따로 특수 처리하여 해당 구조를 유지시킨다. 예를 들어 수학 공식이 image로 삽입되어 있는 경우, 해당 이미지의 alt attribute를 함께 유지하여 수집한다.
    • 실험 결과, Markdown 형식의 문서보다 일반 text 형식의 문서를 학습하는 것이 모델 성능 향상에 좋은 것으로 확인되어 Markdown 문법으로 작성된 데이터는 제거하였다.
  • De-duplication
    • URL-level de-duplication: 동일한 URL에서 가져온 데이터 중 최신 버전만 남긴다.
    • Document-level de-duplication: 비슷한 문서가 있으면 하나만 남기고 제거한다.
    • Line-level de-duplication: 텍스트에서 반복되는 line은 제거한다. -> 이 과정이 모델 성능 향상에 도움이 된 것 같다고 한다.
  • Heuristic filtering
    • 추가적으로 heuristic하게 낮은 품질의 문서, 비정상적인 문서, 반복이 많은 문서 등을 제거한다.
    • 또한 “dirty word” counting을 통해 성인 콘텐츠를 걸러냈다.
    • 특정 toekn이 과도하게 포함된 문서도 걸러냈다.
  • Model-based quality filtering
    데이터 품질 분류를 위한 모델을 사용하였다.
    • Wikipedia의 정보가 참조될만한 품질인지 확인하는 fasttext 기반 classifier
    • LLaMa2의 예측 결과를 기반으로 문서 품질 평가 task를 학습한 Roberta-based classifier

      등을 사용했다.
  • Code and reasoning data
    웹에서 수집한 코드나 수학 관련 데이터는 일반 text과는 다른 처리 pipeline을 타게 했다.

    LLaMA2에 의해 annotated된 data를 학습한 DistilRoberta모델로 품질을 분류했다.
  • Multilingual data
    • fasttext-based language identification model을 사용하여 문서를 176개의 언어로 분류하고 각 언어별로 문서와 중 중복을 제거한다.
    • 언어별로 추가적인 filtering과 품질 평가를 수행한다.

4.1.1 Determining the Data Mix

high-quality language model을 만들기 위해서는 어떤 종류의 데이터를 얼마나 섞을지 잘 결정해야 한다. 그러기 위해 해당 데이터가 "어떤 데이터"인지 먼저 알아야 하고 어떤 데이터들을 "각각 얼만큼씩" 섞어야 할지 알아야 한다. 이를 위해 Meta 팀은 아래 두 방법을 사용하였다.

  • Knowledge classification

    LLaMa 3.1의 학습데이터에는 방대한 양의 Web data가 포함되어 있다. 이 데이터가 어떤 종류의 지식을 담고 있는지 분류하는 모델을 만들어 web에 과도하게 분포되어 있는 엔터 관련 데이터를 덜어냈다.
  • Scaling laws for data mix

    어떤 data mix가 모델 성능에 좋은 영향을 미칠지 확인하기 위해 작은 모델들 여러개를 여러 비율의 데이터들로 학습시켜 보고 그 결과를 기반으로 큰 모델이 어떤 성능을 낼지 예측하는 실험을 수행했다.
    • Data mix summary:
      • general knowledge token: roughly 50%
      • mathematical and reasoning token: 25%
      • code token: 17%
      • multilingual token: 8%

4.1.2 Annealing Data

모델 성능을 더 높이기 위해, '애닐링'이라는 기법을 사용한다. 이 기법은 소량의 고품질 데이터를 추가로 사용해 모델을 미세 조정하는 것이다.

Annealing을 통해 소규모 dataset이 모델 성능 향상에 얼마나 기여했는지 확인할 수 있다. 따라서 이 방법을 사용하면 모덴 데이터에 대해 모두 다 sacling law 실험을 하지 않고도 data 각각의 가치를 효율적으로 판단할 수 있다.

4.2 Scaling Laws

Scaling Law는 모델 성능이 model size, data size, 그리고 compute resource에 따라 어떻게 변화하는지를 설명하는 법칙이다. Scaling Law는 주어진 compute resource에 대해 최적의 성능을 낼 수 있는 model과 data size를 선택하는 데에 도움을 준다. 예를 들어 어느정도의 compute resource를 투입하면 어느정도 크기의 모델이 최적일지, 이 모델이 얼마나 잘 작동할지 예측하는 것에 도움을 준다.

Parameter Scaling

일반적으로 파라미터 수가 증가하면 모델의 표현 능력이 향상되어 성능이 좋아지지만, 이는 데이터 크기와 컴퓨팅 자원의 충분한 지원이 있어야 한다.

Data Scaling

충분히 큰 데이터셋이 주어지면 모델은 더 일반화된 패턴을 학습할 수 있어 성능이 향상된다. 하지만 데이터 크기의 증가에 따라 성능 향상 속도는 감소할 수 있다.

Compute Scaling

compute resouce가 충분할수록 모델 학습 시간이 단축되거나, 더 큰 모델을 훈련시킬 수 있게 되어 성능이 향상될 수 있다.

하지만 기존의 scaling law에는 몇 가지 한계가 있었다.

  1. 제한적인 prediction : 기존의 scaling law는 단순히 다음단어를 얼마나 잘 예측하는지에 중점을 두고 있어 특정 task에서 얼마나 좋은 성과를 낼지는 알기 어렵다.
  2. 불확실성 : small compute budget으로 만든 scaling law이기 때문에 더 큰 computing resource를 투입했을 때에 해당 법칙이 잘 맞을지 불확실하다.

(1) Existing scaling laws typically predict only next-token prediction loss rather than specific
benchmark performance. (2) Scaling laws can be noisy and unreliable because they are developed based on
pre-training runs conducted with small compute budgets (Wei et al., 2022b).

Meta 팀은 위 문제를 해결하기 위해 아래 두 방법론을 적용하였다:

  1. downstream task에 대해 compute-optimal model의 negative log-likelihood와 training FLOP 간의 상관관계를 찾는다.
  2. 모델의 성능과 compute resource 간의 관계식을 만든다.

위 두 방법론을 기반으로 Meta 팀은 다양한 계산 자원(FLOPs)과 모델 크기(파라미터 수)를 사용해 모델을 학습시켜 이를 통해 특정 FLOPs에서 가장 높은 성능을 내는 모델들을 찾아 이를 예측하는 compute-optimal model을 만들었다. 즉, specific compute budget이 주어졌을 때 몇 개의 training token을 사용하는 것이 최적인지 예측하는 관계식을 만들었다.

이 관계식을 통해 Meta 팀은 모델의 downstream task 성능을 예측하였다.

주어진 floating point operations (FLOPs)에 따라 원하는 benchmark 성능을 얻기 위해 GPU를 얼마나 오래 실행해야 하는지를 예측한 것이다. 컴퓨팅 최적화 모델에 대해 특정 training flop 수를 기준으로 downstream task 성능을 예측할 수 있다고 한다.

FLOPs

FLOPs는 연산 복잡도를 나타낸다.
FLOPs는 딥러닝과 머신러닝에서 모델의 연산량과 복잡도를 나타내는 중요한 지표로, 모델 선택과 최적화 과정에서 고려해야 할 요소이다.

FLOPs는 딥러닝 모델의 효율성과 성능을 비교하는 데 많이 사용된다.

예를 들어, 모델 A가 10 GFLOPs를 요구하고, 모델 B가 20 GFLOPs를 요구한다면, 일반적으로 모델 A가 더 적은 연산 자원을 소모하는 효율적인 모델이라고 할 수 있다.

하지만 반드시 FLOPs가 낮다고 해서 더 좋은 성능을 보장하는 것은 아니다. 모델의 성능과 효율성을 함께 고려해야 한다.

하지만 모델이 실제로 얼마나 빠르게 실행되는지는 하드웨어와 최적화 방법에 따라 달라진다.

따라서 같은 FLOPs 값을 가진 모델도 하드웨어에 따라 실행 속도는 달라질 수 있다.

4.3 Scaling, Efficiency

효율적인 모델 학습을 위해 Meta 팀은 다양한 방법을 적용하였다.

4.3.1 4D parallelism

효율적인 학습을 위해 네 가지 서로 다른 병렬 처리 방법을 결합하여 학습을 진행하였다.

  1. Tensor Parallelism(TP)

    모델의 개별적인 weight tensor를 여러 multiple chunk로 나눠 다른 GPU device에 배치한다. 이는 각 GPU가 모델의 일부만을 처리하여 전체 메모리 사용량을 줄일 수 있게 한다.
  2. Pipeline Parallelism, PP

    model을 layer 단위로 나눠 각 layer를 서로 다른 GPU에서 동시에 처리하도록 한다. 이는 모델의 각 layer들이 동시에 처리될 수 있어 전체 학습 속도가 빨라진다.
  3. Context Parallelism, CP
    • input context를 segments로 나누어 long sequence length input을 처리할 때 발생하는 memory bottleneck문제를 완화시켰다.
    • 일반적으로 CP는 매우 긴 sequence를 처리할 때 메모리 효율성을 높이는 방법으로, sequence를 여러 부분으로 나눠 각각 다른 device에서 처리하는 것이다.
    • input sequence를 2 × CP chunk로 나누어서 각각의 CP rank(GPU)가 두 개의 chunk를 처리할 수 있게 하는 것이다. 이는 작업을 더 균형있게 분배시켜준다.
    • 기존의 CP와는 달리 Meta팀은 all-gather based method를 통해 각 chunk의 local query ($Q$) tensor에 대한 attention을 계산한다. 이는 document mask와 같이 different types of attention mask를 유연하게 지원할 수 있고, context가 길어진다고 크게 성능이 저하되지도 않게 한다.
    • 이를 통해 LLaMa3를 128K가 넘은 매우 긴 sequence에서 학습 가능하게 되었다.
  4. Data Parallelism, DP

    데이터를 여러 GPU에서 동시에 처리한 후 각 GPU에서 처리한 결과를 동기화한다. 이 과정에서 model, optimizer, gradient는 GPU들에 나누어 저장한다.

+ 수치적인 안정성 높이기 위해 FP32(32비트 부동소수점) 형식으로 gradient 축적하였다. gradient를 FP32로 축적하고, FSDP에서는 reduce-scatter를 data parallel worker들 간의 gradient에 적용하여 수치적 안정성을 유지하였다. 또한 forward computation에서 여러번 사용되는 backward gradient도 FP32로 축적여 수치적으로 안정성을 높였다고한다.

위와 같은 방법으로 GPU가 얼마나 효율적으로 연산을 수행했는지 나타내는 지표인 BF16 Model FLOPs Utilization (MFU; Chowdhery et al. (2023))에 대해 38-43%를 달성했다고 한다.

하지만 pipeline 병렬 처리에서 몇 가지 문제점이 발견되었다.

  • Batch size constraint: pipeline 병렬 처리에서는 GPU당 지원되는 배치 크기에 제약이 있다.
  • Memory imbalance: 모델의 embedding layer와 warm-up micro-batch 때문에 학습 시작 부분에서 메모리 소비가 불균형하다는 문제가 있다.
  • Computation imbalance: 모델의 마지막 layer에서 결과와 loss를 계산할 때 전체 처리 속도의 병목이 생긴다.

위 문제점을 해결하기 위해 pipeline, 통신 방법, memory cost 처리 방법을 수정하였다.

  • Pipeline schedule

    pipeline scheduling은 각 배치에서 임의의 수의 micro-batch를 실행하는 것이다. 이때 한번에 몇 개의 micro-batch를 처리할지 결정하는 파라미터 $N$을 유연하게 설정할 수 있다.
    • To balance the pipeline

      파이프라인의 균형을 맞추기 위해 첫 번째와 마지막 단계에서 각각 하나의 Transformer 레이어를 줄였다. 이렇게 하면 처음 stage의 model chunk는 embedding만 처리하고, 마지막 stage의 model chunk는 output projection과 loss calculation만 처리하게 된다.
    • To reduce pipeline bubbles

      pipeline 안에서 발생하는 비효율(pipeline bubble)을 줄이기 위해 $V$개의 pipeline stage를 한번에 실행시켜 하나의 rank(GPU)에 올리는 interleaved schedule (Narayanan et al., 2021)을 사용한다.
  • Asynchronous point-to-point communication(비동기 통신)

    pipeline stage 간의 통신을 최적화하여 학습 속도를 올린다. 이 방법은 특히 document mask와 같이 추가적인 extra computation imbalance가 발생하는 경우에 효과적이다.
  • reduce memory cost
    memory allocation profiling을 통해 앞으로 사용될 일 없는 각 pipeline stage의 입렴 및 출력 tensor를 deallocate해버리는 방법이다. 이 방법을 통해 LLaMa 3을 8K token sequence에서 activation checkpointing 없이 학습할 수 있었다.

4.4 Training Recipes

Llama 3 405B의 pre-train 과정은 세 가지 main stage로 구성된다.

  • Meta 팀은 학습 시 수렴 속도는 느리지만 가장 basic한 모델을 채택함으로써 학습의 안정성을 높였다. 최근 많이 사용되는 복잡한 MOE(mixture-of-experts) 모델이 아닌 기본적인 standard dense Transformer model architecture에 대해 약간의 조작만 추가한 모델을 사용하였다.

4.4.1 Initial Pre-Training

  • 목적: model을 처음부터 안정적이고 효과적으로 학습시기 위해 안정적인 방법을 사용한다.
  • 학습 방법:
    • AdamW optimizer를 사용하고, learning rate는 점진적으로 조정한다.
    • 학습 초기에는 작은 batch size로 시작해서 점진적으로 높이는 방법을 적용하여 모델의 안정성을 높였다. (처음에는 4M tokens(4백만개), sequences length 4,096를 사용하는 작은 batch로 시작한 후 252M token을 학습한 이후에는 이 값을 두배로 올려 8M tokens(4백만개), sequences length 8,192으로 올리고, 2.87T token을 학습한 이후에는 16M으로 올린다.)

      이 방법은 loss spike(loss 급등) 현상이 거의 없어 매우 안정적이라고 한다.
  • 데이터:
    • 학습 중간에 model이 특정 downstream task를 잘 수행하도록 data mix를 바꾼다.
    • 예를 들어, multilingual performance를 향상시키기 위해 non-English data 비율을 늘리고,

      mathematical reasoning performance를 향상시키기 위해 mathematical data를 upsampling(더 많이 사용)하고,

      recent data를 반영하기 위해 최신 web 데이터를 추가한다.

4.4.2 Long Context Pre-Training

  • 목적: 모델이 긴 문맥을 이해할 수 있도록 학습시킨다.
  • 학습 방법:
    • 초기에는 짧은 문장으로 시작해 점차 길이를 늘려가며 학습시킨다. long sequence를 처음부터 학습시키지 않는 이유는 길이가 길어질수록 self-attention layer의 연산량이 기하급수적으로 늘어나기 때문이다.
    • model이 긴 문맥에 잘 적응했는지 평가하는 방법은 아래 두 가지이다:
      1. short-context에서의 성능이 완전하게 복구되었는가?
      2. "사막에서 바늘 찾기"와 같은 어려운 문장을 이해하는가?

4.4.3 Annealing

  • 목적: 학습 중 learning rate를 점진적으로 낮추어 model parameter를 정확하게 조정하여 학습 중 파라미터가 크게 업데이트되어 모델이 불안정해지는 경우를 방지한다.
  • 학습 방법:
    • 40M token에 대한 사전 학습동안 learning rate를 선형적으로 감소시킨다.
    • Annealing 단계에서는 데이터 품질이 중요하다. 따라서 가능한 높은 품질의 데이터를 학습시켜 성능과 일반화를 향상시킨다.
    • 마지막으로, annealing 단계에서 model checkpoint의 평균을 계산하여 (Polyak (1991) 평균화) 최종 모델을 생성한다.

5. Post-Training

LLaMa 3.1 Instruction model 개발을 위한 post-training 과정에서 집중한 것은 아래 세 가지이다.

  • 더 많은 기능 지원
  • 128K context window 구현
  • model 크기 증가

instruction-following capability 개선과정에 LLaMa 3.1 405B를 활용하였다.

5.1 Modeling

Instruction model은 pre-trained model위에 여러 round의 alignment 작업을 수행하여 개발되었다. 각 round에는 Supervised Fine-Tuning (SFT), Reward Model (RM), Direct Preference Optimization (DPO)가 포함된다.

5.1.1 Reward Model

llama 3.1에서 사용된 Reward model은 RLHF가 아닌 rejection sampling 방식으로 작동된다 (Direct Preference Optimization (DPO)).

llama 3.1(405B) initial model을 Reward Model로 사용하였다. 이미 학습된 llama 3.1(405B) initial model에 human-annotated preference data를 학습시켜 Reward Model을 만든다.

(Pre-training 단계에서의 Reward Model은 distilBERT를 기반으로 한다. 이 모델은 데이터 품질을 효율적으로 분류하는 데에 강점을 지니고 있어 initial training 단계에서 사용하였다.)

5.1.2 Supervised Finetuning

Reward Model을 통해 rejection sampling된 human annotation prompt를 선저앟여 이를 활용해 Fine tuning을 진행한다.

target token에 대한 standard cross entropy loss로 학습을 수행한다.

8.5K에 9K step 걸쳐 10^-5의 learning rate로 LLaMa 405B를 fine-tuning하였다. 이러한 hyperparameter 설정이 다양한 round와 data mix에서 잘 작동한다는 것을 발견했습니다.

5.1.3 Direct Preference Optimization

이전 alignment round에서 가장 성능이 좋은 model을 사용해서 preference data를 수집한다. (이 방법은 각 round에서 최적화된 policy model의 분포에 더 맞는 data를 구축하여 모델이 계속 더 나은 방향으로 학습될 수 있도록 한다.)

기존의 DPO 방식에서 아래 두 가지를 수정하였다:

  1. Masking out formatting tokens in DPO loss:

    header나 termination tokens과 같은 special formatting tokens를 DPO 학습 과정에 포함시키면 모델이 혼돈을 한다는 것을 확인했다. 예를 들어 마지막 문장을 반복하거나 갑자기 termination token을 생성해 생성을 중단하는 양상이 나타나 special formatting tokens을 제거하였다.

    이와 같은 현상은 DPO loss의 대조적인 특성 때문으로 보여진다. chosen response와 rejected response에 공통된 toekn이 존재하면 모델이 이 token들의 확률을 동시에 증가시키고 감소시켜야 하므로 학습 시 모델이 도달하고자 하는 목표에 방해가 되는 것이다.
  2. Regularization with NLL loss:

    chosen sequence에 대해 0.2 scaling 계수를 가진 추가적인 negative log-likelihood (NLL) loss를 추가한다. 이는 생성 시 원하는 형식을 유지하고 chosen response의 log probability를 방지하여 DPO 훈련을 더 안정화시킨다.

5.2 Model Averaging

RM, SFT, DPO stage에서 다양한 버전의 data와 hyperparameter로 학습한 모델들을 합쳐서 평균적인 모델을 만든다. 이렇게 하면 더 안정적이고 일관된 성능을 가지는 모델을 만들 수 있다.

5.3 Iterative Rounds

LLaMa 3.1은 위 과정들을 6번 반복해서 계속 새로운 데이터를 수집하고 모델을 개선했다. 매번 모델이 조금씩 더 나아지도록 최신 데이터를 활용하여 반복적으로 학습시켰다.

Meta 팀의 모델 개선 및 데이터 품질 개선 방법론은 flywheel 전략을 떠오르게 한다.

flywheel 전략

비즈니스에 필요한 다양한 항목들이 서로 유기적으로 연결이 되면서 한쪽의 힘이 한쪽으로 전달되고 이 힘이 다시 다른 쪽으로 전달되는 과정을 통해서 시너지를 만들어내는 것을 말한다.

5.4 Training Data

Meta team은 이전에 만든 성능 좋은 모델을 활용하여 데이터를 구축하는 방식을 적용했다. 하지만 모델이 모델의 실수를 학습할 수 있다는 문제점을 발견하여 verifier model을 학습 과정에 삽입하였다.

filtering

Meta 팀은 LLaMa 3 개발 시 LLaMa3에 사용될 데이터를 filtering 하기 위해 LLaMa 2를 사용한 것과 같이 LLaMa 3.1 학습에도 LLaMa 3을 사용하였다.

multilingual

Meta 팀은 pre-training 학습 중간에 분기를 만들어 90%의 multilingual token으로 구성된 data mix를 사용해 사전학습을 이어감으로써 multilingual model을 구축하였다. 해당 모델 구축 이유는 non-English 데이터 수집이다. 매우 크고 성능 좋은 모델을 사용해서 작은 모델의 학습 데이터를 생성하기 위해 multilingual expert model을 학습시킨 것이다.

data source

데이터의 출처에 대해서는 논문에서 단지 "from a variety of data sources"라고만 기재되어 있다. 최근 Reddit과 Twitter와 같이 인공지능 학습 데이터로 빈번히 사용되던 출처들이 데이터에 대한 요금을 부과하고 있다고 한다. Meta 팀은 허가 받지 않은 데이터는 사용하지 않았다고는 하지만 데이터 출처를 명확히 밝히지도 않았다.

+

html로 긁어 온 데이터가 대부분이기 때문에, 수학과 코드 데이터의 품질을 향상시키기 위해 indent, 기호 등을 잘 처리하도록 parser 정교화 작업을 하여 수학 및 코드 분야 데이터 품질을 높였다고 한다.

Evaluation

요약: 잘한다.

LLaMa 3.1는 다양한 언어에 대한 150개 이상의 benchmark에 대해 성능 평가를 진행하였고, real-world scenario를 통한 human evaluation도 진행하였다. 아래 표 이번 LLaMa 3.1의 flagship model인 405B 모델의 실험 결과이다. GPT-4, GPT-4o, Claude 3.5 Sonnet과 비교하였을 때 경쟁력있는 성능을 보이는 것으로 확인되었다. 8B와 70B또한 비슷한 크기의 모델들과 비요하였을 때 경쟁력있는 성능을 보였다.

Mixture-of-Agents Enhances Large Language Model Capabilities

 

Mixture-of-Agents Enhances Large Language Model Capabilities

 

Mixture-of-Agents Enhances Large Language Model Capabilities

 

Inference methode

Prompt

LLaMa 3.1 사용 시, LLaMa 3 prompt를 그대로 사용해도 되지만 가장 좋은 건 LLaMa 3.1용 프롬프트를 사용하는 것이다.

  • tokens
<|begin_of_text|> prompt 시작 token
<|end_of_text|> 모델이 더 이상 token을 생성하지 않도록 하는 token (base model에서만 생성됨.)
<|finetune_right_pad_id|> batch 내에서 text sequence를 동일한 길이로 padding 시킬 때 사용
<|start_header_id|> massage 역할을 지정할 때 사용하는 token. [system, user, assistant, ipython]
<|end_header_id|>
<|eom_id|> model 내장 tool use가 호출되었을 때 생성되는 token.
message가 중단되는 지점을 나타냄.
<|eot_id|> 모델이 user messege에 대한 interaction을 완료했다고 판단되었을 때 생성되는 token.
즉, 모델이 응답이 완료되었음을 보이는 token.
<|python_tag|> tool use를 호출했음을 나타내기 위해 응답에서 보여주기 위한 token.

Supported Roles

system 모델과의 interaction에서의 맥락을 설정하는 역할.
모델이 효과적으로 응답할 수 있도록 답변의 규칙이나 지침등의 정보를 입력한다.
user 모델과 interaction하는 대상이다. 
ipython LLaMa 3.1에 새롭게 도입된 role.
Environment: ipython 이라고 system message에 넣어서 tool use 모드를 사용한다고 밝힐 때 사용
assistant 모델 역할. 모델이 생성한 결과 안에 들어 있다.

+ Tool calling 기능 지원

사용법은 llama3.1 문서 참조.

사용해본 결과, task에 따라 공식문서에 적힌 prompt를 수정해야 한다.

LLaMa 3.1 built-in tool:

  • Brave Search: 웹 검색을 도구 호출 시 사용
  • Wolfram Alpha: 수학 계산 도구 호출 시 사용
  • Code Interpreter: 파이썬 코드 추론 시 사용

Reference

https://ai.meta.com/blog/meta-llama-3-1/

https://llama.meta.com/

https://ai.meta.com/research/publications/the-llama-3-herd-of-models/