nvidia/Nemotron-Personas-Korea
Viewer β’ Updated β’ 1M β’ 27.4k β’ 489
How to use pieroot/TimeSorter-qwen3-lora with PEFT:
Task type is invalid.
Qwen3.5-4B κΈ°λ° LoRA μ΄λν° λͺ¨μ. μ¬μ©μκ° μ μΆν ν μΌ λͺ©λ‘μ κΈ΄κΈλΒ·μ€μλΒ·μμ‘΄μ±Β·μκ° μ μ½ 4μΆμΌλ‘ μ±μ ν΄ μ°μ μμλ₯Ό κ²°μ ν©λλ€.
μ€λ§νΈν°Β·PCμμ "μ€λ ν μΌ"μ μ λ ₯νλ©΄ AIκ° λ§₯λ½μ μ΄ν΄ν΄ μ€ν μμλ₯Ό μ μνλ κ°μΈ λΉμ μ½μ΄ λͺ¨λΈμ λλ€.
λ¨μ ν€μλ μ λ ¬μ΄ μλ, νλ₯΄μλ(μ§μ₯μΈΒ·νμΒ·λΆλͺ¨ λ±)μ 4κ°μ§ μΆμ κΈ°λ°μΌλ‘ κ° νμ€ν¬λ₯Ό 1β5μ μΌλ‘ μ±μ νκ³ κ·Έ κ·Όκ±°λ₯Ό ν¨κ» μ μν©λλ€.
μ
λ ₯: "μμ λ³΄κ³ μ λ§κ°(λ΄μΌ), ν νμ(μ€ν 2μ), μ μ¬ μ½μ, λ©μΌ λ΅μ₯ 3건"
μΆλ ₯:
1) μμ λ³΄κ³ μ λ§κ° [κΈ΄κΈ5Β·μ€μ5Β·μμ‘΄4Β·μκ°2] β λ΄μΌ λ§κ°, ν΅μ¬ μ
무
2) ν νμ(μ€ν 2μ) [κΈ΄κΈ4Β·μ€μ4Β·μμ‘΄3Β·μκ°4] β κ³ μ μκ°, νμ λΈλ‘νΉ
3) λ©μΌ λ΅μ₯ 3건 [κΈ΄κΈ4Β·μ€μ3Β·μμ‘΄2Β·μκ°1] β κΈ΄κΈνλ κ³ μ μκ° μμ
4) μ μ¬ μ½μ [κΈ΄κΈ2Β·μ€μ2Β·μμ‘΄1Β·μκ°3] β μ μ° μ‘°μ κ°λ₯
| ν΄λ | μ€ν€λ§ | νμ΅ νκ²½ | train_loss | acc@ep5 | JSON μΆλ ₯ |
|---|---|---|---|---|---|
sft_mac_v1/ |
v1 μμ ν μ€νΈ | Mac MPS | 1.295 | 76.5% | β |
sft_mac_v2/ |
v2 4μΆ JSON | Mac MPS | 0.641 | 90.0% | β |
sft_rtx12g_4b_v1/ |
v1 μμ ν μ€νΈ | RTX 12GB | β | β | β |
sft_rtx12g_4b_v2/ |
v2 4μΆ JSON | RTX 12GB | β | β | β |
sft_rtx12g_4b_v2_mlx/ |
v2 4μΆ JSON | RTX β MLX λ³ν | β | β | β |
dpo_rtx12g_4b/ |
v2 4μΆ JSON | RTX 12GB DPO | β | β | β |
κΆμ₯:
sft_mac_v2/(Mac μ¬ν κ°λ₯) λλsft_rtx12g_4b_v2/(RTX μ΅κ³ μ±λ₯)
{
"tasks": [
{"id": 1, "text": "μμ λ³΄κ³ μ λ§κ°"},
{"id": 2, "text": "ν νμ(μ€ν 2μ)"}
],
"priority_order": [1, 2],
"scores": [
{
"task_id": 1,
"urgency": 5,
"importance": 5,
"dependency": 4,
"time_constraint": 2,
"reason": "λ΄μΌ λ§κ°, κ³ κ°μ¬ ν΅μ¬ μ
무"
},
{
"task_id": 2,
"urgency": 4,
"importance": 4,
"dependency": 3,
"time_constraint": 4,
"reason": "μ€ν κ³ μ μκ°, νμ μμ
μ
λ ₯"
}
]
}
from peft import PeftModel
from transformers import AutoTokenizer, AutoModelForCausalLM
base_model = "Qwen/Qwen3.5-4B"
adapter_path = "pieroot/TimeSorter-qwen3-lora/sft_mac_v2" # λλ μνλ μ΄λν°
tokenizer = AutoTokenizer.from_pretrained(base_model)
model = AutoModelForCausalLM.from_pretrained(base_model, torch_dtype="auto")
model = PeftModel.from_pretrained(model, adapter_path)
system_prompt = """λΉμ μ νκ΅μ΄ μΌμ κ΄λ¦¬ μ λ¬Έ AIμ
λλ€.
μ¬μ©μκ° μ 곡ν ν μΌ λͺ©λ‘μ λΆμνμ¬ λ€μ 4κ°μ§ μΆμΌλ‘ κ° νμ€ν¬λ₯Ό 1-5μ μΌλ‘ νκ°νκ³ ,
μ°μ μμλ₯Ό JSON νμμΌλ‘ μΆλ ₯νμΈμ.
νκ° μΆ:
- urgency (κΈ΄κΈλ): μ¦κ°μ μΈ μ²λ¦¬ νμμ±
- importance (μ€μλ): λͺ©ν λ¬μ±μ λν κΈ°μ¬λ
- dependency (μμ‘΄μ±): λ€λ₯Έ νμ€ν¬ μ°¨λ¨ μ¬λΆ
- time_constraint (μκ° μ μ½): νΉμ μκ°/λ§κ° κ³ μ μ¬λΆ"""
user_input = "λ³΄κ³ μ λ§κ°(λ΄μΌ), ν νμ(μ€ν 2μ), λ©μΌ λ΅μ₯ 3건, μ μ¬ μ½μ"
messages = [
{"role": "system", "content": system_prompt},
{"role": "user", "content": f"νλ₯΄μλ: μ§μ₯μΈ\n\nν μΌ λͺ©λ‘:\n{user_input}"}
]
text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tokenizer(text, return_tensors="pt")
outputs = model.generate(**inputs, max_new_tokens=512, temperature=0.1)
print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True))
λλ CLIλ‘:
git clone https://github.com/jung-geun/TimeSorter
cd TimeSorter
make setup-mac # λλ setup-dgx
uv run python -m timesorter.infer \
--adapter pieroot/TimeSorter-qwen3-lora/sft_mac_v2 \
--schema-version v2 \
--persona "μ§μ₯μΈ" \
--prompt "λ³΄κ³ μ λ§κ°(λ΄μΌ), ν νμ(μ€ν 2μ), λ©μΌ λ΅μ₯ 3건"
| νλͺ© | κ° |
|---|---|
| λ² μ΄μ€ λͺ¨λΈ | Qwen/Qwen3.5-4B |
| μ΄λν° | LoRA (r=8, alpha=16, dropout=0.05) |
| νμ΅ λ°©μ | SFT (TRL SFTTrainer) β DPO |
| λ°μ΄ν°μ | scheduler_v2_combined (10,958μν μ€ 300 μν) |
| μν | 5 |
| νμ΅λ₯ | 2e-5, cosine decay |
| λ°°μΉ (eff) | 8 (bs=1 Γ grad_accum=8) |
| max_seq_length | 1024 |
| epoch | loss | token_accuracy |
|---|---|---|
| 0.13 | 1.541 | 66.5% |
| 1.00 | 0.993 | 77.6% |
| 1.59 | 0.585 | 87.0% |
| 2.00 | 0.534 | 88.1% |
| 3.00 | 0.427 | 89.7% |
| 5.00 | 0.415 | 90.0% |
Apache 2.0 (λ² μ΄μ€ λͺ¨λΈ Qwen3.5-4B λΌμ΄μ μ€ μ€μ)
@misc{timesorter2025,
author = {jung-geun},
title = {TimeSorter: Korean Task Priority Sorting via Qwen3.5-4B LoRA},
year = {2025},
publisher = {Hugging Face},
url = {https://huggingface.co/pieroot/TimeSorter-qwen3-lora}
}