tats-toyoda commited on
Commit
82d7f47
·
verified ·
1 Parent(s): 31872bc

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +8 -82
README.md CHANGED
@@ -45,18 +45,17 @@ This llama model was trained 2x faster with [Unsloth](https://github.com/unsloth
45
  2. 必要なライブラリを読み込む。
46
  ```
47
  import json
48
- from datasets import load_dataset
49
 
50
  import torch
51
  from peft import PeftModel
52
  from tqdm import tqdm
53
- from transformers import TrainingArguments
54
- from trl import SFTTrainer
55
  from unsloth import FastLanguageModel
56
  ```
57
- 3. ベースのモデル (`llm-jp/llm-jp-3-13b`) を指定する。
58
  ```
59
  model_id = "llm-jp/llm-jp-3-13b"
 
60
  ```
61
  4. [Hugging Face](https://huggingface.co/settings/tokens) より Write 権限が付与された Access Token を取得し、下記の `HF_TOKEN` で使用する。
62
  ```
@@ -73,84 +72,11 @@ model, tokenizer = FastLanguageModel.from_pretrained(
73
  trust_remote_code=True,
74
  )
75
  ```
76
- 6. 教師ありファインチューニング (SFT) 用のモデルを作成する。
77
- ```
78
- model = FastLanguageModel.get_peft_model(
79
- model,
80
- r=32,
81
- target_modules=[
82
- "q_proj", "k_proj", "v_proj", "o_proj",
83
- "gate_proj", "up_proj", "down_proj",
84
- ],
85
- lora_alpha=32,
86
- lora_dropout=0.05,
87
- bias="none",
88
- use_gradient_checkpointing="unsloth",
89
- random_state=3407,
90
- use_rslora=False,
91
- loftq_config=None,
92
- max_seq_length=max_seq_length,
93
- )
94
- ```
95
- 7. 学習に用いるデータセットを指定する。ここでは Ichikara Instruction の `ichikara-instruction-003-001-1.json` を使用する。
96
- - [LLMのための日本語インストラクションデータ 公開ページ](https://x.gd/Tv24r) より必要事項を記入の上でダウンロードすること。
97
- - 事前に Google Colab 上に `ichikara-instruction-003-001-1.json` をアップロードすること。
98
- ```
99
- dataset = load_dataset("json", data_files="./ichikara-instruction-003-001-1.json")
100
- ```
101
- 8. 学習時のプロンプトフォーマットを定義する。
102
- ```
103
- prompt = """### 指示
104
- {}
105
- ### 回答
106
- {}"""
107
- ```
108
- 9. 学習データをフォーマットを適用し、プロンプトフォーマットに合わせる。
109
  ```
110
- EOS_TOKEN = tokenizer.eos_token
111
-
112
- def formatting_prompts_func(examples):
113
- input = examples["text"]
114
- output = examples["output"]
115
- text = prompt.format(input, output) + EOS_TOKEN
116
- return { "formatted_text" : text, }
117
-
118
- dataset = dataset.map(
119
- formatting_prompts_func,
120
- num_proc= 4,
121
- )
122
- ```
123
- 10. `SFTTrainer` を利用して教師ありファインチューニング (SFT) を実行する。
124
- ```
125
- trainer = SFTTrainer(
126
- model = model,
127
- tokenizer = tokenizer,
128
- train_dataset=dataset["train"],
129
- max_seq_length = max_seq_length,
130
- dataset_text_field="formatted_text",
131
- packing = False,
132
- args = TrainingArguments(
133
- per_device_train_batch_size = 2,
134
- gradient_accumulation_steps = 4,
135
- num_train_epochs = 1,
136
- logging_steps = 10,
137
- warmup_steps = 10,
138
- save_steps=100,
139
- save_total_limit=2,
140
- max_steps=-1,
141
- learning_rate = 2e-4,
142
- fp16 = not is_bfloat16_supported(),
143
- bf16 = is_bfloat16_supported(),
144
- group_by_length=True,
145
- seed = 3407,
146
- output_dir = "outputs",
147
- report_to = "none",
148
- ),
149
- )
150
-
151
- trainer_stats = trainer.train()
152
  ```
153
- 11. タスクとなるデータ `ELYZA-tasks-100-TV` を読み込む。
154
  - 事前に Google Colab 上に `elyza-tasks-100-TV_0.jsonl` をアップロードすること。
155
  ```
156
  datasets = []
@@ -163,7 +89,7 @@ with open("./elyza-tasks-100-TV_0.jsonl", "r") as f:
163
  datasets.append(json.loads(item))
164
  item = ""
165
  ```
166
- 12. 学習済みモデルを用いてタスクを推論する。
167
  ```
168
  FastLanguageModel.for_inference(model)
169
  results = []
@@ -175,7 +101,7 @@ for dt in tqdm(datasets):
175
  prediction = tokenizer.decode(outputs[0], skip_special_tokens=True).split('\n### 回答')[-1]
176
  results.append({"task_id": dt["task_id"], "input": input, "output": prediction})
177
  ```
178
- 13. 結果を jsonl 形式で保存する。
179
  ```
180
  json_file_id = re.sub(".*/", "", adapter_id)
181
  with open(f"/content/{json_file_id}_output.jsonl", 'w', encoding='utf-8') as f:
 
45
  2. 必要なライブラリを読み込む。
46
  ```
47
  import json
48
+ import re
49
 
50
  import torch
51
  from peft import PeftModel
52
  from tqdm import tqdm
 
 
53
  from unsloth import FastLanguageModel
54
  ```
55
+ 3. ベースのモデル (`llm-jp/llm-jp-3-13b`) と学習した LoRA のアダプタ (Hugging Face の ID) をそれぞれ指定する。
56
  ```
57
  model_id = "llm-jp/llm-jp-3-13b"
58
+ adapter_id = ""
59
  ```
60
  4. [Hugging Face](https://huggingface.co/settings/tokens) より Write 権限が付与された Access Token を取得し、下記の `HF_TOKEN` で使用する。
61
  ```
 
72
  trust_remote_code=True,
73
  )
74
  ```
75
+ 6. 元のモデル `model` に LoRA のアダプタを統合する。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
76
  ```
77
+ model = PeftModel.from_pretrained(model, adapter_id, token = HF_TOKEN))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78
  ```
79
+ 7. タスクとなるデータ `ELYZA-tasks-100-TV` を読み込む。
80
  - 事前に Google Colab 上に `elyza-tasks-100-TV_0.jsonl` をアップロードすること。
81
  ```
82
  datasets = []
 
89
  datasets.append(json.loads(item))
90
  item = ""
91
  ```
92
+ 8. 学習済みモデルを用いてタスクを推論する。
93
  ```
94
  FastLanguageModel.for_inference(model)
95
  results = []
 
101
  prediction = tokenizer.decode(outputs[0], skip_special_tokens=True).split('\n### 回答')[-1]
102
  results.append({"task_id": dt["task_id"], "input": input, "output": prediction})
103
  ```
104
+ 9. 結果を jsonl 形式で保存する。
105
  ```
106
  json_file_id = re.sub(".*/", "", adapter_id)
107
  with open(f"/content/{json_file_id}_output.jsonl", 'w', encoding='utf-8') as f: