McKay Math 9B

๋ชจ๋ธ ์š”์•ฝ

Qwen3.5-9B์— ์ˆ˜ํ•™ ์„œ์ˆ ํ˜• ๋‹ต์•ˆ์˜ ๊ธฐ์ค€๋ณ„ ์ง„๋‹จ๊ณผ ํ•œ๊ตญ์–ด ํ”ผ๋“œ๋ฐฑ์„ ์ถ”๊ฐ€ ํ•™์Šตํ•œ LoRA ์–ด๋Œ‘ํ„ฐ์ž…๋‹ˆ๋‹ค. ์ด ์ €์žฅ์†Œ๋Š” ์›๋ณธ Qwen ์ „์ฒด ๊ฐ€์ค‘์น˜๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‹คํ–‰ํ•  ๋•Œ ๊ธฐ๋ฐ˜ ๋ชจ๋ธ๊ณผ ์–ด๋Œ‘ํ„ฐ๋ฅผ ํ•จ๊ป˜ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.

์˜ˆ๋น„ ๋ฒค์น˜๋งˆํฌ

ํ•™์Šต ๊ณก์„ ๊ณผ ์„ฑ๋Šฅ ๋น„๊ต ๋ฐ ํ˜ผ๋™ ํ–‰๋ ฌ

์ƒˆ ํ‘œ๋ณธ์˜ ์‹œํ—˜์šฉ 300๊ฑด์„ ๋‘ ๋ชจ๋ธ์— ๋™์ผํ•˜๊ฒŒ ์ž…๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค. ์„œ๋กœ ๋‹ค๋ฅธ ๋ฌธํ•ญ์€ 50๊ฐœ์ด๋ฉฐ ๋ฌธํ•ญ๋งˆ๋‹ค ๋‹ต์•ˆ 6์ข…์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ ํ•™์ƒ ์ž๋ฃŒ๊ฐ€ ์•„๋‹Œ ํ•ฉ์„ฑ ์ž๋ฃŒ์ž…๋‹ˆ๋‹ค. ๊ต์‚ฌ ๊ฒ€ํ† ๋Š” ์™„๋ฃŒ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ƒˆ ์ƒํ™ฉ๊ณผ ์‹ค์ œ ํ•™์ƒ ๋ฌธ์ฒด๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ์ž‘์„ฑํ•œ ๋ฒค์น˜๋งˆํฌ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. RuBio์˜ ์ƒ๋ช…๊ณผํ•™ ํ‰๊ฐ€ ์ ์ˆ˜์™€ ์ด ์ˆ˜ํ•™ ํ‰๊ฐ€ ์ ์ˆ˜๋Š” ์ง์ ‘ ๋น„๊ตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ง€ํ‘œ ์›๋ณธ Qwen 9B ์ˆ˜ํ•™ ์–ด๋Œ‘ํ„ฐ
๊ธฐ์ค€๋ณ„ ํŒ์ • ์ •ํ™•๋„ 86.67% 100.00%
๋‹ต์•ˆ ์ƒํƒœ ์ •ํ™•๋„ 72.00% 100.00%
๋‹ต์•ˆ ์ƒํƒœ macro F1 67.51% 100.00%
์˜ค๊ฐœ๋… ID ์ผ์น˜์œจ 100.00% 100.00%
JSON ๊ตฌ๋ฌธ ์œ ํšจ์œจ 100.00% 100.00%
์ถœ๋ ฅ ํ˜•์‹๊ณผ ๋‹ต์•ˆ ์ธ์šฉ ์œ ํšจ์œจ 81.67% 100.00%
์›๋ณธ ํŒ์ • ์ •์ฑ… ์ผ๊ด€์„ฑ 79.00% 100.00%
๋‹ค์Œ ํ–‰๋™ ์ผ์น˜์œจ 83.00% 100.00%
ํ›„์ฒ˜๋ฆฌ ํ›„ ๋‹ต์•ˆ ์ƒํƒœ ์ •ํ™•๋„ 65.33% 100.00%
์ •๋‹ต ๋‹ต์•ˆ ์˜คํŒ์œจ 16.00% 0.00%

์–ด๋Œ‘ํ„ฐ์˜ ๊ธฐ์ค€๋ณ„ ํŒ์ • ์ •ํ™•๋„์— ๋Œ€ํ•œ ๋ฌธํ•ญ ๊ตฐ์ง‘ bootstrap 95% ์‹ ๋ขฐ๊ตฌ๊ฐ„์€ 100.00% ~ 100.00%์ž…๋‹ˆ๋‹ค. ํ•™์Šต ํ›„์™€ ํ•™์Šต ์ „์˜ ๊ธฐ์ค€๋ณ„ ์ •ํ™•๋„ ์ฐจ์ด๋Š” +13.33%p์ž…๋‹ˆ๋‹ค. ๋ฌธํ•ญ์„ ์Œ์œผ๋กœ ๋ฌถ์–ด ๊ณ„์‚ฐํ•œ ์ฐจ์ด์˜ 95% ์‹ ๋ขฐ๊ตฌ๊ฐ„์€ +11.67%p ~ +14.84%p์ž…๋‹ˆ๋‹ค. ๊ฐœ์„  ๋ฐฉํ–ฅ์˜ ์ฐจ์ด๊ฐ€ ๊ด€์ฐฐ๋์Šต๋‹ˆ๋‹ค. ์žฌํ‘œ์ง‘ ํšŸ์ˆ˜๋Š” 2000ํšŒ์ด๋ฉฐ ๋‚œ์ˆ˜ ์‹œ๋“œ๋Š” 20261103์ž…๋‹ˆ๋‹ค. ๊ฐ™์€ ๋ฌธํ•ญ์˜ ๋‹ต์•ˆ 6๊ฐœ๋Š” ๋…๋ฆฝ ํ•™์ƒ 6๋ช…์œผ๋กœ ์ทจ๊ธ‰ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

JSON ๊ตฌ๋ฌธ ์‹คํŒจ์™€ ํŒ์ • ๋ˆ„๋ฝ์€ ํ•ด๋‹น ํŒ์ •์˜ ์˜ค๋‹ต์œผ๋กœ ๊ณ„์‚ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์ค‘๋ณต๋œ ํ‰๊ฐ€ ๊ธฐ์ค€ ID๋Š” ํ•ด๋‹น ๊ธฐ์ค€์˜ ๋ฌดํšจ ์˜ˆ์ธก์œผ๋กœ ์ฒ˜๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. macro F1์€ ๋‹ต์•ˆ ์ƒํƒœ 6์ข…์— ๋™์ผํ•œ ๊ฐ€์ค‘์น˜๋ฅผ ๋ถ€์—ฌํ–ˆ์Šต๋‹ˆ๋‹ค. ํ›„์ฒ˜๋ฆฌ ํ›„ ์ •ํ™•๋„๋Š” ์›๋ณธ ์ถœ๋ ฅ ์ ์ˆ˜์™€ ๊ตฌ๋ณ„ํ•ด ํ‘œ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ค๊ฐœ๋… ID ์ผ์น˜์œจ์˜ ๋ถ„๋ชจ๋Š” ์ •๋‹ต ๋ผ๋ฒจ์— ์˜ค๊ฐœ๋… ID๊ฐ€ ์žˆ๋Š” ๊ธฐ์ค€ 100๊ฐœ์ž…๋‹ˆ๋‹ค. ํ˜•์‹๊ณผ ์ธ์šฉ ์œ ํšจ์œจ์€ ํ”ผ๋“œ๋ฐฑ์˜ ๊ต์œก์  ํ’ˆ์งˆ์„ ํ‰๊ฐ€ํ•˜๋Š” ์ง€ํ‘œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ํžŒํŠธ์˜ ์ ์ ˆ์„ฑ๊ณผ ์ •๋‹ต ๋ˆ„์„ค ์—ฌ๋ถ€ ๋ฐ ์‹ค์ œ ์ˆ˜์—… ํšจ๊ณผ๋Š” ๋ณ„๋„์˜ ๊ต์‚ฌ ํ‰๊ฐ€๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋‹ต์•ˆ ์œ ํ˜•๋ณ„ ๊ฒฐ๊ณผ

๋‹ต์•ˆ ์œ ํ˜• ๊ฑด์ˆ˜ ์›๋ณธ ์ •๋‹ต๋ฅ  ์–ด๋Œ‘ํ„ฐ ์ •๋‹ต๋ฅ 
correct 50 84.00% 100.00%
partial 50 100.00% 100.00%
mixed 50 44.00% 100.00%
incorrect 50 100.00% 100.00%
no_attempt 50 100.00% 100.00%
unclear 50 4.00% 100.00%

๋‹ต์•ˆ ์ƒํƒœ ํ˜ผ๋™ ํ–‰๋ ฌ

์†๋„์™€ ๋ฉ”๋ชจ๋ฆฌ

์ง€ํ‘œ ์›๋ณธ Qwen 9B ์ˆ˜ํ•™ ์–ด๋Œ‘ํ„ฐ
์‘๋‹ต ์‹œ๊ฐ„ p50 ์ดˆ 11.476 9.203
์‘๋‹ต ์‹œ๊ฐ„ p95 ์ดˆ 13.740 10.733
์ถœ๋ ฅ ํ† ํฐ/์ดˆ 22.867 16.629
์ตœ๋Œ€ GPU ํ• ๋‹น ๋ฉ”๋ชจ๋ฆฌ GiB 17.822 17.933

๊ฐ ๋ชจ๋ธ์˜ ์ฒซ ์˜ˆ์—ด ํ˜ธ์ถœ์€ ์ง€์—ฐ ์ธก์ •์—์„œ ์ œ์™ธํ–ˆ์Šต๋‹ˆ๋‹ค. GPU ์—ฐ์‚ฐ ๋™๊ธฐํ™” ํ›„ ๊ฐœ๋ณ„ ์š”์ฒญ์˜ ์ƒ์„ฑ ์‹œ๊ฐ„์„ ์ธก์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ถœ๋ ฅ ํ† ํฐ/์ดˆ๋Š” ์ƒ์„ฑ ํ† ํฐ ์ˆ˜ ํ•ฉ๊ณ„๋ฅผ ์ƒ์„ฑ ์‹œ๊ฐ„ ํ•ฉ๊ณ„๋กœ ๋‚˜๋ˆˆ ๊ฐ’์ž…๋‹ˆ๋‹ค. GPU ํ• ๋‹น ๋ฉ”๋ชจ๋ฆฌ๋Š” PyTorch๊ฐ€ ์ธก์ •ํ•œ ๊ฐ’์ด๋ฉฐ nvidia-smi์˜ ์ „์ฒด ์ ์œ ๋Ÿ‰๊ณผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•™์Šต ์„ค์ •

ํ•ญ๋ชฉ ๊ธฐ๋ก๋œ ๊ฐ’
method bf16 LoRA
train_rows 2400
dev_rows 300
epochs 2
steps 300
max_seq_length 4096
batch_size 1
gradient_accumulation_steps 16
lora_rank 16
lora_alpha 32
lora_dropout 0
learning_rate 0.0001
seed 42
best_eval_loss 0.07964031398296356
teacher_approved 0

Gradient norm๊ณผ ํ•™์Šต๋ฅ 

ํ•™์Šต ๊ณก์„ ์€ ์‹ค์ œ events.jsonl์— ๊ธฐ๋ก๋œ ๊ฐ’๋งŒ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•™์Šต ๋กœ๊ทธ๊ฐ€ ์—†์œผ๋ฉด ํ•ด๋‹น ๊ณก์„ ์„ ํ‘œ์‹œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฒ€์ฆ ์†์‹ค์€ ์ฒดํฌํฌ์ธํŠธ ์„ ํƒ์šฉ์ด๋ฉฐ ์‹œํ—˜ ์ •๋‹ต๋ฅ ๊ณผ ๋‹ค๋ฅธ ์ง€ํ‘œ์ž…๋‹ˆ๋‹ค.

ํ‰๊ฐ€ ์กฐ๊ฑด๊ณผ ์žฌํ˜„ ์ •๋ณด

๊ธฐ๋ฐ˜ ๋ชจ๋ธ์€ Qwen/Qwen3.5-9B์ž…๋‹ˆ๋‹ค. ํ‰๊ฐ€ revision์€ c202236235762e1c871ad0ccb60c8ee5ba337b9a์ž…๋‹ˆ๋‹ค. ๋‘ ๋ชจ๋ธ์— ์ตœ์ข… ์–ด๋Œ‘ํ„ฐ ํด๋”์˜ ๊ฐ™์€ ํ† ํฌ๋‚˜์ด์ €์™€ ๊ฐ™์€ chat template์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ๋Š” ํ•™์Šต ๋‹น์‹œ์™€ ๋™์ผํ•˜๋ฉฐ ์›๋ฌธ์€ system_prompt.txt์— ์žˆ์Šต๋‹ˆ๋‹ค. user ์ž…๋ ฅ์€ ์ž๋ฃŒ JSONL์˜ user ๋ฉ”์‹œ์ง€๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. thinking๊ณผ ์ƒ˜ํ”Œ๋ง์€ ๋„๊ณ  ์ตœ๋Œ€ ์ƒˆ ํ† ํฐ ์ˆ˜๋ฅผ 768๋กœ ๊ณ ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. JSON ์Šคํ‚ค๋งˆ๋Š” ๊ฐ•์ œํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์„œ๋กœ ๊ฐ™์€ GPU์™€ ๊ฐ™์€ ํŒจํ‚ค์ง€ ๋ฒ„์ „์—์„œ ์ˆœ์„œ๋Œ€๋กœ ํ‰๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ‰๊ฐ€ ์‹คํ–‰ ์‹œ๊ฐ๊ณผ GPU ์ข…๋ฅ˜ ๋ฐ ํŒจํ‚ค์ง€ ๋ฒ„์ „์€ evaluation_provenance.json์— ๊ธฐ๋กํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•™์Šต ๋‹น์‹œ ๊ธฐ๋ฐ˜ ๋ชจ๋ธ revision์ด ๊ธฐ๋ก๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋‘ ํ‰๊ฐ€ ๋ชจ๋ธ์€ ๊ฐ™์€ revision์œผ๋กœ ๊ณ ์ •ํ–ˆ์ง€๋งŒ ํ•™์Šต ๋‹น์‹œ ๊ฐ€์ค‘์น˜์™€์˜ ๋™์ผ์„ฑ์€ ์ถ”๊ฐ€ ํ™•์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ž๋ฃŒ SHA256๊ณผ ํ•™์Šต ID ํ•ด์‹œ ๋ฐ ์–ด๋Œ‘ํ„ฐ ํŒŒ์ผ SHA256์€ ํ•จ๊ป˜ ๋ณด๊ด€ํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์˜ˆ์‹œ

์•„๋ž˜ ์ €์žฅ์†Œ ์ด๋ฆ„์€ ์‹ค์ œ ์—…๋กœ๋“œํ•œ ์ฃผ์†Œ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ์ž…๋ ฅ์€ question๊ณผ materials ๋ฐ rubric๊ณผ evidence ๋ฐ misconceptions์™€ reference_answer ๋ฐ history์™€ feedback_mode ๋ฐ reveal_requested์™€ student_answer๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

import json
from pathlib import Path
import torch
from huggingface_hub import hf_hub_download
from transformers import AutoTokenizer, Qwen3_5ForConditionalGeneration
from peft import PeftModel

adapter_id = 'McKay1123/McKay-Math-9B-a9ea928a-124f'
tokenizer = AutoTokenizer.from_pretrained(adapter_id)
base = Qwen3_5ForConditionalGeneration.from_pretrained(
    'Qwen/Qwen3.5-9B', revision='c202236235762e1c871ad0ccb60c8ee5ba337b9a', dtype=torch.bfloat16, device_map='auto'
)
model = PeftModel.from_pretrained(base, adapter_id).eval()
system_prompt = Path(hf_hub_download(adapter_id, 'system_prompt.txt')).read_text(encoding='utf-8')
payload = json.loads(Path(hf_hub_download(adapter_id, 'example_input.json')).read_text(encoding='utf-8'))
messages = [
    {'role': 'system', 'content': system_prompt},
    {'role': 'user', 'content': json.dumps(payload, ensure_ascii=False, separators=(',', ':'))}
]
prompt = tokenizer.apply_chat_template(
    messages, tokenize=False, add_generation_prompt=True, enable_thinking=False
)
inputs = tokenizer(prompt, return_tensors='pt', add_special_tokens=False).to(model.device)
with torch.inference_mode():
    output = model.generate(**inputs, max_new_tokens=768, do_sample=False)
print(tokenizer.decode(output[0, inputs.input_ids.shape[-1]:], skip_special_tokens=True))

ํ•œ๊ณ„์™€ ๊ณต๊ฐœ ๋ฒ”์œ„

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

Downloads last month
19
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for McKay1123/McKay-Math-9B-a9ea928a-124f

Finetuned
Qwen/Qwen3.5-9B
Adapter
(1,073)
this model