Skip to content

42dot/42dot_LLM

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

15 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

42dot LLM

42dot LLM은 ν¬ν‹°νˆ¬λ‹· (42dot)μ—μ„œ 자체 κ°œλ°œν•œ μ–Έμ–΄ λͺ¨λΈλ“€μ˜ μ‹œλ¦¬μ¦ˆλ‘œ, λ‹€μŒμ˜ νŠΉμ§•μ„ κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€.

  • κ΅­λ‚΄ 졜초의 ν•œμ˜ν†΅ν•© μ–Έμ–΄ λͺ¨λΈ (=42dot LLM-PLM) 곡개 more
  • 42dot LLM-PLM 기반의 μƒμ„±ν˜• μ–Έμ–΄ λͺ¨λΈ (=42dot LLM-SFT) 곡개 more
  • 직접 κ΅¬μΆ•ν•œ (μˆ˜μ§‘, μ •μ œ) 데이터, 자체 ν•™μŠ΅ 인프라 μ‚¬μš©

뿐만 μ•„λ‹ˆλΌ, πŸ€—42dot LLM-PLMκ³Ό πŸ€—42dot LLM-SFTλ₯Ό κ³΅κ°œν–ˆμŠ΅λ‹ˆλ‹€.

42dot LLM-SFT μ‹€ν–‰ 예제 (example_cli.py μ‹€ν–‰)

42dot LLM-PLM (사전 ν•™μŠ΅ λͺ¨λΈ)

μ•„ν‚€ν…μ²˜

42dot LLM-PLM은 LLaMA 2 와 μœ μ‚¬ν•œ Transformer decoder μ•„ν‚€ν…μ²˜λ₯Ό μ‚¬μš©ν–ˆκ³ , λͺ¨λΈ ν•˜μ΄νΌνŒŒλΌλ―Έν„°λŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

Params Layers Attention heads Hidden size FFN size
1.3B 24 32 2,048 5,632

ν•™μŠ΅

42dot LLM-PLM의 ν•™μŠ΅μ€ A100 80G 256μž₯을 μ‚¬μš©ν–ˆκ³ , μ•½ 8일 (49,152 GPU hours) μ†Œμš”λ˜μ—ˆμŠ΅λ‹ˆλ‹€. ν•™μŠ΅ μ„ΈνŒ…μ€ μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

Params Global batch size* Initial learning rate Train iter.* Max length* Weight decay
1.3B 4.0M 4e-4 1.4T 4,096 0.1

(* λ‹¨μœ„: tokens)

ν•™μŠ΅ 데이터셋

42dot LLM-PLM의 ν•™μŠ΅ λ°μ΄ν„°λŠ” λͺ¨λ‘ μ›Ή 상에 곡개된 데이터λ₯Ό μ΄μš©ν•΄ μ§„ν–‰ν–ˆκ³ , κ·Έ ꡬ성은 μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

ν† ν¬λ‚˜μ΄μ €

Byte-level BPE ν† ν¬λ‚˜μ΄μ €λ₯Ό μ‚¬μš©ν–ˆκ³ , ν•™μŠ΅ λ°μ΄ν„°μ…‹μ—μ„œ 1,000만 건의 λ¬Έμ„œλ₯Ό μƒ˜ν”Œλ§ν•΄ ν•™μŠ΅ν–ˆμŠ΅λ‹ˆλ‹€. Vocabulary ν¬κΈ°λŠ” μ•½ 50Kμž…λ‹ˆλ‹€.

Zero-shot μ„±λŠ₯ 평가

42dot LLM-PLM 및 λΉ„μŠ·ν•œ νŒŒλΌλ―Έν„° 크기의 타 PLM과의 μ„±λŠ₯을 λΉ„κ΅ν•˜κΈ° μœ„ν•΄ ν•œκ΅­μ–΄ 및 μ˜μ–΄ Zero-shot 벀치마크λ₯Ό μ§„ν–‰ν–ˆκ³ , μ•„λž˜μ˜ ν‰κ°€κ²°κ³ΌλŠ” lm-eval-harnessλ₯Ό μ΄μš©ν•΄ λ„μΆœν–ˆμŠ΅λ‹ˆλ‹€.

ν•œκ΅­μ–΄

  • λΉ„κ΅λŒ€μƒ:
    • Polyglot-Ko 1.3B: GPT-NeoX μ•„ν‚€ν…μ²˜λ‘œ ν•œκ΅­μ–΄ 213B 토큰 (863 GB)을 ν•™μŠ΅ν•œ λͺ¨λΈ
    • KoGPT2 1.2B: GPT μ•„ν‚€ν…μ²˜λ‘œ 40GB μ΄μƒμ˜ ν•œκ΅­μ–΄ 데이터셋을 ν•™μŠ΅ν•œ λͺ¨λΈ
    • XGLM 1.7B: GPT-3 μ•„ν‚€ν…μ²˜λ‘œ ν•œκ΅­μ–΄λ₯Ό ν¬ν•¨ν•œ 30개 μ–Έμ–΄, 500B 토큰을 ν•™μŠ΅ν•œ λͺ¨λΈ
    • PolyLM 1.7B: LLaMA μ•„ν‚€ν…μ²˜λ‘œ ν•œκ΅­μ–΄λ₯Ό ν¬ν•¨ν•œ 18개 μ–Έμ–΄, 640B 토큰을 ν•™μŠ΅ν•œ λͺ¨λΈ
  • 평가 데이터셋:
    • KoBEST: BoolQ, COPA, HellaSwag, SentiNeg 의 4개 νƒœμŠ€ν¬

42dot LLM-PLM ν•œκ΅­μ–΄ μ„±λŠ₯

Tasks / Macro-F1 KoGPT2
1.2B
Polyglot-Ko
1.3B
XGLM
1.7B
PolyLM
1.7B
42dot LLM-PLM
1.3B
boolq 0.337 0.355 0.502 0.334 0.369
copa 0.67 0.721 0.616 0.513 0.704
hellaswag 0.404 0.401 0.374 0.321 0.431
sentineg 0.606 0.679 0.46 0.382 0.69
average 0.504 0.539 0.488 0.388 0.549

μ˜μ–΄

  • λΉ„κ΅λŒ€μƒ:
    • OPT 1.3B: GPT-3 μ•„ν‚€ν…μ²˜λ‘œ μ˜μ–΄ 300B 토큰을 ν•™μŠ΅ν•œ λͺ¨λΈ
    • MPT 1B: MPT μ•„ν‚€ν…μ²˜λ‘œ RedPajama λ°μ΄ν„°μ˜ 200B 토큰을 ν•™μŠ΅ν•œ λͺ¨λΈ
    • XGLM 1.7B
    • PolyLM 1.7B

42dot LLM-PLM μ˜μ–΄ μ„±λŠ₯

Tasks / Metric MPT
1B
OPT
1.3B
XGLM
1.7B
PolyLM
1.7B
42dot LLM-PLM
1.3B
anli_r1/acc 0.309 0.341 0.334 0.336 0.325
anli_r2/acc 0.334 0.339 0.331 0.314 0.34
anli_r3/acc 0.33 0.336 0.333 0.339 0.333
arc_challenge/acc 0.268 0.234 0.21 0.198 0.288
arc_challenge/acc_norm 0.291 0.295 0.243 0.256 0.317
arc_easy/acc 0.608 0.571 0.537 0.461 0.628
arc_easy/acc_norm 0.555 0.51 0.479 0.404 0.564
boolq/acc 0.517 0.578 0.585 0.617 0.624
hellaswag/acc 0.415 0.415 0.362 0.322 0.422
hellaswag/acc_norm 0.532 0.537 0.458 0.372 0.544
openbookqa/acc 0.238 0.234 0.17 0.166 0.222
openbookqa/acc_norm 0.334 0.334 0.298 0.334 0.34
piqa/acc 0.714 0.718 0.697 0.667 0.725
piqa/acc_norm 0.72 0.724 0.703 0.649 0.727
record/f1 0.84 0.857 0.775 0.681 0.848
record/em 0.832 0.849 0.769 0.674 0.839
rte/acc 0.541 0.523 0.559 0.513 0.542
truthfulqa_mc/mc1 0.224 0.237 0.215 0.251 0.236
truthfulqa_mc/mc2 0.387 0.386 0.373 0.428 0.387
wic/acc 0.498 0.509 0.503 0.5 0.502
winogrande/acc 0.574 0.595 0.55 0.519 0.583
average 0.479 0.482 0.452 0.429 0.492

42dot LLM-SFT (μƒμ„±ν˜• μ–Έμ–΄ λͺ¨λΈ)

42dot LLM-SFTλŠ” 42dot LLM-PLM에 SFT (Supervised Fine-Tuning)λ₯Ό μˆ˜ν–‰ν•œ λͺ¨λΈλ‘œ, ν•™μŠ΅μ„ μœ„ν•œ νŒŒλΌλ―Έν„°λŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

Model Global Batch Size Learning rate Epochs Max length Weight decay Warmup ratio
1.3B 16 2e-5 3 4,096 0 0.03

ν•™μŠ΅μ€ A100 80G GPU 16μž₯을 μ‚¬μš©ν–ˆκ³  μ•½ 7μ‹œκ°„ (112 GPU hours) μ†Œμš”λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

ν•™μŠ΅ 데이터셋

질문/μš”μ²­ 및 이에 λŒ€ν•œ μ‘λ‹΅μœΌλ‘œ 이루어진 Single/Multi-turn ν˜•νƒœμ˜ λŒ€ν™” 데이터λ₯Ό ν•™μŠ΅μ— μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€.

  • 42dot LLM-SFT의 ν•™μŠ΅ 데이터 κ΄€λ ¨ λ‚΄μš©μ€ κ³΅κ°œν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λŒ€μ‹ , 이미 κ³΅κ°œλ˜μ–΄ μžˆλŠ” λ‹€μ–‘ν•œ ν•œκ΅­μ–΄ (evolve-instruct, ko-lima-vicuna, λ“±) 및 μ˜μ–΄ (ShareGPT, OpenAssistant, etc.)의 데이터λ₯Ό μ°Έκ³ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

평가

  • λΉ„κ΅λŒ€μƒ:
    • ChatGPT: OpenAIκ°€ κ³΅κ°œν•œ μƒμ„±ν˜• μ–Έμ–΄ λͺ¨λΈ μ„œλΉ„μŠ€ (GPT-3.5 및 GPT-4)
    • Bard: Google이 κ³΅κ°œν•œ μƒμ„±ν˜• μ–Έμ–΄ λͺ¨λΈ μ„œλΉ„μŠ€
    • KORani-v2-13B: LLaMA 13B을 ν•œκ΅­μ–΄ λ°μ΄ν„°μ…‹μœΌλ‘œ νŒŒμΈνŠœλ‹ν•œ λͺ¨λΈ
Model GPT-3.5 GPT-4 Bard KORani 42dot LLM-SFT
Params Unknown Unknown Unknown 13B 1.3B
  • 평가 데이터셋:
    • 10κ°€μ§€μ˜ μΉ΄ν…Œκ³ λ¦¬μ— λŒ€ν•΄ 총 121개의 ν”„λ‘¬ν”„νŠΈλ‘œ κ΅¬μ„±ν–ˆμŠ΅λ‹ˆλ‹€. [Dataset Link]
  • 평가 방법:
    • GPT-4λ₯Ό 평가 μˆ˜λ‹¨μœΌλ‘œ μ‚¬μš©ν–ˆκ³ , <질문, 응닡>을 ν¬ν•¨ν•˜λŠ” ν”„λ‘¬ν”„νŠΈλ₯Ό μž…λ ₯으둜 6κ°€μ§€ ν•­λͺ©μ— λŒ€ν•΄ 각 λͺ¨λΈμ˜ 응닡을 ν‰κ°€ν–ˆμŠ΅λ‹ˆλ‹€.

평가 데이터셋에 λŒ€ν•œ 응닡 ν’ˆμ§ˆ 평가

μƒμš© μ„œλΉ„μŠ€μ™€ 42dot LLM-SFT의 응닡 비ꡐ

λͺ¨λΈ 곡개

μ‚¬μš©λ²•

λ³Έ λ¦¬ν¬μ§€ν† λ¦¬μ—λŠ” κ°„λ‹¨ν•œ 생성 μ½”λ“œλ₯Ό ν•¨κ»˜ μ œκ³΅ν•˜λ©°, μ•„λž˜ λͺ…령을 톡해 κ΄€λ ¨ νŒ¨ν‚€μ§€λ₯Ό μ„€μΉ˜ν•˜κ³  직접 λͺ¨λΈμ„ ꡬ동해 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

$ pip install -r requirements.txt
$ python example_cli.py

기본적으둜 λ””λ°”μ΄μŠ€ 섀정을 μžλ™μœΌλ‘œ 찾으며, CPU λ˜λŠ” λ©”λͺ¨λ¦¬ μ—¬μœ κ°€ μΆ©λΆ„ν•œ GPUλ₯Ό μžλ™μœΌλ‘œ μ°Ύμ•„ 졜적의 λ””λ°”μ΄μŠ€μ—μ„œ λ™μž‘ν•˜λ„λ‘ μ„€κ³„λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ --device=cpu μ˜΅μ…˜μœΌλ‘œ 항상 CPUμ—μ„œ ꡬ동할 수 있으며, λ³„λ„μ˜ Quantization μ˜΅μ…˜ 없이도 M1 λ§₯뢁 ν”„λ‘œμ—μ„œλŠ” CPU μ˜΅μ…˜μœΌλ‘œ 둜컬 ꡬ동(μ•½ 4GB 정도 μ—¬μœ  λ©”λͺ¨λ¦¬ ν•„μš”)이 κ°€λŠ₯ν•©λ‹ˆλ‹€. 이외에도 생성과 κ΄€λ ¨ν•œ λ‹€μ–‘ν•œ μ˜΅μ…˜μ„ μ§€μ›ν•˜λ©° --help둜 도움말을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

$ python example_cli.py --help

llama.cpp

ν—ˆκΉ…νŽ˜μ΄μŠ€μ— μ˜¬λ €μ£Όμ‹  ν”Όλ“œλ°±μ„ μ°Έκ³ ν•˜μ—¬ llama.cppμ—μ„œλ„ ꡬ동할 수 μžˆλ„λ‘ Special Tokensλ₯Ό νŒ¨μΉ˜ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

이제 μ•„λž˜ κ°€μ΄λ“œλ₯Ό μ°Έκ³ ν•˜μ—¬ llama.cppμ—μ„œ 42dot LLM-SFT λͺ¨λΈμ„ μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  1. 42dot LLM-SFT λͺ¨λΈμ„ ggml FP32 포맷으둜 λ³€ν™˜ν•©λ‹ˆλ‹€.
$ python convert.py ./42dot_LLM-SFT-1.3B/ --vocabtype bpe
  1. λͺ¨λΈμ„ 4λΉ„νŠΈλ‘œ Quantization ν•©λ‹ˆλ‹€(선택사항).
$ ./quantize ./42dot_LLM-SFT-1.3B/ggml-model-f32.gguf ./42dot_LLM-SFT-1.3B/ggml-model-q4_0.gguf q4_0
  1. 인퍼런슀λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€. μ•„λž˜ 저희가 μ œμ‹œν•˜λŠ” μ˜΅μ…˜μ„ κ·ΈλŒ€λ‘œ μ‚¬μš©ν•˜λŠ” 것을 ꢌμž₯ν•©λ‹ˆλ‹€.
$ ./main -m ./42dot_LLM-SFT-1.3B/ggml-model-f32.gguf \
--temp 0.5 \
--top_p 0.95 \
--top_k 20 \
--n-predict 512 \
--repeat-penalty 1.2 \
--color \
--prompt "ν˜ΈκΈ°μ‹¬ λ§Žμ€ 인간 (human)κ³Ό 인곡지λŠ₯ 봇 (AI bot)의 λŒ€ν™”μž…λ‹ˆλ‹€. \nλ΄‡μ˜ 이름은 42dot LLM이고 ν¬ν‹°νˆ¬λ‹· (42dot)μ—μ„œ κ°œλ°œν–ˆμŠ΅λ‹ˆλ‹€. \n봇은 μΈκ°„μ˜ μ§ˆλ¬Έμ— λŒ€ν•΄ μΉœμ ˆν•˜κ²Œ μœ μš©ν•˜κ³  μƒμ„Έν•œ 닡변을 μ œκ³΅ν•©λ‹ˆλ‹€. \n" \
--in-prefix "<human>: " \
--in-suffix "<bot>:" \
--interactive-first

ν•œκ³„μ 

λ‹€λ₯Έ LLMκ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ 42dot LLM도 μ—¬λŸ¬ ν•œκ³„λ₯Ό κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€. 42dot LLMλ₯Ό ν™œμš©ν•  λ•Œ μ΄λŸ¬ν•œ ν•œκ³„μ λ“€μ„ κ°μ•ˆν•˜κΈ° λ°”λžλ‹ˆλ‹€.

  • μ–Έμ–΄ λͺ¨λΈμ€ ν™˜κ° (Hallucination)μ΄λΌλŠ” 근본적인 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. λ§ˆμ°¬κ°€μ§€λ‘œ μ–Έμ–΄ λͺ¨λΈμΈ 42dot LLM도 μ΄λŸ¬ν•œ ν™˜κ° 문제λ₯Ό κ°€μ§€κ³  있으며, μƒμ„±ν•˜λŠ” λ‚΄μš©μ΄ 사싀과 μΌμΉ˜ν•˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 자체적으둜 42dot LLM-SFT의 ν•™μŠ΅ 데이터λ₯Ό κ΅¬μΆ•ν•˜λ©΄μ„œ μΌ€μ΄μŠ€λ₯Ό μ΅œλŒ€ν•œ λ‹€μ–‘ν™”ν–ˆμ§€λ§Œ, 미처 ν¬ν•¨ν•˜μ§€ λͺ»ν•œ 질문-응닡 μΌ€μ΄μŠ€κ°€ μ‘΄μž¬ν•  수 있기 λ•Œλ¬Έμ— κΈ°λŒ€ν•˜λŠ” ν˜•νƒœμ˜ 응닡을 μƒμ„±ν•˜μ§€ λͺ»ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • λ™μΌν•œ μž…λ ₯에 λŒ€ν•΄ 맀번 λ‹€λ₯Έ 응닡을 생성할 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, μ‚¬μš©μžκ°€ μž…λ ₯ν•œ 질문/μš”μ²­μΈ ν”„λ‘¬ν”„νŠΈμ— λ―Όκ°ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μ£Όμ–΄μ§„ μ§ˆλ¬Έμ— μ •ν™•ν•œ 닡변을 μƒμ„±ν–ˆλ”λΌλ„, λ™μΌν•œ λ‚΄μš©μ— ν‘œν˜„ λ°©μ‹λ§Œ λ‹€λ₯Έ 질문/μš”μ²­μ— μ „ν˜€ λ‹€λ₯Έ 응닡을 생성할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 생성 결과에 λ³„λ„μ˜ 필터링을 μ μš©ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ 도덕, 인쒅, λ¬Έν™”, 성별, λ‚˜μ΄, μ§€μ—­, 쒅ꡐ, μ •μΉ˜μ„±ν–₯ 등에 λŒ€ν•΄ 편ν–₯μ μ΄κ±°λ‚˜ λΆ€μ μ ˆν•œ 응닡을 생성할 수 μžˆμŠ΅λ‹ˆλ‹€.

λΌμ΄μ„ΌμŠ€

κ³΅κ°œν•œ λͺ¨λΈμ€ 42dot의 R&D κ²°κ³Όλ¬Όλ‘œμ„œ, CC BY-NC 4.0을 λ”°λ¦…λ‹ˆλ‹€.

μœ μ˜μ‚¬ν•­

42dot LLM을 톡해 μƒμ„±ν•œ λ‚΄μš©μ€ 42dot의 μž…μž₯κ³Ό λ¬΄κ΄€ν•˜λ©°, 42dot은 생성 λ‚΄μš© 및 이둜 인해 λ°œμƒν•˜λŠ” λ¬Έμ œμ— λŒ€ν•΄ μ±…μž„μ§€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ±„μš©μ•ˆλ‚΄

μ €ν¬λŠ” 42dot LLM이 μ–Έμ–΄ λͺ¨λΈ 기술 및 μƒνƒœκ³„, λ‚˜μ•„κ°€ μ„œλΉ„μŠ€ 확산에 κΈ°μ—¬ν•˜κΈΈ κΈ°λŒ€ν•©λ‹ˆλ‹€. μ•„μšΈλŸ¬ 미래 μžλ™μ°¨μ˜ 핡심인 SDV (Software-Defined Vehicle)λ₯Ό μ‹€ν˜„ν•˜κΈ° μœ„ν•œ 42dot의 여정을 ν•¨κ»˜ν•  뢄듀을 기닀리고 μžˆμŠ΅λ‹ˆλ‹€.

Citation

@misc{42dot2023llm,
      title={42dot LLM: A Series of Large Language Model by 42dot},
      author={42dot Inc.},
      year={2023},
      url = {https://github.com/42dot/42dot_LLM},
      version = {1.0.0},
}

About

42dot LLM consists of a pre-trained language model, 42dot LLM-PLM, and a fine-tuned model, 42dot LLM-SFT, which is trained to respond to user prompts and supports both languages simultaneously by training a large amount of Korean and English text.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages