sangwon1472's picture
Add gemma-mud-colab-starter package
d9fceea

gemma-mud-colab-starter

์ž‘๊ณ  ์กฐ์šฉํ•œ ๋ถˆ์”จ ํ•˜๋‚˜๋ฅผ ์ฝ”๋žฉ ์œ„์— ์˜ฌ๋ ค ๋‘๋Š” ํŒจํ‚ค์ง€๋‹ค.
์ด ๋ฌถ์Œ์€ MUD ๋ฌธ์ฒดยทNPC ๋Œ€ํ™”ยท๋ฐฉ ๋ถ„์œ„๊ธฐ๋ฅผ ์œ„ํ•œ Gemma 4 + Unsloth LoRA ์ฒซ ์‹คํ—˜์šฉ ์ตœ์†Œ ํŒจํ‚ค์ง€๋‹ค.

์ด ํŒจํ‚ค์ง€๋Š” ์™„์„ฑํ˜• ๋Œ€๊ทœ๋ชจ ํ•™์Šต ์‹œ์Šคํ…œ์ด ์•„๋‹ˆ๋‹ค.
100๊ฐœ ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ๋กœ ํ๋ฆ„์„ ์ตํžˆ๊ณ , ๋…ธํŠธ๋ถ์ด ์‹ค์ œ๋กœ ํ•œ ๋ฒˆ ๋Œ์•„๊ฐ€๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐ ๋ชฉ์ ์ด ์žˆ๋‹ค.


1. ๋ฌด์—‡์ด ๋“ค์–ด ์žˆ๋‚˜

  • README.md
    ์ „์ฒด ํ๋ฆ„ ์•ˆ๋‚ด
  • requirements_colab.txt
    ์ฝ”๋žฉ ์„ค์น˜ ํŒจํ‚ค์ง€ ๋ชฉ๋ก
  • run_instructions.md
    ์ •๋ง ์‰ฌ์šด ์‹คํ–‰ ์ˆœ์„œ
  • troubleshooting.md
    ์ž์ฃผ ๋ง‰ํžˆ๋Š” ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ
  • dataset/gemma4_mud_alpaca_100.jsonl
    ํ•™์Šต ๋ฐ์ดํ„ฐ์…‹
  • notebooks/Gemma4_MUD_QLoRA_Colab_Notebook.ipynb
    ์ฝ”๋žฉ ์‹คํ–‰ ๋…ธํŠธ๋ถ
  • examples/sample_prompts.md
    ํ…Œ์ŠคํŠธ์šฉ ๋ช…๋ น ์˜ˆ์‹œ
  • examples/lmstudio_system_prompt_ko.txt
    LM Studio ๋ถ™์—ฌ ๋„ฃ๊ธฐ์šฉ ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ
  • examples/lmstudio_system_prompt_npc_ko.txt
    LM Studio ์งง์€ NPC ๋Œ€ํ™”์šฉ ํ”„๋กฌํ”„ํŠธ
  • examples/lmstudio_system_prompt_lore_ko.txt
    LM Studio ์„ธ๊ณ„๊ด€ ์„ค๋ช…์šฉ ํ”„๋กฌํ”„ํŠธ
  • examples/lmstudio_test_prompts.md
    LM Studio ํ™•์ธ์šฉ ํ…Œ์ŠคํŠธ ๋ฌธ์žฅ
  • examples/expected_outputs.md
    ์ •์ƒ ์ถœ๋ ฅ์˜ ๊ฒฐ์„ ์ฝ๋Š” ๊ธฐ์ค€
  • output/.gitkeep
    ๊ฒฐ๊ณผ ํด๋” ์ž๋ฆฌ ๋ณด์กด์šฉ
  • package_manifest.md
    ํŒŒ์ผ ์—ญํ•  ์š”์•ฝ

2. ์ด ํŒจํ‚ค์ง€์˜ ๋ชฉ์ 

์ด ํŒจํ‚ค์ง€๋Š” ์•„๋ž˜ ์…‹์„ ๋น ๋ฅด๊ฒŒ ์‹œํ—˜ํ•˜๋Š” ๋ฐ ๋งž์ถฐ์ ธ ์žˆ๋‹ค.

  1. MUD ๋ช…๋ น์–ด์— ๋Œ€ํ•œ ๋ฌธ์ฒด ํ•™์Šต
  2. NPC ๋Œ€ํ™” ๋ฐ˜์‘ ๋ฏธ์„ธ์กฐ์ •
  3. ๋กœ์ปฌ ์ถ”๋ก  ์„œ๋ฒ„๋‚˜ MUD ์—”์ง„์— ๋ถ™์ผ ์ˆ˜ ์žˆ๋Š” LoRA ์–ด๋Œ‘ํ„ฐ ์ƒ์„ฑ

์ฆ‰,
๊ฒŒ์ž„ ํŒ์ • ์ „์ฒด๋ฅผ AI์—๊ฒŒ ๋งก๊ธฐ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ
๋งํˆฌ, ๋ถ„์œ„๊ธฐ, ์งง์€ ์„œ์‚ฌ, ํžŒํŠธ์„ฑ ์‘๋‹ต์„ ๋‹ค๋“ฌ๋Š” ๋ฐฉํ–ฅ์— ๋งž๋‹ค.


3. ์ค€๋น„๋ฌผ

  • Google ๊ณ„์ •
  • Google Colab
  • ์„ ํƒ: Hugging Face ๊ณ„์ •
  • ์„ ํƒ: Hugging Face ํ† ํฐ
  • ์ด ํŒจํ‚ค์ง€ zip ํŒŒ์ผ

4. Hugging Face ๋กœ๊ทธ์ธ์€ ์–ธ์ œ ํ•„์š”ํ•œ๊ฐ€

์ด๋ฒˆ ๋…ธํŠธ๋ถ ๊ธฐ๋ณธ ๊ฒฝ๋กœ๋Š” unsloth/gemma-4-E2B-it ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
๋กœ์ปฌ ์ €์žฅ๋งŒ ํ•  ๋•Œ๋Š” Hugging Face ๋กœ๊ทธ์ธ์ด ์—†์–ด๋„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

์•„๋ž˜ ๊ฒฝ์šฐ์—๋Š” ๋กœ๊ทธ์ธํ•ด ๋‘๋Š” ํŽธ์ด ์ข‹๋‹ค.

  1. Hugging Face Hub๋กœ LoRA ์–ด๋Œ‘ํ„ฐ๋ฅผ ์˜ฌ๋ฆฌ๊ณ  ์‹ถ์„ ๋•Œ
  2. ๋‹ค๋ฅธ gated Gemma ์ฒดํฌํฌ์ธํŠธ๋ฅผ ์ง์ ‘ ๋ถˆ๋Ÿฌ์˜ค๊ณ  ์‹ถ์„ ๋•Œ
  3. ๋ชจ๋ธ/๊ฒฐ๊ณผ๋ฅผ Hub์—์„œ ๊ด€๋ฆฌํ•˜๊ณ  ์‹ถ์„ ๋•Œ

์ค‘์š”:

  • ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ฌธ์„œ์— ์ ์ง€ ์•Š๋Š”๋‹ค.
  • ํ† ํฐ์„ ์ฝ”๋“œ์— ํ•˜๋“œ์ฝ”๋”ฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ํ† ํฐ์ด ํ•„์š”ํ•  ๋•Œ๋งŒ ๋…ธํŠธ๋ถ์˜ ๋กœ๊ทธ์ธ ์…€ ์ฃผ์„์„ ํ’€์–ด ์ง์ ‘ ์ž…๋ ฅํ•œ๋‹ค.

5. ๊ฐ€์žฅ ์‰ฌ์šด ์‹คํ–‰ ์ˆœ์„œ

๋ฐฉ๋ฒ• A โ€” ๊ฐ€์žฅ ์‰ฌ์šด ๊ธธ

  1. zip์„ ํ‘ผ๋‹ค.
  2. notebooks/Gemma4_MUD_QLoRA_Colab_Notebook.ipynb ๋ฅผ Colab์—์„œ ์—ฐ๋‹ค.
  3. ๋Ÿฐํƒ€์ž„์„ GPU๋กœ ๋ฐ”๊พผ๋‹ค.
  4. dataset/gemma4_mud_alpaca_100.jsonl ํŒŒ์ผ์„ Colab ํŒŒ์ผ ํŒจ๋„์— ์—…๋กœ๋“œํ•œ๋‹ค.
  5. ์…€์„ ์œ„์—์„œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์‹คํ–‰ํ•œ๋‹ค.
  6. ์„ค์น˜ ์…€ ๋’ค์— import ์˜ค๋ฅ˜๊ฐ€ ๋‚ฌ๋‹ค๋ฉด ๋Ÿฐํƒ€์ž„ ์žฌ์‹œ์ž‘ ํ›„ 2๋ฒˆ ์…€๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹คํ–‰ํ•œ๋‹ค.
  7. ํ•„์š”ํ•  ๋•Œ๋งŒ Hugging Face ๋กœ๊ทธ์ธ ์…€์˜ ์ฃผ์„์„ ํ’€์–ด ์‹คํ–‰ํ•œ๋‹ค.
  8. ํ•™์Šต์ด ๋๋‚˜๋ฉด /content/output/gemma_mud_lora_out ํด๋”๋ฅผ ํ™•์ธํ•œ๋‹ค.

๋ฐฉ๋ฒ• B โ€” ๋“œ๋ผ์ด๋ธŒ์— ๋‘๊ณ  ์“ฐ๊ธฐ

  1. zip์„ ๊ตฌ๊ธ€ ๋“œ๋ผ์ด๋ธŒ์— ์˜ฌ๋ฆฐ๋‹ค.
  2. ๋“œ๋ผ์ด๋ธŒ์—์„œ ์••์ถ•์„ ํ‘ผ๋‹ค.
  3. ๋…ธํŠธ๋ถ์—์„œ ๊ฒฝ๋กœ ์„ค์ • ์…€๋งŒ ๋ฐ”๊ฟ” ๋“œ๋ผ์ด๋ธŒ ๊ฒฝ๋กœ๋ฅผ ์žก๋Š”๋‹ค.
  4. ๋‚˜๋จธ์ง€๋Š” ๊ฐ™์€ ์ˆœ์„œ๋กœ ์‹คํ–‰ํ•œ๋‹ค.

6. ๋ฐ์ดํ„ฐ์…‹ ์œ„์น˜์™€ ํ˜•์‹

๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ์…‹์€ ์—ฌ๊ธฐ์— ์žˆ๋‹ค.

  • dataset/gemma4_mud_alpaca_100.jsonl

ํ˜•์‹์€ ๋‹ค์Œ ํ•„๋“œ๋ฅผ ๊ฐ€์ง„ Alpaca ๊ณ„์—ด JSONL์ด๋‹ค.

  • instruction
  • input
  • output
  • text

๋…ธํŠธ๋ถ์€ ์ด ํŒŒ์ผ์„ ๋จผ์ € ์ฝ๊ณ , instruction/input/output ๋ฅผ Gemma 4์šฉ user/assistant ๋Œ€ํ™”๋กœ ๋‹ค์‹œ ๊ฐ์‹ผ ๋’ค, ์ตœ์ข… text ์ปฌ๋Ÿผ์„ ๋งŒ๋“ค์–ด Unsloth SFTTrainer ์— ๋„˜๊ธด๋‹ค.


7. ๋…ธํŠธ๋ถ ๊ธฐ๋ณธ ์„ค์ •

๋…ธํŠธ๋ถ์€ ์ฒ˜์Œ ์„ฑ๊ณต ํ™•๋ฅ ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด Unsloth์˜ Gemma 4 E2B instruct ์ฒดํฌํฌ์ธํŠธ๋ฅผ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋‘”๋‹ค.
์™œ๋ƒํ•˜๋ฉด ๋ฌด๋ฃŒ Colab T4์—์„œ๋„ ๋น„๊ต์  ํ˜„์‹ค์ ์œผ๋กœ ํ•œ ๋ฒˆ ๋Œ์•„๊ฐ€๊ฒŒ ๋งŒ๋“ค๊ธฐ ์ข‹๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ธฐ๋ณธ๊ฐ’ ์˜ˆ์‹œ:

  • per_device_train_batch_size = 1
  • gradient_accumulation_steps = 4
  • num_train_epochs = 1
  • learning_rate = 2e-4
  • MAX_SEQ_LENGTH = 1024
  • LOAD_IN_4BIT = False

VRAM์ด ๋ถ€์กฑํ•˜๋ฉด ์„ค์ • ์…€์—์„œ LOAD_IN_4BIT = True ๋˜๋Š” MAX_SEQ_LENGTH = 512 ๋กœ ๋‚ฎ์ถ˜๋‹ค.
ํ•ต์‹ฌ์€ Gemma 4๋ฅผ ๊ทธ๋ƒฅ Alpaca ๋ฌธ์ž์—ด๋กœ ๋„ฃ์ง€ ์•Š๊ณ , Gemma 4 ์ฑ„ํŒ… ํ…œํ”Œ๋ฆฟ์œผ๋กœ ๋‹ค์‹œ ๊ฐ์‹ผ ๋’ค Unsloth LoRA๋กœ ํ•™์Šตํ•˜๋Š” ์ ์ด๋‹ค.


8. ํ•™์Šต ํ›„ ๊ฒฐ๊ณผ๋Š” ์–ด๋””์— ์ €์žฅ๋˜๋‚˜

๊ธฐ๋ณธ ์ €์žฅ ์œ„์น˜:

  • /content/output/gemma_mud_lora_out

์—ฌ๊ธฐ์—๋Š” ๋ณดํ†ต ์•„๋ž˜๊ฐ€ ์ƒ๊ธด๋‹ค.

  • LoRA adapter ๊ฐ€์ค‘์น˜
  • ํ† ํฌ๋‚˜์ด์ € ํŒŒ์ผ
  • ์„ค์ • ํŒŒ์ผ ์ผ๋ถ€
  • ์ฒดํฌํฌ์ธํŠธ ํด๋”

์ด ํด๋”๋ฅผ Google Drive๋กœ ๋ณต์‚ฌํ•˜๊ฑฐ๋‚˜, Colab์—์„œ ์ง์ ‘ ๋‚ด๋ ค๋ฐ›์œผ๋ฉด ๋œ๋‹ค.


9. ๋กœ์ปฌ MUD ์‹คํ—˜์— ๋ถ™์ด๋Š” ํฐ ํ๋ฆ„

ํ•™์Šต์ด ๋๋‚˜๋ฉด ๋ณดํ†ต ์ด๋ ‡๊ฒŒ ์ด์–ด์ง„๋‹ค.

  1. LoRA ์–ด๋Œ‘ํ„ฐ ์ €์žฅ
  2. ๋กœ์ปฌ ๋˜๋Š” ์„œ๋ฒ„ ์ถ”๋ก  ํ™˜๊ฒฝ์— ๋กœ๋“œ
  3. MUD ๋ช…๋ น ์ž…๋ ฅ์„ ํ”„๋กฌํ”„ํŠธ๋กœ ๋ณ€ํ™˜
  4. talk oracle, look, rumor ๊ฐ™์€ ์‘๋‹ต ์ƒ์„ฑ
  5. ๊ฒŒ์ž„ ์—”์ง„์€ ์—ฌ์ „ํžˆ ํŒ์ •์„ ๋งก๊ณ , AI๋Š” ๋ง๊ณผ ๋ถ„์œ„๊ธฐ๋ฅผ ๋งก์Œ

ํ•ต์‹ฌ์€ ์ด ์„ ์„ ์ง€ํ‚ค๋Š” ๊ฒƒ์ด๋‹ค.

  • ์—”์ง„: ์ด๋™, ์ „ํˆฌ ํŒ์ •, ๋ณด์ƒ, ํ€˜์ŠคํŠธ ์ƒํƒœ
  • AI: ๋Œ€ํ™”, ๋ถ„์œ„๊ธฐ, ์ „์Šน, ์งง์€ ํžŒํŠธ

10. ํ•œ๊ณ„์™€ ์ฃผ์˜์‚ฌํ•ญ

์ด ํŒจํ‚ค์ง€๋Š” ์ฒซ ์‹คํ—˜์šฉ์ด๋‹ค.

  • ๋ฐ์ดํ„ฐ๊ฐ€ 100๊ฐœ๋ฟ์ด๋ผ ํ’ˆ์งˆ์ด ํ”๋“ค๋ฆด ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฌธ์ฒด๋Š” ๋ฐฐ์›Œ๋„, ์„ธ๊ณ„ ๊ทœ์น™ ์ „์ฒด๋ฅผ ์ž๋™์œผ๋กœ ์ดํ•ดํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค.
  • ํฐ ๋ชจ๋ธ์€ ๋ฌด๋ฃŒ Colab์—์„œ ์‹คํŒจํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ธด ์‹œํ€€์Šค ๊ธธ์ด๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋น ๋ฅด๊ฒŒ ์žก์•„๋จน๋Š”๋‹ค.
  • ์„ธ์…˜์ด ๋Š๊ธฐ๋ฉด ์ €์žฅ ์ „๊นŒ์ง€ ์ž‘์—…์ด ์‚ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ ์ด๋Ÿฐ ๋ฌธ์žฅ์€ AI๊ฐ€ ์ž„์˜๋กœ ๋‚ด๋ฉด ์•ˆ ๋œ๋‹ค.

  • โ€œ๋„ˆ๋Š” ํ€˜์ŠคํŠธ๋ฅผ ์™„๋ฃŒํ–ˆ๋‹คโ€
  • โ€œ๋„ˆ๋Š” 500 ๊ณจ๋“œ๋ฅผ ์–ป์—ˆ๋‹คโ€
  • โ€œ๋ฌธ์ด ์—ด๋ ธ๋‹คโ€

์ด๊ฒƒ์€ ๊ฒŒ์ž„ ์—”์ง„ ํŒ์ • ์˜์—ญ์ด๋‹ค.


11. ๊ถŒ์žฅ ํ…Œ์ŠคํŠธ ๋ช…๋ น

ํ•™์Šต ์งํ›„์—๋Š” ์•„๋ž˜ ๋‹ค์„ฏ ๊ฐœ๋ฅผ ๋จผ์ € ๋„ฃ์–ด ๋ณด๋Š” ํŽธ์ด ์ข‹๋‹ค.

  • talk oracle
  • ask oracle about first fire
  • look
  • rumor
  • scan signal

์ข‹์€ ์ถœ๋ ฅ์€ ์งง๊ณ , ์„ธ๊ณ„๊ด€ ์•ˆ์— ๋จธ๋ฌผ๊ณ , ๊ณผ์žฅ๋œ ๋ฉ”ํƒ€ ๋ฐœ์–ธ์ด ์ ๋‹ค.

LM Studio ์—์„œ ํ…Œ์ŠคํŠธํ•  ๋•Œ๋Š” ์•„๋ž˜ ํŒŒ์ผ๋„ ๊ฐ™์ด ๋ณด๋ฉด ํŽธํ•˜๋‹ค.

  • examples/lmstudio_system_prompt_ko.txt
  • examples/lmstudio_system_prompt_npc_ko.txt
  • examples/lmstudio_system_prompt_lore_ko.txt
  • examples/lmstudio_test_prompts.md

12. ๋‹ค์Œ ํ™•์žฅ ๋‹จ๊ณ„

  1. 100๊ฐœ โ†’ 300๊ฐœ ๋ฐ์ดํ„ฐ ํ™•์žฅ
  2. chat/messages ํ˜•์‹ ๋ฐ์ดํ„ฐ์…‹ ์‹คํ—˜
  3. NPC๋ณ„ ์ „์šฉ ๋ฐ์ดํ„ฐ์…‹ ๋ถ„๋ฆฌ
  4. ๋กœ์ปฌ ์ถ”๋ก  ์„œ๋ฒ„ ์—ฐ๋™
  5. MUD ๋ช…๋ น์–ด๋ณ„ ์‘๋‹ต ํ’ˆ์งˆ ๋น„๊ต

์ฒ˜์Œ์—๋Š” ํ•œ ๋ช…์˜ NPC๋งŒ ์‚ด์•„๋‚˜๋„ ์ถฉ๋ถ„ํ•˜๋‹ค.
๊ทธ ๋’ค์— ์„ธ๊ณ„๋ฅผ ๋„“ํžˆ๋ฉด ๋œ๋‹ค.