Views
No views yet
kakaocorp/kanana-nano-2.1b-instruct 모델에 kuotient/gsm8k-ko 데이터셋으로 COT GRPO를 학습시킨 LoRA 어댑터입니다.1import torch
2from transformers import AutoModelForCausalLM, AutoTokenizer, TextStreamer
3from peft import PeftModel
4
5model_name = "kakaocorp/kanana-nano-2.1b-instruct"
6peft_model_id = "rycont/kanana-2.1b-lora-reasoning"
7
8base_model = AutoModelForCausalLM.from_pretrained(
9 model_name,
10 torch_dtype=torch.bfloat16,
11 trust_remote_code=True,
12)
13model = PeftModel.from_pretrained(base_model, peft_model_id).to("cuda")
14tokenizer = AutoTokenizer.from_pretrained(model_name)
15
16streamer = TextStreamer(tokenizer)
17
18SYSTEM_PROMPT = """
19You are a helpful AI assistant developed by Kakao. Respond in the following format:
20<reasoning>
21...
22</reasoning>
23<answer>
24...
25</answer>
26"""
27
28messages = [
29 {"role" : "system", "content" : SYSTEM_PROMPT},
30 {"role" : "user", "content" : f"철수가 한 변의 길이가 5km인 정사각형 모양의 공원에서 둘레를 따라 나무를 심으려고 해. 나무 사이 간격은 500m야. 한 나무를 심을 때 17번의 삽질이 필요한데, 근로기준법상 한 사람은 인생에서 31번의 삽질밖에 못해. 그렇다면 철수가 나무심기를 완료하기 위해서는 몇명의 인부를 추가로 고용해야 할까?"},
31 {"role" : "system", "content" : "<reason> 심호흡 하고, 차근차근 생각해보자. 일단, "},
32]
33
34input_ids = tokenizer.apply_chat_template(
35 messages,
36 tokenize=True,
37 continue_final_message=True,
38 return_tensors="pt"
39).to("cuda")
40
41_ = model.eval()
42
43# with model.disable_adapter():
44with torch.no_grad():
45 output = model.generate(
46 input_ids,
47 max_new_tokens=1024,
48 streamer=streamer,
49 tokenizer=tokenizer,
50 stop_strings="</answer>"
51 )
52
53print(tokenizer.decode(output[0]))