Qwen2.5-3B-MATH-GRPO-KOR
๋ชจ๋ธ ๊ฐ์
ํ๊ตญ์ด ์ํ ์ถ๋ก ์ ํนํ๋ Qwen2.5-3B ๋ชจ๋ธ์ ๋๋ค. GRPO(Group Relative Policy Optimization)๋ฅผ ์ฌ์ฉํ์ฌ ํ๊ตญ์ด ์ํ ๋ฌธ์ ํด๊ฒฐ ๋ฅ๋ ฅ์ ํฅ์์์ผฐ์ต๋๋ค.
์ฃผ์ ํน์ง
- ๋ฒ ์ด์ค ๋ชจ๋ธ: Qwen/Qwen2.5-3B-Instruct
- ํ์ต ๋ฐฉ๋ฒ: GRPO (Group Relative Policy Optimization)
- ๋ฐ์ดํฐ์ : ChuGyouk/AI-MO-NuminaMath-CoT-Ko (5,000 ์ํ)
- ์ธ์ด: ํ๊ตญ์ด
- ํนํ ๋ถ์ผ: ์ํ ๋ฌธ์ ํด๊ฒฐ ๋ฐ ์ถ๋ก
์ฌ์ฉ๋ฒ
from unsloth import FastLanguageModel
# ๋ชจ๋ธ ๋ก๋
model, tokenizer = FastLanguageModel.from_pretrained(
model_name="byh711/Qwen2.5-3B-MATH-GRPO-KOR",
max_seq_length=1024,
load_in_4bit=True,
)
# ์ถ๋ก ๋ชจ๋
FastLanguageModel.for_inference(model)
# ํ๋กฌํํธ ์ค์
system_prompt = '''๋ค์ ํ์์ผ๋ก ์ ํํ ๋ต๋ณํด์ฃผ์ธ์:
<reasoning>
๋จ๊ณ๋ณ ํ์ด ๊ณผ์ ์ ์์ธํ ์ค๋ช
</reasoning>
<answer>
์ต์ข
๋ต์
</answer>'''
# ์ํ ๋ฌธ์ ์
๋ ฅ
question = "์ด๋ค ์์ 8๋ฐฐ๊ฐ 120๋ณด๋ค ์์ ๋, ๊ทธ ์์ ์ต๋ ์ ์๋ฅผ ๊ตฌํ์ธ์."
messages = [
{"role": "system", "content": system_prompt},
{"role": "user", "content": question}
]
# ํ ํฐํ ๋ฐ ์์ฑ
inputs = tokenizer.apply_chat_template(messages, tokenize=True, add_generation_prompt=True, return_tensors="pt")
outputs = model.generate(input_ids=inputs, max_new_tokens=200, temperature=0.1)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(response)
์ถ๋ ฅ ํ์
๋ชจ๋ธ์ ๋ค์๊ณผ ๊ฐ์ XML ํ์์ผ๋ก ๋ต๋ณ์ ์์ฑํฉ๋๋ค:
<reasoning>
1. ์ฃผ์ด์ง ์กฐ๊ฑด: ์ด๋ค ์๋ฅผ x๋ผ๊ณ ํ๋ฉด, 8x < 120
2. ๋ถ๋ฑ์ ํ์ด: x < 120/8 = 15
3. x๋ 15๋ณด๋ค ์์์ผ ํ๋ฏ๋ก, ์ต๋ ์ ์๋ 14
</reasoning>
<answer>
14
</answer>
ํ์ต ์ธ๋ถ์ฌํญ
- ํ์ต ๋ฐ์ดํฐ: 5,000๊ฐ ํ๊ตญ์ด ์ํ ๋ฌธ์
- ์ํฌํฌ: 2
- ๋ฐฐ์น ํฌ๊ธฐ: 4 (ํจ๊ณผ์ )
- ํ์ต๋ฅ : 5e-6
- ์ตํฐ๋ง์ด์ : AdamW 8bit
- LoRA Rank: 64
๋ผ์ด์ ์ค
Apache 2.0