『비전공자도 이해할 수 있는 챗GPT』,
『비전공자도 이해할 수 있는 AI 지식』
10만 베스트셀러를 기록한
세상에서 가장 이해하기 쉬운 챗GPT 교양서

HOME » WIKI » CPT LLaMA-Factory

CPT LLaMA-Factory

LLaMA-Factory

kmmlu train

llama-factory를 이용해서 kmmlu token 150m 학습을 진행했으나 llama-factory SFT learning rate 기본값 1.0e-4에서 모델이 엉망이 됐다.

1.0e-4 (default)

SFT default는 learning rate가 너무 높다.

모델 mmlu kmmlu_direct
meta-llama/Meta-Llama-3.1-8B 65.22 41.17
checkpoint-1000 36.66 13.26
checkpoint-1000 (다시) 37.33 14.88

kmmlu train 3000:
같은 이유로 모델이 엉망이 됐다.

모델 mmlu kmmlu_direct
kmmlu train 3000 43.08 20.42

1.0e-5

성능이 오락가락하므로 정상이 아니다. 조금 더 낮춰야 한다.

모델 mmlu kmmlu_direct
meta-llama/Meta-Llama-3.1-8B 65.22 41.17
checkpoint-1000 62.10 38.60
checkpoint-2000 63.04 42.94
checkpoint-3000 61.05 40.78
checkpoint-4000 61.54 41.59
checkpoint-5000 61.91 42.93
checkpoint-6000 62.61 44.75
final 62.48 44.58

5.0e-6

여기서부터는 괜찮다. 하지만 좀 더 안정적이면 좋겠다.

모델 mmlu kmmlu_direct
meta-llama/Meta-Llama-3.1-8B 65.22 41.17
checkpoint-1000 64.39 41.34
checkpoint-2000 65.01 44.68
checkpoint-3000 64.00 43.26
checkpoint-4000 64.17 44.72
checkpoint-5000 64.60 45.15
checkpoint-6000 64.58 46.13
final 64.60 45.89

3.0e-6 (채택)

가장 합리적으로 보인다. 향후 이 값으로 계속 사용

모델 mmlu kmmlu_direct
meta-llama/Meta-Llama-3.1-8B 65.22 41.17
checkpoint-8000 64.04 44.01
checkpoint-10000 63.53 42.85
checkpoint-13000 (1epch) 63.83 44.65
checkpoint-15000 64.71 44.96
checkpoint-20000 64.75 46.62
checkpoint-25000 64.81 46.82
checkpoint-26000 64.69 46.77
final 64.87 46.91

1.0e-6

3.0e-6으로 학습하려고 했으나 졸려서 설정을 잘못한거 같다. 1.0e-6으로 학습되어 있다. 아래와 결과가 유사하다. lr이 낮아서 2epch가 의미가 있다. device2로 8h 진행되며, 4일때와 달리 checkpoint 26070까지 진행된다.

모델 mmlu kmmlu_direct
meta-llama/Meta-Llama-3.1-8B 65.22 41.17
checkpoint-1000 65.22 41.13
checkpoint-5000 65.31 42.47
checkpoint-12000 (1epch) 64.76 43.76
checkpoint-15000 64.94 43.83
checkpoint-26000 65.20 44.46
final 65.23 43.68

가장 먼저 lr로 문제를 해결한 결과. 오랫동안 고생하다 드디어 문제를 해결했다. 하지만 점수 상승폭이 너무 낮아 이후 다양한 실험을 진행하고 최적의 lr을 찾아나섰다.

모델 mmlu kmmlu_direct
meta-llama/Meta-Llama-3.1-8B 65.22 41.17
checkpoint-1000 65.51 41.32
checkpoint-4000 65.20 42.78
checkpoint-6000 (1epch) 64.89 43.08
checkpoint-12000 65.29 43.89
final 65.30 43.91

기타 실험

평가시 bos 실험:
별 영향을 끼치지 않는다.

모델 mmlu kmmlu_direct
add bos=True 65.30 43.91
add bos=False (default) 65.21 43.83

device / packing

lr 3.0e-6에서 device, packing에 따른 성능 비교:
당연히 kmmlu는 packing: false에서 성능이 더 좋다.

모델 mmlu kmmlu_direct
meta-llama/Meta-Llama-3.1-8B 65.22 41.17
device4 (5h 20m), packing: false 65.23 46.16
device2 (3h 13m), packing: true 65.73 45.74
device2 (8h), packing: false 64.87 46.91

textbooks 1000 cleaned

전처리해준 textbooks 1000권을 device4, 3.0e-6, packing: true로 진행

모델 mmlu kmmlu_direct
meta-llama/Meta-Llama-3.1-8B 65.22 41.17
textbook_dataset-20240816-0414-0 65.43 41.16
textbook_dataset-20240816-0414-2 65.41 41.06
textbook_dataset-20240816-0414-2 & 3 65.54 41.50
textbook_dataset-20240816-0414 (2h, packing: true) 65.14 39.79
textbook_dataset-20240816-0414 (1h, packing: false) 65.16 40.44
dataset-epub (6.8M) 65.02 40.89
  • textbook_dataset-20240816-0414-0.jsonl 3.3m
  • textbook_dataset-20240816-0414-1.jsonl 4.9m
  • textbook_dataset-20240816-0414-2.jsonl 45.9m
  • textbook_dataset-20240816-0414-3.jsonl 46.6m
  • textbook_dataset-20240816-0414.jsonl 100m
  • dataset-epub 6.8M 추가로 정제한 데이터 진행

이 데이터셋은 8k 기준으로 맞춰져 있으므로 packing: false일때 원본 그대로 12,509 examples 및 1h에 학습이 끝나지만 packing: true일때는 4k 단위로 정리되고 24,605 examples가 되어 2h 학습이 진행된다.

jsonl 토큰 갯수 카운팅 스크립트:

from transformers import AutoTokenizer
t = AutoTokenizer.from_pretrained('meta-llama/Meta-Llama-3.1-8B-Instruct')

with open('./textbook_dataset-20240816-0414.jsonl', 'r') as json_file:
    jsonl_content = list(json_file)

import json
tokens = []
for j in jsonl_content:
  jj = json.loads(j)
  tt = len(t(jj['text']).input_ids) - 1
  tokens.append(tt)

import numpy as np
np.sum(tokens)

textbooks-context-4k-token-10m

100여권 textbooks 정제 데이터, 2epch 진행

모델 mmlu kmmlu_direct
meta-llama/Meta-Llama-3.1-8B 65.22 41.17
textbooks-context-4k-token-10m (lr 1.0e-4) device4 57.14 23.74
textbooks-context-4k-token-10m (lr 1.0e-4) 47.87 20.45
textbooks-context-4k-token-10m (lr 1.0e-5) 64.72 40.79
textbooks-context-4k-token-10m (lr 5.0e-6) 65.06 41.21
textbooks-context-4k-token-10m (23m, lr 3.0e-6) 65.18 41.54
textbooks-context-4k-token-10m (14m, lr 3.0e-6, packing: true) 65.21 41.39
textbooks-context-4k-token-10m (lr 1.0e-6) 65.44 41.20
  • lr 1.0e-5에서 OOM이 발생하여 per_device_train_batch_size를 4에서 2로 낮췄다. 3.0e-6에서도 device4는 OOM이 발생해 진행하지 못했다.
  • 전자책은 세심하게 단락 단위로 문장을 구분했으나 packing: true로 해도 성능에 차이가 없다.
    • 4k 넘는 문장이 꽤 많기 때문에 packing: true가 더 유용한듯 하다. 그렇지 않다면 학습시 cutoff_len 조정이 필요하다.

textbooks-1294-raw-token-151m

무정제 데이터를 3.0e-6으로 진행했으며, unsloth 만큼은 아니지만 성능이 점차 하락하는걸 관찰할 수 있다. 다행히 unsloth와 달리 영어 점수는 거의 떨어지지 않는다.

모델 mmlu kmmlu_direct
meta-llama/Meta-Llama-3.1-8B 65.22 41.17
textbooks-1294-raw-token-151m (checkpoint 5000) 65.48 40.22
textbooks-1294-raw-token-151m (checkpoint 9000, 7% 진행) 65.17 39.69

release

textbooks 1000 (token 100m) + textbooks (token 10m), packing: true로 학습에 2h 20m 소요됐다.
모델명: dnotitia/dna-base-v1-preview-r240924

모델 mmlu kmmlu_direct
meta-llama/Meta-Llama-3.1-8B 65.22 41.17
dna-base-all-textbooks-lr-3e6-device4 64.97 40.18
dna-base-v1-preview-r240924 (5h 20m, kmmlu-train packing: false) 64.59 45.59

모델명: dnotitia/dna-base-v1-preview-r240925
8gpus, deepspeed z2로 학습했다. z0은 OOM으로 실패

모델 mmlu kmmlu_direct
meta-llama/Meta-Llama-3.1-8B 65.22 41.17
dna-base-textbooks-8gpus (only textbooks token 10m) 65.16 41.16
dna-base-v1-preview-r240925 (2h 40m, kmmlu-train) 65.21 45.47

DeepSpeed 실험하면서 textbook 학습

모델 mmlu mmlu_pro kmmlu_direct
meta-llama/Meta-Llama-3.1-8B 65.26 35.63 41.04
dataset-epub (6.8M) 64.90 35.12 40.38

dnotitia/textbook-cleansing-with-parser-ver0.1를 가장 큰 파일만 따로 추출해서 로컬에 정리한게 dataset-epub이다.

textbook 3단계 학습 (r241025)

dnotitia/textbook-cleansing-with-parser-midquality-ver0.1 추가로 전처리 완료. 2 epchs. kmmlu만 packing: false

모델 mmlu mmlu_pro kmmlu_direct tokens elapsed (8 GPUs, b=4) loss
meta-llama/Meta-Llama-3.1-8B 65.26 35.63 41.04      
textbook-cleansing-with-parser-midquality-ver0.1 (step 1 of 3) 64.90 35.95 40.22 809M 9:03:37 2.0209
textbook-cleansing-with-parser-ver0.1 (step 2 of 3) 64.54 35.60 40.51 9M 0:06:25 1.8807
kmmlu-train-208k-token-150m (step 3 of 3) 65.10 38.75 45.45 150M 2:37:32 0.8346

Claude 실험

Claude 학습과 비교

모델 mmlu mmlu_pro kmmlu_direct tokens elapsed (8 GPUs, b=4) loss
meta-llama/Meta-Llama-3.1-8B 65.26 35.63 41.04      
kmmlu-train-208k-token-150m (step 3 of 3) 65.10 38.75 45.45 150M 2:37:32 0.8346
dnotitia/kmmlu-claude-3.5-sonnet-train-208k-token-91m
(base: textbook-cleansing-with-parser-ver0.1 (step 2 of 3))
64.15 39.07 46.76 91M 2:40:10 (6 GPUs) 0.7147
dnotitia/kmmlu-claude-3-haiku-train-208k-token-78m
(base: textbook-cleansing-with-parser-ver0.1 (step 2 of 3))
64.14 39.07 47.37 78M 5:21:00 (6 GPUs, b=2) 0.6522
dnotitia/kmmlu-claude-3-haiku-train-208k-token-78m
(base: textbook-cleansing-with-parser-ver0.1 (step 2 of 3))
64.71 39.54 46.74 78M 2:37:45 (6 GPUs) 0.6686
dnotitia/kmmlu-claude-3-haiku-test-35k-token-13m
(base: kmmlu-claude-3.5-sonnet-train-208k-token-91m)
64.47 38.58 54.32 13M 0:27:05 (6 GPUs) 0.6492

HAERAE-HUB 데이터

모델 mmlu mmlu_pro kmmlu_direct tokens elapsed (8 GPUs, b=4) loss
meta-llama/Meta-Llama-3.1-8B 65.26 35.63 41.04      
textbook-cleansing-with-parser-midquality-ver0.1 (step 1 of 3) 64.90 35.95 40.22 809M 9:03:37 2.0209
HAERAE-HUB/KOREAN-SyntheticText-1.5B 64.37 36.50 40.09 1.46B 15:23:15 0.9799
HAERAE-HUB/KOREAN-SyntheticText-1.5B
(base: KOREAN-WEBTEXT)
63.59 35.41 40.54 1.46B 20:43:08 (6 GPUs) 0.936
HAERAE-HUB/KOREAN-WEBTEXT 63.72 34.07 40.56 2.22B 1 day, 7:22:59 (6 GPUs) 1.7314
textbook-cleansing-with-parser-midquality-ver0.1
(base: KOREAN-SyntheticText-1.5B, KOREAN-WEBTEXT)
63.55 33.72 40.76 809M 8:29:41 1.92
dnotitia/kmmlu-claude-3.5-sonnet-train-208k-token-91m
(base: KOREAN-SyntheticText-1.5B)
63.81 38.72 46.36 91M 2:45:22 (6 GPUs) 0.6997
dnotitia/kmmlu-claude-3.5-sonnet-train-208k-token-91m
(base: KOREAN-SyntheticText-1.5B, KOREAN-WEBTEXT)
63.04 36.99 46.95 91M 2:44:26 (6 GPUs) 0.6777
dnotitia/kmmlu-claude-3-haiku-train-208k-token-78m
(base: KOREAN-SyntheticText-1.5B)
64.40 38.81 46.48 78M 2:40:42 (6 GPUs) 0.6572
dnotitia/kmmlu-claude-3-haiku-train-208k-token-78m
(base: kmmlu-claude-3.5-sonnet-train-208k-token-91m, KOREAN-SyntheticText-1.5B, KOREAN-WEBTEXT)
63.30 37.00 48.49 78M 2:41:45 (6 GPUs) 0.5592

mergekit 실험

dnotitia/dna-1.0-8B-preview-r241105 모델과 dnotitia/exaone-instruct-llamafied를 LINEAR로 merge했다. 그런데 exaone은 instruct라는 문제가 있다.

모델 mmlu mmlu_pro kmmlu_direct tokens elapsed (6 GPUs, b=4) loss
meta-llama/Meta-Llama-3.1-8B 65.26 35.63 41.04      
dnotitia/dna-1.0-8B-preview-r241105 64.14 39.07 47.37 78M 5:21:00 (b=2) 0.6522
dnotitia/kmmlu-claude-3.5-sonnet-train-208k-token-91m
(base: KOREAN-SyntheticText-1.5B, KOREAN-WEBTEXT)
63.04 36.99 46.95 91M 2:44:26 0.6777
dnotitia/kmmlu-claude-3-haiku-train-208k-token-78m
(base: KOREAN-SyntheticText-1.5B)
64.40 38.81 46.48 78M 2:40:42 0.6572
dnotitia/kmmlu-claude-3.5-sonnet-train-208k-token-91m
(base: LINEAR)
23.57 0.0 16.68 91M 3:00:03 1.3804

freeze 평가는 의미 없어 보인다.

SFT 진행

Mix Data or Merge Models 논문에 따라 SFT → (merge) 실험 진행

모델 mmlu mmlu_pro kmmlu_direct tokens elapsed (6 GPUs, b=4) loss
meta-llama/Meta-Llama-3.1-8B 65.26 35.63 41.04      
meta-llama/Meta-Llama-3.1-8B-Instruct 68.18 41.09 41.37      
run-20241101-0000-b0-1
(base: meta-llama/Meta-Llama-3.1-8B)
67.88 39.21 51.77      
dna-instruct-r241111
(base: meta-llama/Meta-Llama-3.1-8B-Instruct)
64.97 37.84 40.92   3:20:04 0.5233
dna-instruct-base-r241113
(base: meta-llama/Meta-Llama-3.1-8B)
61.72 33.67 39.22   3:20:26 0.5253

그렇다면 우리 2모델을 SLERP merge 시도

  1. 두 학습 모델 merge (하나는 이미 instruct를 기반으로 했으므로 다른 경우)

merge 외에 L3i - L3b 값을 cpt 모델에 element-wise add 하는 실험도 병행해볼 것

SFT 모델 + llama instruct merge 실험

한글 학습 모델 + 라마 instruct

모델 mmlu mmlu_pro kmmlu_direct gsm8k
meta-llama/Meta-Llama-3.1-8B 65.26 35.63 41.04 51.78
meta-llama/Meta-Llama-3.1-8B-Instruct 68.18 41.09 41.37 77.02
dnotitia/run-20241128-fc1-sf 66.72 42.12 51.35 77.10
dnotitia/run-20241128-fc1-sf
+ meta-llama/Meta-Llama-3.1-8B-Instruct
69.38 45.07 48.99 82.03
dnotitia/run-20241128-p6-sf-8 66.66 42.62 51.53 79.22
dnotitia/run-20241128-p6-sf-8
+ meta-llama/Meta-Llama-3.1-8B-Instruct
69.09 44.90 48.74 81.04
dnotitia/run-20241128-fc1-sf
+ meta-llama/Meta-Llama-3.1-8B-Instruct
+ NCSOFT/Llama-VARCO-8B-Instruct
68.33 44.52 45.77 81.80

최종 모델 merge 전후 평가

모델 mmlu mmlu_pro kmmlu_direct gsm8k kobest
meta-llama/Meta-Llama-3.1-8B 65.26 35.63 41.04 51.78 70.10
meta-llama/Meta-Llama-3.1-8B-Instruct 68.18 41.09 41.37 77.02 69.45
slm-dn-dpo-011/run-20241128-p10-sf 66.49 40.56 50.99 77.86 79.42
slm-dn-dpo-011/run-20241128-p10-sf-merged 68.97 44.38 48.50 81.19 77.51
slm-dn-dpo-011/run-20241128-p6-sf-8 66.66 42.62 51.53 79.22 80.89
slm-dn-dpo-011/run-20241128-p6-sf-8-merged 69.09 44.90 48.74 81.04 78.09
slm-dn-dpo-011/run-20241128-fc2-sf 66.86 42.54 51.99 78.84 81.00
slm-dn-dpo-011/run-20241128-fc2-sf-merged 69.29 45.14 49.13 82.41 78.52
slm-dn-dpo-011/run-20241128-fc2-sf-slerp-merged 69.00 44.78 50.45 82.86 79.47

merged 모델 SFT 후 다시 merge

모델 mmlu mmlu_pro kmmlu_direct gsm8k kobest
meta-llama/Meta-Llama-3.1-8B 65.26 35.63 41.04 51.78 70.10
meta-llama/Meta-Llama-3.1-8B-Instruct 68.18 41.09 41.37 77.02 69.45
sllm-llam31-finetune-0008-merge/run-20241128-fc1-sf-merged–0002 68.75   53.14 78.92 82.78
run-20241128-fc1-sf-merged–0002-slerp-merged-1 69.12 43.30 47.99 80.43 77.87
run-20241128-fc1-sf-merged–0002-slerp-merged-2 69.47 43.23 45.35 80.59 74.83
run-20241128-fc1-sf-merged–0002-linear-0.5-merged 69.18 44.19 48.74 80.66 78.27
run-20241128-fc1-sf-merged–0002-linear-0.2-merged 69.04 43.60 50.53 80.51 79.43
run-20241128-fc1-sf-merged–0002-linear-0.1-merged 69.00 43.61 51.23 80.36 79.89
run-20241128-fc1-sf-merged–0002-linear-0.05-merged 68.81 43.44 51.52 79.98 80.10
run-20241128-fc1-sf-merged–0002-linear-0.01-merged 68.67 43.44 51.72 79.83 80.21
run-20241128-fc1-sf-merged–0002-linear-ours-0.5-merged 69.16 43.14 45.06 81.12 73.85
run-20241128-fc1-sf-merged–0002-linear-ours-0.2-merged 68.90 41.88 43.43 78.99 71.72
run-20241128-p6-sf-8-linear-0.05-merged 66.74 43.42 51.57 80.13 80.71

merged 모델 이후 SFT를 진행해서 kmmlu와 kobest는 올렸으나 다시 gsm8k가 떨어졌다. 따라서 SLERP 방식으로 한 번 더 merge 진행. 1은 base 모델이 llama, 2는 우리 모델이다.

Last Modified: 2026/02/19 14:18:27
자바 알고리즘 인터뷰 파이썬 알고리즘 인터뷰

카카오 코딩 테스트 출제위원이 직접 집필한,
리트코드(LeetCode) 문제로 풀어보는,
구글, 마이크로소프트, 네이버, 카카오
코딩 테스트 완벽 가이드
『자바 알고리즘 인터뷰』,
『파이썬 알고리즘 인터뷰』

© 2000 - Sang Park Except where otherwise noted, content on this site is licensed under a CC BY-NC 4.0.
This site design was brought from Distill. Logo and wiki background image was brought from Bear.