Text Generation
PyTorch
Korean
korean
children-stories
gpt
education
from-scratch
dpo

modu-llm: ํ•œ๊ตญ์–ด ์–ด๋ฆฐ์ด ์ด์•ผ๊ธฐ๋ฅผ ์“ฐ๋Š” ์ž‘์€ GPT

ใ€Ž๋ชจ๋‘์˜ LLM with ํŒŒ์ด์ฌใ€(์ด์˜ํ˜ธ)์˜ ์‹ค์Šต ๋ชจ๋ธ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ์ฑ…์—์„œ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋งŒ๋“  ์•ฝ 609๋งŒ ๊ฐœ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ธ€์ž ๋‹จ์œ„ GPT๋ฅผ ํ•œ๊ตญ์–ด ์–ด๋ฆฐ์ด ์ด์•ผ๊ธฐ๋กœ ์‚ฌ์ „ํ•™์Šตํ•˜๊ณ , ์š”์ฒญ-์ด์•ผ๊ธฐ ์ง์œผ๋กœ ํŒŒ์ธํŠœ๋‹ํ•œ ๋’ค, ์„ ํ˜ธ ๋ฐ์ดํ„ฐ ์ง์œผ๋กœ ํ•œ ๋ฒˆ ๋” ํ•™์Šต(ํ”ผ๋“œ๋ฐฑ ํ•™์Šต, DPO)ํ–ˆ์Šต๋‹ˆ๋‹ค.

์‹ค์Šต ์ฝ”๋“œ์™€ ๋…ธํŠธ๋ถ: https://github.com/yhlee1627/modu-llm-v2

ํŒŒ์ผ

ํŒŒ์ผ ๋‚ด์šฉ ์ฑ…์—์„œ ์“ฐ๋Š” ๊ณณ
pretrain.pt ์‚ฌ์ „ํ•™์Šต์„ ๋งˆ์นœ ๋ชจ๋ธ๊ณผ ์˜ตํ‹ฐ๋งˆ์ด์ € ์ƒํƒœ (27,251๋ฒˆ ํ•™์Šต) 17์žฅยท1314์žฅ์˜ ์ด์•ผ๊ธฐ LLM, 11ยท12์žฅ
ckpt_step250.pt, ckpt_step1000.pt, ckpt_step3000.pt ์‚ฌ์ „ํ•™์Šต ๋„์ค‘์˜ ๋ชจ๋ธ (์˜ตํ‹ฐ๋งˆ์ด์ € ์—†์Œ) 2์žฅ, 6์žฅ, 7์žฅ ๋†€์ดํ„ฐ
sft.pt ์š”์ฒญ-์ด์•ผ๊ธฐ ์ง์œผ๋กœ ํŒŒ์ธํŠœ๋‹ํ•œ ๋ชจ๋ธ๊ณผ ์˜ตํ‹ฐ๋งˆ์ด์ € ์ƒํƒœ (3,400๋ฒˆ ํ•™์Šต) 2์žฅ, 12์žฅ
feedback.pt ํŒŒ์ธํŠœ๋‹ ๋ชจ๋ธ์„ ์„ ํ˜ธ ๋ฐ์ดํ„ฐ ์ง์œผ๋กœ ํ•œ ๋ฒˆ ๋” ํ•™์Šตํ•œ ๋ชจ๋ธ (์˜ตํ‹ฐ๋งˆ์ด์ € ์—†์Œ) 2์žฅ

๊ฐ ํŒŒ์ผ์€ torch.save๋กœ ์ €์žฅํ•œ ๋”•์…”๋„ˆ๋ฆฌ์ด๊ณ  cfg(๋ชจ๋ธ ์„ค์ •), model(๊ฐ€์ค‘์น˜), optimizer, step, history(์†์‹ค ๊ธฐ๋ก)๋ฅผ ๋‹ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. feedback.pt์˜ step๊ณผ history๋Š” ์ถœ๋ฐœ์ ์ธ sft.pt์˜ ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ๋‘” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ชจ๋ธ

ํ•ญ๋ชฉ ๊ฐ’
๊ตฌ์กฐ GPT(๋””์ฝ”๋” ์ „์šฉ Transformer), ๊ตฌ์กฐ๋Š” nanoGPT ์ฐธ๊ณ 
ํ† ํฐ ๊ธ€์ž ํ•˜๋‚˜ = ํ† ํฐ ํ•˜๋‚˜. ๊ณ ์ • ๊ธ€์ž ์‚ฌ์ „ 2,453์ž(์ž์ฃผ ์“ฐ๋Š” ํ•œ๊ธ€ 2,350์ž + ์˜๋ฌธยท์ˆซ์žยท๊ธฐํ˜ธ + ์ด์•ผ๊ธฐ ๋ ํ‘œ์‹œ ยง)
๋ฌธ๋งฅ ๊ธธ์ด 384๊ธ€์ž
๋ฒกํ„ฐ ๊ธธ์ด / ํ—ค๋“œ / ์ธต 256 / 4 / 6
ํŒŒ๋ผ๋ฏธํ„ฐ 6,091,157๊ฐœ

ํ•™์Šต

์‚ฌ์ „ํ•™์Šต (pretrain.pt)

  • ๋ฐ์ดํ„ฐ: Tiny-Ko-Stories ์•ž์ชฝ ์ด์•ผ๊ธฐ 200,000ํŽธ(์•ฝ 7,160๋งŒ ๊ธ€์ž), 90%๋Š” ํ•™์Šต์šฉ, 10%๋Š” ๊ฒ€์ฆ์šฉ
  • Google Colab T4 GPU์—์„œ 30๋ถ„(27,251๋ฒˆ ํ•™์Šต), ๋ฐฐ์น˜ 32, AdamW(ํ•™์Šต๋ฅ  5e-4), ๋ฐ˜์ •๋ฐ€๋„(float16 autocast)
  • ๋๋‚ฌ์„ ๋•Œ ์†์‹ค: ํ•™์Šต 0.751, ๊ฒ€์ฆ 0.771

ํŒŒ์ธํŠœ๋‹ (sft.pt)

  • ๋ฐ์ดํ„ฐ: Tiny-Ko-Stories SFT ํ•™์Šต์šฉ 43,852์Œ, ๊ฒ€์ฆ์šฉ 2,308์Œ
  • pretrain.pt์—์„œ ์ด์–ด ํ•™์Šต, T4์—์„œ 5๋ถ„, AdamW(ํ•™์Šต๋ฅ  1e-4)
  • ๊ฒ€์ฆ ์†์‹ค์ด ๊ฐ€์žฅ ๋‚ฎ์•˜๋˜ 3,400๋ฒˆ์งธ(๊ฒ€์ฆ 0.665)๋ฅผ ์ €์žฅ

ํ”ผ๋“œ๋ฐฑ ํ•™์Šต (feedback.pt)

  • ๋ฐ์ดํ„ฐ: Tiny-Ko-Stories Feedback ์„ ํ˜ธ ๋ฐ์ดํ„ฐ 920์Œ. ์‚ฌ๋žŒ์ด ํ•˜๋‚˜ํ•˜๋‚˜ ๊ณ ๋ฅด๋Š” ๋Œ€์‹  ๊ทœ์น™์œผ๋กœ ๋” ์ข‹์€ ๋‹ต์„ ๊ณจ๋ž์Šต๋‹ˆ๋‹ค. ์š”์ฒญ์ด ์ด์•ผ๊ธฐ ๋ถ€ํƒ์ด๋ฉด ์ด์•ผ๊ธฐ๊ฐ€, ์ด์•ผ๊ธฐ๊ฐ€ ์•„๋‹Œ ์งˆ๋ฌธ์ด๋ฉด "๊ทธ ์งˆ๋ฌธ์˜ ๋‹ต์€ ๋ชฐ๋ผ์š”. โ€ฆ"๋ผ๋Š” ๋‹ต์ด ๋” ์ข‹์€ ๋‹ต์ž…๋‹ˆ๋‹ค.
  • sft.pt์—์„œ ์‹œ์ž‘ํ•ด DPO(beta 0.1)๋กœ ํ•™์Šตํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์ค€ ๋ชจ๋ธ์€ sft.pt์ž…๋‹ˆ๋‹ค. DPO๋งŒ์œผ๋กœ๋Š” ์ง€์–ด๋‚ธ ์ด์•ผ๊ธฐ๋ฅผ ๋ฐ€์–ด๋‚ด๊ธฐ๋งŒ ํ•˜๊ณ  ๋ชจ๋ฅธ๋‹ค๋Š” ๋‹ต์ด ๋‚˜์˜ค์ง€ ์•Š์•„์„œ, ๋” ์ข‹์€ ๋‹ต์˜ ๊ธ€์ž๋‹น ์†์‹ค๋„ ํ•จ๊ป˜ ์ค„์˜€์Šต๋‹ˆ๋‹ค(๊ฐ€์ค‘์น˜ 1.0).
  • AdamW(ํ•™์Šต๋ฅ  5e-5), ์ง 16๊ฐœ์”ฉ 174๋ฒˆ(๋ฐ์ดํ„ฐ ์„ธ ๋ฐ”ํ€ด), CPU์—์„œ ์•ฝ 7๋ถ„
  • ํ•™์Šต ๋ฐ์ดํ„ฐ์— ์—†๋˜ ์งˆ๋ฌธ 8๊ฐœ๋ฅผ ์„ธ ๋ฒˆ์”ฉ ๋ฌผ์œผ๋ฉด 24๋ฒˆ ๊ฐ€์šด๋ฐ 21๋ฒˆ ๋ชจ๋ฅธ๋‹ค๊ณ  ๋‹ตํ•˜๊ณ , ์ด์•ผ๊ธฐ ๋ถ€ํƒ 5๊ฐœ๋ฅผ ์„ธ ๋ฒˆ์”ฉ ํ•˜๋ฉด 15๋ฒˆ ๋ชจ๋‘ ์ด์•ผ๊ธฐ๋ฅผ ์”๋‹ˆ๋‹ค. ์š”์ฒญ-์ด์•ผ๊ธฐ ํ™•์ธ์šฉ ๋ฐ์ดํ„ฐ์˜ ์†์‹ค์€ 0.645(ํŒŒ์ธํŠœ๋‹)์—์„œ 0.657๋กœ ๊ฑฐ์˜ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์“ฐ๋Š” ๋ฒ•

%pip install -q git+https://github.com/yhlee1627/modu-llm-v2

from modu_llm import load_story_llm

fb = load_story_llm("feedback")          # "pretrain", "sft", "feedback", "step250" โ€ฆ
fb.ask("๋Œ€ํ•œ๋ฏผ๊ตญ์˜ ์ˆ˜๋„๋Š” ์–ด๋””์•ผ?", length=150)
fb.ask("ํ† ๋ผ๊ฐ€ ๋‚˜์˜ค๋Š” ์งง์€ ์ด์•ผ๊ธฐ๋ฅผ ์จ ์ค˜", length=150)

๋ถ€ํ’ˆ์„ ์ง์ ‘ ๋‹ค๋ฃจ๋ ค๋ฉด ๋‹ค์Œ์ฒ˜๋Ÿผ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.

from modu_llm import Vocab, load_checkpoint, get_file, generate, format_pair

vocab = Vocab.build()
model, _, step, _ = load_checkpoint(get_file("sft.pt"), "cpu")
print(generate(model, vocab, format_pair("์ˆฒ์†์—์„œ ํ† ๋ผ ๋ณด๋ฆฌ๊ฐ€ ๋‚˜์˜ค๋Š” ์ด์•ผ๊ธฐ๋ฅผ ๋“ค๋ ค์ค˜"), max_new_tokens=300))

get_file์€ ๊ตฌ๊ธ€ ๋“œ๋ผ์ด๋ธŒ๋‚˜ ํ˜„์žฌ ํด๋”์— ๊ฐ™์€ ์ด๋ฆ„์˜ ํŒŒ์ผ์ด ์žˆ์œผ๋ฉด ๊ทธ๊ฒƒ์„ ์“ฐ๊ณ , ์—†์œผ๋ฉด ์ด ์ €์žฅ์†Œ์—์„œ ๋‚ด๋ ค๋ฐ›์Šต๋‹ˆ๋‹ค.

ํ•œ๊ณ„์™€ ์“ฐ์ž„

  • ๊ต์œก์šฉ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค. LLM์ด ์–ด๋–ป๊ฒŒ ์›€์ง์ด๋Š”์ง€ ๋ฐฐ์šฐ๋ ค๊ณ  ๋งŒ๋“  ๊ฒƒ์œผ๋กœ, ์‹ค์ œ ์„œ๋น„์Šค์— ์“ฐ๊ธฐ์—๋Š” ์•Œ๋งž์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์–ด๋ฆฐ์ด ์ด์•ผ๊ธฐ๋งŒ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค. ์‚ฌ์ „ํ•™์ŠตยทํŒŒ์ธํŠœ๋‹ ๋ชจ๋ธ์€ ์‚ฌ์‹ค ์งˆ๋ฌธ, ๊ณ„์‚ฐ, ์˜์–ด ์š”์ฒญ์—๋„ ์–ด๋ฆฐ์ด ์ด์•ผ๊ธฐ๋กœ ๋‹ตํ•ฉ๋‹ˆ๋‹ค. ํ”ผ๋“œ๋ฐฑ ํ•™์Šต ๋ชจ๋ธ์€ ์ด๋Ÿฐ ์งˆ๋ฌธ์— ๋Œ€๊ฐœ ๋ชจ๋ฅธ๋‹ค๊ณ  ๋‹ตํ•˜์ง€๋งŒ ๋Š˜ ๊ทธ๋ ‡์ง€๋Š” ์•Š๊ณ , ์ƒˆ ์ง€์‹์„ ๋ฐฐ์šด ๊ฒƒ๋„ ์•„๋‹™๋‹ˆ๋‹ค.
  • ์•ˆ์ „์žฅ์น˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํ•™์Šต ๋ฐ์ดํ„ฐ๋Š” ์—ฌ๋Ÿฌ AI ๋ชจ๋ธ๋กœ ๋งŒ๋“  ํ•ฉ์„ฑ ๋ฐ์ดํ„ฐ์ด๋ฉฐ, ์›๋ณธ ๋ฐ์ดํ„ฐ ์นด๋“œ์˜ ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š” ์šฉ๋„(์‚ฌ์‹ค ์งˆ์˜์‘๋‹ต, ์‚ฌ๋žŒ ๊ฒ€์ˆ˜ ์—†์ด ์–ด๋ฆฐ์ด์—๊ฒŒ ์ง์ ‘ ์ œ๊ณต ๋“ฑ)๊ฐ€ ์ด ๋ชจ๋ธ์—๋„ ๊ทธ๋Œ€๋กœ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ์‚ฌ์ „์— ์—†๋Š” ๊ธ€์ž(์ž์ฃผ ์“ฐ์ง€ ์•Š๋Š” ํ•œ๊ธ€, ํ•œ์ž, ์ด๋ชจํ‹ฐ์ฝ˜ ๋“ฑ)๋Š” ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.

๋ผ์ด์„ ์Šค์™€ ์ถœ์ฒ˜

์ด ๋ชจ๋ธ ํŒŒ์ผ๋“ค์€ CC BY 4.0์œผ๋กœ ๊ณต๊ฐœํ•ฉ๋‹ˆ๋‹ค. ์“ฐ๊ฑฐ๋‚˜ ๋‚˜๋ˆŒ ๋•Œ๋Š” ์ด ์ €์žฅ์†Œ์™€ ํ•™์Šต ๋ฐ์ดํ„ฐ์˜ ์ถœ์ฒ˜๋ฅผ ํ•จ๊ป˜ ๋ฐํ˜€ ์ฃผ์„ธ์š”.

์ถœ์ฒ˜ ํ‘œ๊ธฐ ์˜ˆ:

modu-llm (JosephLee), CC BY 4.0, https://huggingface.co/JosephLee/modu-llm
โ€” trained on Tiny-Ko-Stories (psymon), CC BY 4.0

English summary. Model files for the Korean book ๋ชจ๋‘์˜ LLM with ํŒŒ์ด์ฌ (Everyone's LLM with Python). A 6.1M-parameter character-level GPT trained from scratch on 200,000 Korean children's stories from Tiny-Ko-Stories, fine-tuned on requestโ€“story pairs (Tiny-Ko-Stories SFT), then trained with DPO on 920 rule-chosen preference pairs (Tiny-Ko-Stories Feedback) so that it declines non-story questions instead of making up a story. For education only. Licensed under CC BY 4.0; please credit this repository and the training data.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Datasets used to train JosephLee/modu-llm