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μ 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μ νμ΅ λ°μ΄ν°λ λͺ¨λ μΉ μμ 곡κ°λ λ°μ΄ν°λ₯Ό μ΄μ©ν΄ μ§ννκ³ , κ·Έ ꡬμ±μ μλμ κ°μ΅λλ€.
- νκ΅μ΄: μ§μ§ νλ‘μ νΈ, mC4, LBox Open, KLUE, μν€νΌλμ (νκ΅μ΄) λ± ν¬ν¨
- μμ΄: The Pile, RedPajama, C4 λ± ν¬ν¨
Byte-level BPE ν ν¬λμ΄μ λ₯Ό μ¬μ©νκ³ , νμ΅ λ°μ΄ν°μ μμ 1,000λ§ κ±΄μ λ¬Έμλ₯Ό μνλ§ν΄ νμ΅νμ΅λλ€. Vocabulary ν¬κΈ°λ μ½ 50Kμ λλ€.
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 |
- λΉκ΅λμ:
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-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μ μλ΅ λΉκ΅
- π€42dot LLM-PLM
- π€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μμλ ꡬλν μ μλλ‘ Special Tokensλ₯Ό ν¨μΉνμμ΅λλ€.
μ΄μ μλ κ°μ΄λλ₯Ό μ°Έκ³ νμ¬ llama.cppμμ 42dot LLM-SFT λͺ¨λΈμ μ€νν μ μμ΅λλ€.
- 42dot LLM-SFT λͺ¨λΈμ ggml FP32 ν¬λ§·μΌλ‘ λ³νν©λλ€.
$ python convert.py ./42dot_LLM-SFT-1.3B/ --vocabtype bpe
- λͺ¨λΈμ 4λΉνΈλ‘ Quantization ν©λλ€(μ νμ¬ν).
$ ./quantize ./42dot_LLM-SFT-1.3B/ggml-model-f32.gguf ./42dot_LLM-SFT-1.3B/ggml-model-q4_0.gguf q4_0
- μΈνΌλ°μ€λ₯Ό μ€νν©λλ€. μλ μ ν¬κ° μ μνλ μ΅μ μ κ·Έλλ‘ μ¬μ©νλ κ²μ κΆμ₯ν©λλ€.
$ ./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μ μ¬μ μ ν¨κ»ν λΆλ€μ κΈ°λ€λ¦¬κ³ μμ΅λλ€.
@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},
}





