Korean LLM Fine-tuning Project
μ΄ νλ‘μ νΈλ Llama 3.2 1B λͺ¨λΈμ νκ΅μ΄ QA λ°μ΄ν°λ‘ νμΈνλνλ μμμ λλ€. LoRA(μ λν¬ μ΄λν°) λ°©λ²μ μ¬μ©νμ¬ ν¨μ¨μ μΈ νμΈνλμ μνν©λλ€.
π― λͺ©ν
- Llama 3.2 1B λͺ¨λΈμ νκ΅μ΄ λ°μ΄ν°λ‘ νμΈνλ
- LoRAλ₯Ό ν΅ν λ©λͺ¨λ¦¬ ν¨μ¨μ μΈ νμ΅
- νκ΅μ΄ μ§μμλ΅ λ₯λ ₯ ν₯μ
- κΈ°μ λ ₯ μ μ¦μ μν λ°λͺ¨ νλ‘μ νΈ
π νλ‘μ νΈ κ΅¬μ‘°
korean-llm-finetune/
βββ README.md # νλ‘μ νΈ μ€λͺ
βββ requirements.txt # νμν ν¨ν€μ§ λͺ©λ‘
βββ model_card.md # λͺ¨λΈ μΉ΄λ
βββ configs/
β βββ lora_config.yaml # LoRA μ€μ
βββ data/
β βββ ko_samples.jsonl # νκ΅μ΄ μν λ°μ΄ν°
βββ scripts/
β βββ train_lora.py # νμΈνλ μ€ν¬λ¦½νΈ
β βββ evaluate.py # νκ° μ€ν¬λ¦½νΈ
β βββ preprocess.py # μ μ²λ¦¬ μ€ν¬λ¦½νΈ
βββ inference_demo.ipynb # μΆλ‘ λ°λͺ¨ λ
ΈνΈλΆ
βββ outputs/ # νμ΅ κ²°κ³Ό μ μ₯
π μμνκΈ°
1. νκ²½ μ€μ
# νμν ν¨ν€μ§ μ€μΉ
pip install -r requirements.txt
2. λ°μ΄ν° μ€λΉ
data/ko_samples.jsonl
νμΌμ νκ΅μ΄ QA λ°μ΄ν°λ₯Ό μ€λΉν©λλ€:
{"instruction": "λ€μ μ§λ¬Έμ λ΅νμΈμ", "input": "νκ΅μ AI μ μ±
μ?", "output": "μ λΆλ 2025λ
λΆν° λ
μ AI νμ΄λ°μ΄μ
λͺ¨λΈμ κ°λ° μ€μ
λλ€."}
3. λͺ¨λΈ λ€μ΄λ‘λ
Llama 3.2 1B λͺ¨λΈμ Hugging Faceμμ λ€μ΄λ‘λν©λλ€:
from transformers import AutoTokenizer, AutoModelForCausalLM
# ν ν¬λμ΄μ λ€μ΄λ‘λ
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3.2-1B")
# λͺ¨λΈ λ€μ΄λ‘λ (Meta λΌμ΄μ μ€ λμ νμ)
model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3.2-1B")
4. νμΈνλ μ€ν
cd scripts
python train_lora.py \
--model_name_or_path meta-llama/Llama-3.2-1B \
--data_path ../data/ko_samples.jsonl \
--output_dir ../outputs \
--num_train_epochs 3 \
--per_device_train_batch_size 1 \
--learning_rate 2e-4
5. λͺ¨λΈ νκ°
python evaluate.py \
--base-model meta-llama/Llama-3.2-1B \
--adapter-path ../outputs/final_model \
--test-data ../data/ko_samples.jsonl
6. μΆλ‘ λ°λͺ¨
Jupyter λ ΈνΈλΆμ μ€ννμ¬ λͺ¨λΈμ ν μ€νΈν©λλ€:
jupyter notebook inference_demo.ipynb
π§ μ£Όμ κΈ°λ₯
LoRA νμΈνλ
- μ λν¬ μ΄λν°λ₯Ό ν΅ν λ©λͺ¨λ¦¬ ν¨μ¨μ±
- LoRAλ₯Ό ν΅ν μ μν νμ΅
- CPU/M1/M2 νκ²½μμλ νμ΅ κ°λ₯
νκ΅μ΄ μ΅μ ν
- νκ΅μ΄ ν둬ννΈ ν¬λ§·ν
- νκ΅μ΄ QA λ°μ΄ν°μ
- νκ΅μ΄ νΉν ν ν¬λμ΄μ§
νκ° λ° λ°λͺ¨
- μλνλ νκ° μ€ν¬λ¦½νΈ
- Jupyter λ ΈνΈλΆ λ°λͺ¨
- κ²°κ³Ό μκ°ν
π μ±λ₯ μ§ν
- λͺ¨λΈ ν¬κΈ°: 1.2B νλΌλ―Έν°
- νμ΅ κ°λ₯ν νλΌλ―Έν°: ~0.85M (LoRA)
- λ©λͺ¨λ¦¬ μ¬μ©λ: CPU/M1/M2 νκ²½ κΈ°μ€
- 컨ν μ€νΈ κΈΈμ΄: 4096 ν ν°
π μ΅μ νκ° κ²°κ³Ό μμ½ (2025-07-03 17:44:47)
- λͺ¨λΈ: meta-llama/Llama-3.2-1B
- μ΄λν°: outputs/final_model
- ν μ€νΈ λ°μ΄ν°: data/ko_samples.jsonl
- ν μ€νΈ μν μ: 10
- νκ° μ‘°κ±΄: max_new_tokens=128, temperature=0.7
- μμ€ν : macOS-15.5-arm64, Python 3.10.11
# | μ§λ¬Έ | μ λ ₯ | μμ λ΅λ³ | μμ± λ΅λ³(μμ½) |
---|---|---|---|---|
1 | λ€μ μ§λ¬Έμ λ΅νμΈμ | νκ΅μ AI μ μ± μ? | μ λΆλ 2025λ λΆν° λ μ AI νμ΄λ°μ΄μ λͺ¨λΈ... | νκ΅μ AI μ μ± μ AI κΈ°μ μ λ°μ κ³Ό λμμ... |
2 | λ€μ μ§λ¬Έμ λ΅νμΈμ | λνλ―Όκ΅μ μλλ? | μμΈμ λλ€. μμΈμ λνλ―Όκ΅μ μλμ΄μ... | μμΈ, μμΈμ νκ΅μμ κ°μ₯ μΈκ΅¬κ° λ§μ λμ... |
3 | λ€μ μ§λ¬Έμ λ΅νμΈμ | μΈκ³΅μ§λ₯μ΄λ 무μμΈκ°μ? | μΈκ³΅μ§λ₯(AI)μ μΈκ°μ νμ΅λ₯λ ₯κ³Ό... | μΈκ³΅μ§λ₯μ μ»΄ν¨ν°κ° μΈκ°κ³Ό λΉμ·ν νΉμ±μ... |
4 | λ€μ μ§λ¬Έμ λ΅νμΈμ | νκ΅μ λνμ μΈ μμμ? | κΉμΉ, λΆκ³ κΈ°, λΉλΉλ°₯ λ± | νκ΅μ λνμ μΈ μμμ κΉμΉμ΄λ€... |
5 | λ€μ μ§λ¬Έμ λ΅νμΈμ | λ¨Έμ λ¬λκ³Ό λ₯λ¬λμ μ°¨μ΄μ μ? | λ¨Έμ λ¬λμ λ°μ΄ν°λ‘λΆν° ν¨ν΄μ... | λ¨Έμ λ¬λκ³Ό λ₯λ¬λμ μ°¨μ΄μ μ... |
6 | λ€μ μ§λ¬Έμ λ΅νμΈμ | νκ΅μ 4κ³μ μ? | λ΄, μ¬λ¦, κ°μ, κ²¨μΈ | νκ΅μ 4κ³μ μ΄ μλλΌ 4κ°μ§ μκΈ°μ... |
7 | λ€μ μ§λ¬Έμ λ΅νμΈμ | μμ°μ΄μ²λ¦¬λ 무μμΈκ°μ? | NLPλ μΈκ°μ μΈμ΄λ₯Ό μ»΄ν¨ν°κ°... | μμ°μ΄μ²λ¦¬λ μΈκ°μ μΈμ΄λ₯Ό μ»΄ν¨ν°μκ²... |
8 | λ€μ μ§λ¬Έμ λ΅νμΈμ | νκ΅μ μ ν΅λ¬Ένλ? | ν볡, νκΈ, νκ·ΉκΈ° λ± | νκ΅μ μ ν΅λ¬Ένλ κ³ λ €μλλΆν°... |
9 | λ€μ μ§λ¬Έμ λ΅νμΈμ | λΉ λ°μ΄ν°λ 무μμΈκ°μ? | λΉ λ°μ΄ν°λ κΈ°μ‘΄μ λ°μ΄ν°λ² μ΄μ€... | λΉ λ°μ΄ν°λ λ§μ λ°μ΄ν°λ₯Ό μμ§, λΆμ... |
10 | λ€μ μ§λ¬Έμ λ΅νμΈμ | νκ΅μ κ²½μ νν©μ? | νκ΅μ μΈκ³ 10μκΆμ κ²½μ λκ΅... | νκ΅μ κ²½μ νν©μ λ¬Όκ°μμΉλ₯ μ΄ 10%... |
π μ€λ(2025-07-04) ν μ€νΈ κ²°κ³Ό μμ½
- λͺ¨λΈ: meta-llama/Llama-3.2-1B
- μ΄λν°: outputs/final_model
- ν μ€νΈ λ°μ΄ν°: data/ko_samples.jsonl (μ°μ£Ό/μ²λ¬Έ QA)
- ν μ€νΈ μν μ: 10
- νκ° μ‘°κ±΄: max_new_tokens=128, temperature=0.7
- μμ€ν : Windows-11-10.0.26100-SP0, Intel64 Family 6 Model 183 Stepping 1, Python 3.13.5
# | μ§λ¬Έ | μ λ ₯ | μμ λ΅λ³ | μμ± λ΅λ³(μμ½) |
---|---|---|---|---|
1 | λ€μ μ§λ¬Έμ λ΅νμΈμ | μ°μ£Ό νμ¬μ μ£Όμ λͺ©μ μ? | μ°μ£Όμ κΈ°μ, μλͺ 체 νꡬ, μμΒ·κΈ°μ κ°λ° | μ°μ£Ό νμ¬μ μ£Όμ λͺ©μ μ νμ¬νλ κ²... |
2 | λ€μ μ§λ¬Έμ λ΅νμΈμ | νμκ³μ μ€μ¬μ? | νμ | νμκ³μ μ€μ¬μ μ§κ΅¬μ κ°κΉμ΄ λΆλΆ... |
3 | λ€μ μ§λ¬Έμ λ΅νμΈμ | λΈλνμ΄λ 무μμΈκ°μ? | κ°λ ₯ν μ€λ ₯, λΉλ λΉ μ Έλμ¬ μ μμ | λΈλνμ κ±°λν κ»μ§μ κ°μ§κ³ μλ€... |
4 | λ€μ μ§λ¬Έμ λ΅νμΈμ | νμκ³μ μ£Όμ νμ±μ? | μμ±, κΈμ±, μ§κ΅¬, νμ±, λͺ©μ±, ν μ±, μ²μμ±, ν΄μμ± | νμ, λͺ©μ±, μ§κ΅¬, λ§μ°λ‘νμ°λ£¨μ€, ν μν λ§μ€... |
5 | λ€μ μ§λ¬Έμ λ΅νμΈμ | μ°μ£Ό λ§μκ²½κ³Ό μ§μ λ§μκ²½μ μ°¨μ΄μ μ? | λκΈ° κ°μ, νμ₯ κ΄μΈ‘, μ μ§λ³΄μ | μ°μ£Ό λ§μκ²½μ μ§κ΅¬μμ κ΄μΈ‘ν μ μλ λ²μλ₯Ό λ λκ²... |
6 | λ€μ μ§λ¬Έμ λ΅νμΈμ | κ³μ μ λ³νκ° μλ νμ±μ? | μμ±, κΈμ± | κ³μ μ λ³νκ° μλ νμ±μ λ³μ΄ λ³νμ§ μκΈ° λλ¬Έμ... |
7 | λ€μ μ§λ¬Έμ λ΅νμΈμ | μ°μ£Όμμ λ°μ΄ν° λΆμμ μ΄λ»κ² μ΄λ£¨μ΄μ§λμ? | λ§μκ²½Β·νμ¬μ λ°μ΄ν°, AI νμ© | μ°μ£Όμμ λ°μ΄ν° λΆμμ ν΄λ³Έ μ¬λλ€κ³Όμ λν... |
8 | λ€μ μ§λ¬Έμ λ΅νμΈμ | μ°μ£Ό νμ¬μ λνμ μΈ μ±κ³Όλ? | μν΄λ‘ λ¬ μ°©λ₯, νμ± λ‘λ², νλΈΒ·μ μμ€μΉ λ§μκ²½ | μ°μ£Ό νμ¬μ λνμ μΈ μ±κ³Όλ κ±°λν ννΈμ΄ λ°κ²¬... |
9 | λ€μ μ§λ¬Έμ λ΅νμΈμ | μ°μ£Όμμ λΉ λ°μ΄ν°μ μν μ? | μ²μ²΄ νΉμ±, μ°μ£Ό ꡬ쑰, μνλ¬Όμ§ μ°κ΅¬ | λΉ λ°μ΄ν°λ λ°μ΄ν° λΆμ, λ°μ΄ν°λ² μ΄μ€, λ°μ΄ν° μ¨μ΄νμ°μ€... |
10 | λ€μ μ§λ¬Έμ λ΅νμΈμ | κ΅μ μ°μ£Ό μ κ±°μ₯μ μν μ? | κ³Όν μ€ν, κΈ°μ κ°λ°, κ΅μ νλ ₯ | μ°μ£Ό μ κ±°μ₯μ μν μ μ§κ΅¬μ λκΈ°μ κ°μ μ¨λ, κΈ°μ¨, κ°μ... |
π οΈ κΈ°μ μ€ν
- Transformers: Hugging Face Transformers λΌμ΄λΈλ¬λ¦¬
- PEFT: Parameter-Efficient Fine-Tuning
- PyTorch: λ₯λ¬λ νλ μμν¬
- Datasets: λ°μ΄ν° μ²λ¦¬
π μ¬μ© μμ
from transformers import AutoTokenizer, AutoModelForCausalLM
from peft import PeftModel
# λͺ¨λΈ λ‘λ
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3.2-1B")
base_model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3.2-1B")
model = PeftModel.from_pretrained(base_model, "./outputs/final_model")
# μΆλ‘
prompt = "### μ§λ¬Έ: λ€μ μ§λ¬Έμ λ΅νμΈμ\nμ
λ ₯: νκ΅μ μλλ?\n### λ΅λ³:"
inputs = tokenizer(prompt, return_tensors="pt")
outputs = model.generate(**inputs, max_new_tokens=128)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(response)
π€ κΈ°μ¬νκΈ°
- μ΄ μ μ₯μλ₯Ό ν¬ν¬ν©λλ€
- μλ‘μ΄ κΈ°λ₯ λΈλμΉλ₯Ό μμ±ν©λλ€
- λ³κ²½μ¬νμ 컀λ°ν©λλ€
- λΈλμΉμ νΈμν©λλ€
- Pull Requestλ₯Ό μμ±ν©λλ€
π λΌμ΄μ μ€
μ΄ νλ‘μ νΈλ MIT λΌμ΄μ μ€ νμ λ°°ν¬λ©λλ€. Llama 3.2 λͺ¨λΈ μ¬μ©μ μν΄μλ Metaμ λΌμ΄μ μ€ λμκ° νμν©λλ€.
π κ°μ¬μ λ§
- Meta AIμ Llama 3.2 λͺ¨λΈ
- Hugging Face νμ Transformers λΌμ΄λΈλ¬λ¦¬
- Microsoftμ PEFT λΌμ΄λΈλ¬λ¦¬
π λ¬Έμ
νλ‘μ νΈμ λν λ¬Έμμ¬νμ΄ μμΌμλ©΄ μ΄μλ₯Ό μμ±ν΄μ£ΌμΈμ.
Inference Providers
NEW
This model isn't deployed by any Inference Provider.
π
Ask for provider support
Model tree for netgamer/korean-llm-finetune
Base model
meta-llama/Llama-3.2-1B