Views
No views yet
1!pip uninstall unsloth -y
2!pip install --upgrade --no-cache-dir "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"
3!pip install --upgrade torch
4!pip install --upgrade xformers
5!pip install ipywidgets --upgrade
6import torch
7if torch.cuda.get_device_capability()[0] >= 8:
8 !pip install --no-deps packaging ninja einops "flash-attn>=2.6.3"
9
10HF_TOKEN = "<my_token>"
11
12from unsloth import FastLanguageModel
13import torch
14max_seq_length = 512
15dtype = None
16load_in_4bit = True
17
18model_id = "llm-jp/llm-jp-3-13b"
19new_model_id = "llm-jp-3-13b-it"
20model, tokenizer = FastLanguageModel.from_pretrained(
21 model_name=model_id,
22 dtype=dtype,
23 load_in_4bit=load_in_4bit,
24 trust_remote_code=True,
25)
26
27model = FastLanguageModel.get_peft_model(
28 model,
29 r = 32,
30 target_modules = ["q_proj", "k_proj", "v_proj", "o_proj",
31 "gate_proj", "up_proj", "down_proj",],
32 lora_alpha = 32,
33 lora_dropout = 0.05,
34 bias = "none",
35 use_gradient_checkpointing = "unsloth",
36 random_state = 3407,
37 use_rslora = False,
38 loftq_config = None,
39 max_seq_length = max_seq_length,
40)
41
42from datasets import load_dataset
43dataset = load_dataset("json", data_files="/content/ichikara-instruction-003-001-1.json")
44
45prompt = """### 指示
46{}
47### 回答
48{}"""
49
50EOS_TOKEN = tokenizer.eos_token
51def formatting_prompts_func(examples):
52 input = examples["text"]
53 output = examples["output"]
54 text = prompt.format(input, output) + EOS_TOKEN
55 return { "formatted_text" : text, }
56pass
57dataset = dataset.map(
58 formatting_prompts_func,
59 num_proc= 4,
60)
61
62from trl import SFTTrainer
63from transformers import TrainingArguments
64from unsloth import is_bfloat16_supported
65
66trainer = SFTTrainer(
67 model = model,
68 tokenizer = tokenizer,
69 train_dataset=dataset["train"],
70 max_seq_length = max_seq_length,
71 dataset_text_field="formatted_text",
72 packing = False,
73 args = TrainingArguments(
74 per_device_train_batch_size = 2,
75 gradient_accumulation_steps = 4,
76 num_train_epochs = 1,
77 logging_steps = 10,
78 warmup_steps = 10,
79 save_steps=100,
80 save_total_limit=2,
81 max_steps=-1,
82 learning_rate = 2e-4,
83 fp16 = not is_bfloat16_supported(),
84 bf16 = is_bfloat16_supported(),
85 group_by_length=True,
86 seed = 3407,
87 output_dir = "outputs",
88 report_to = "none",
89 ),
90)
91
92gpu_stats = torch.cuda.get_device_properties(0)
93start_gpu_memory = round(torch.cuda.max_memory_reserved() / 1024 / 1024 / 1024, 3)
94max_memory = round(gpu_stats.total_memory / 1024 / 1024 / 1024, 3)
95print(f"GPU = {gpu_stats.name}. Max memory = {max_memory} GB.")
96print(f"{start_gpu_memory} GB of memory reserved.")
97
98trainer_stats = trainer.train
99
100import json
101datasets = []
102with open("/content//elyza-tasks-100-TV_0.jsonl", "r") as f:
103 item = ""
104 for line in f:
105 line = line.strip()
106 item += line
107 if item.endswith("}"):
108 datasets.append(json.loads(item))
109 item = ""
110
111from tqdm import tqdm
112
113FastLanguageModel.for_inference(model)
114
115results = []
116for dt in tqdm(datasets):
117 input = dt["input"]
118
119 prompt = f"""### 指示\n{input}\n### 回答\n"""
120
121 inputs = tokenizer([prompt], return_tensors = "pt").to(model.device)
122
123 outputs = model.generate(**inputs, max_new_tokens = 512, use_cache = True, do_sample=False, repetition_penalty=1.2)
124 prediction = tokenizer.decode(outputs[0], skip_special_tokens=True).split('\n### 回答')[-1]
125
126 results.append({"task_id": dt["task_id"], "input": input, "output": prediction})
127
128with open(f"{new_model_id}_output.jsonl", 'w', encoding='utf-8') as f:
129 for result in results:
130 json.dump(result, f, ensure_ascii=False)
131 f.write('\n')