usui2024 commited on
Commit
b9af84d
·
verified ·
1 Parent(s): 033ed55

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +233 -192
README.md CHANGED
@@ -1,199 +1,240 @@
1
  ---
2
- library_name: transformers
3
- tags: []
 
 
 
 
 
 
 
 
4
  ---
5
 
6
  # Model Card for Model ID
 
7
 
8
  <!-- Provide a quick summary of what the model is/does. -->
9
 
10
-
11
-
12
- ## Model Details
13
-
14
- ### Model Description
15
-
16
- <!-- Provide a longer summary of what this model is. -->
17
-
18
- This is the model card of a 🤗 transformers model that has been pushed on the Hub. This model card has been automatically generated.
19
-
20
- - **Developed by:** [More Information Needed]
21
- - **Funded by [optional]:** [More Information Needed]
22
- - **Shared by [optional]:** [More Information Needed]
23
- - **Model type:** [More Information Needed]
24
- - **Language(s) (NLP):** [More Information Needed]
25
- - **License:** [More Information Needed]
26
- - **Finetuned from model [optional]:** [More Information Needed]
27
-
28
- ### Model Sources [optional]
29
-
30
- <!-- Provide the basic links for the model. -->
31
-
32
- - **Repository:** [More Information Needed]
33
- - **Paper [optional]:** [More Information Needed]
34
- - **Demo [optional]:** [More Information Needed]
35
-
36
- ## Uses
37
-
38
- <!-- Address questions around how the model is intended to be used, including the foreseeable users of the model and those affected by the model. -->
39
-
40
- ### Direct Use
41
-
42
- <!-- This section is for the model use without fine-tuning or plugging into a larger ecosystem/app. -->
43
-
44
- [More Information Needed]
45
-
46
- ### Downstream Use [optional]
47
-
48
- <!-- This section is for the model use when fine-tuned for a task, or when plugged into a larger ecosystem/app -->
49
-
50
- [More Information Needed]
51
-
52
- ### Out-of-Scope Use
53
-
54
- <!-- This section addresses misuse, malicious use, and uses that the model will not work well for. -->
55
-
56
- [More Information Needed]
57
-
58
- ## Bias, Risks, and Limitations
59
-
60
- <!-- This section is meant to convey both technical and sociotechnical limitations. -->
61
-
62
- [More Information Needed]
63
-
64
- ### Recommendations
65
-
66
- <!-- This section is meant to convey recommendations with respect to the bias, risk, and technical limitations. -->
67
-
68
- Users (both direct and downstream) should be made aware of the risks, biases and limitations of the model. More information needed for further recommendations.
69
-
70
- ## How to Get Started with the Model
71
-
72
- Use the code below to get started with the model.
73
-
74
- [More Information Needed]
75
-
76
- ## Training Details
77
-
78
- ### Training Data
79
-
80
- <!-- This should link to a Dataset Card, perhaps with a short stub of information on what the training data is all about as well as documentation related to data pre-processing or additional filtering. -->
81
-
82
- [More Information Needed]
83
-
84
- ### Training Procedure
85
-
86
- <!-- This relates heavily to the Technical Specifications. Content here should link to that section when it is relevant to the training procedure. -->
87
-
88
- #### Preprocessing [optional]
89
-
90
- [More Information Needed]
91
-
92
-
93
- #### Training Hyperparameters
94
-
95
- - **Training regime:** [More Information Needed] <!--fp32, fp16 mixed precision, bf16 mixed precision, bf16 non-mixed precision, fp16 non-mixed precision, fp8 mixed precision -->
96
-
97
- #### Speeds, Sizes, Times [optional]
98
-
99
- <!-- This section provides information about throughput, start/end time, checkpoint size if relevant, etc. -->
100
-
101
- [More Information Needed]
102
-
103
- ## Evaluation
104
-
105
- <!-- This section describes the evaluation protocols and provides the results. -->
106
-
107
- ### Testing Data, Factors & Metrics
108
-
109
- #### Testing Data
110
-
111
- <!-- This should link to a Dataset Card if possible. -->
112
-
113
- [More Information Needed]
114
-
115
- #### Factors
116
-
117
- <!-- These are the things the evaluation is disaggregating by, e.g., subpopulations or domains. -->
118
-
119
- [More Information Needed]
120
-
121
- #### Metrics
122
-
123
- <!-- These are the evaluation metrics being used, ideally with a description of why. -->
124
-
125
- [More Information Needed]
126
-
127
- ### Results
128
-
129
- [More Information Needed]
130
-
131
- #### Summary
132
-
133
-
134
-
135
- ## Model Examination [optional]
136
-
137
- <!-- Relevant interpretability work for the model goes here -->
138
-
139
- [More Information Needed]
140
-
141
- ## Environmental Impact
142
-
143
- <!-- Total emissions (in grams of CO2eq) and additional considerations, such as electricity usage, go here. Edit the suggested text below accordingly -->
144
-
145
- Carbon emissions can be estimated using the [Machine Learning Impact calculator](https://mlco2.github.io/impact#compute) presented in [Lacoste et al. (2019)](https://arxiv.org/abs/1910.09700).
146
-
147
- - **Hardware Type:** [More Information Needed]
148
- - **Hours used:** [More Information Needed]
149
- - **Cloud Provider:** [More Information Needed]
150
- - **Compute Region:** [More Information Needed]
151
- - **Carbon Emitted:** [More Information Needed]
152
-
153
- ## Technical Specifications [optional]
154
-
155
- ### Model Architecture and Objective
156
-
157
- [More Information Needed]
158
-
159
- ### Compute Infrastructure
160
-
161
- [More Information Needed]
162
-
163
- #### Hardware
164
-
165
- [More Information Needed]
166
-
167
- #### Software
168
-
169
- [More Information Needed]
170
-
171
- ## Citation [optional]
172
-
173
- <!-- If there is a paper or blog post introducing the model, the APA and Bibtex information for that should go in this section. -->
174
-
175
- **BibTeX:**
176
-
177
- [More Information Needed]
178
-
179
- **APA:**
180
-
181
- [More Information Needed]
182
-
183
- ## Glossary [optional]
184
-
185
- <!-- If relevant, include terms and calculations in this section that can help readers understand the model or model card. -->
186
-
187
- [More Information Needed]
188
-
189
- ## More Information [optional]
190
-
191
- [More Information Needed]
192
-
193
- ## Model Card Authors [optional]
194
-
195
- [More Information Needed]
196
-
197
- ## Model Card Contact
198
-
199
- [More Information Needed]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
+ base_model: llm-jp/llm-jp-3-13b
3
+ tags:
4
+ - text-generation-inference
5
+ - transformers
6
+ - unsloth
7
+ - llama
8
+ - trl
9
+ license: apache-2.0
10
+ language:
11
+ - en
12
  ---
13
 
14
  # Model Card for Model ID
15
+ usui2024/llm-jp-3-13b-dpo_w_100usud
16
 
17
  <!-- Provide a quick summary of what the model is/does. -->
18
 
19
+ # LLM-JP モデルのFine-Tuning と DPOの学習
20
+
21
+ ## 概要
22
+ このプロジェクトでは、LLM-JPモデルをFine-Tuningし、DPO(Direct Preference Optimization)学習を用いてタスク生成と応答生成を行う方法を説明します。データセットは、ELYZAタスクを参考にしたものを用いて、新たなタスク生成を行います。このプロジェクトは、主に自然言語処理タスクにおけるトレーニングデータの自動生成に役立ちます。
23
+
24
+ ## 利用方法
25
+ 1. モデルをロード後、タスク生成を開始します。
26
+ - `datasets` モジュールを用いて、`ELYZA-tasks-100`からタスクを取得します。
27
+ - モデルを使ってタスクに基づいた新しいタスク生成を行います。
28
+ - 出力されたタスクを用いて、さらにモデルによる応答生成を行います。
29
+
30
+ 2. DPO(Direct Preference Optimization)学習:
31
+ - 生成されたタスクと応答を使い、DPO学習を行います。
32
+ - トレーニングのための設定は、`DPOTrainer`を用いて行います。
33
+ ```python
34
+ from trl import DPOTrainer
35
+ trainer = DPOTrainer(model, args, train_dataset=dpo_datasets)
36
+ trainer.train()
37
+ ```
38
+
39
+ 3. トレーニングが完了したモデルを使用して、タスクに基づく推論を行います。
40
+
41
+ ## モデルの詳細
42
+ - **Developed by:** usui2040
43
+ - モデル名: **LLM-JP**
44
+ - ベースモデル: **llm-jp-3-13b**
45
+ - ファインチューニング方法: **LoRA**(Low-Rank Adaptation)
46
+ - 学習タスク: **タスク生成、応答生成**
47
+ - 利用されるアルゴリズム: **DPO (Direct Preference Optimization)**
48
+ - トークナイザー: **AutoTokenizer**(Hugging Face提供)
49
+ - 出力形式: **テキスト生成**
50
+ -
51
+ This llama model was trained 2x faster with [Unsloth](https://github.com/unslothai/unsloth) and Huggingface's TRL library.
52
+
53
+ [<img src="https://raw.githubusercontent.com/unslothai/unsloth/main/images/unsloth%20made%20with%20love.png" width="200"/>](https://github.com/unslothai/unsloth)
54
+
55
+
56
+
57
+ モデルは、日本語を対象とした大規模なトランスフォーマーモデルです。タスクに基づいたテキスト生成や応答生成が可能で、生成タスクを指定することで柔軟に動作します。
58
+
59
+
60
+ ## モデルの設定とトレーニング
61
+ Hugging Face上でモデルをトレーニングし、評価・出力を行う方法を説明します。
62
+
63
+ ### 必要なライブラリのインストール
64
+ ```python
65
+ pip install -U ipywidgets
66
+ pip install transformers==4.46.3
67
+ pip install -U bitsandbytes
68
+ pip install -U accelerate
69
+ pip install -U datasets
70
+ pip install -U peft==0.13.2
71
+ pip install -U trl==0.12.1
72
+ ```
73
+
74
+
75
+ ### モデルの設定とトレーニング
76
+ 使用するベースモデルを指定して、それを読み込みます。ここでは、llm-jp-3-13bというモデルを使用しています。
77
+ ```python
78
+ from transformers import (
79
+ AutoModelForCausalLM,
80
+ AutoTokenizer,
81
+ BitsAndBytesConfig
82
+ )
83
+ from peft import PeftModel
84
+
85
+ # モデル設定
86
+ base_model_id = "llm-jp/llm-jp-3-13b" # モデルのIDまたはパスを指定
87
+ adapter_id = "usui2024/20241211_w_llm-jp-3-13b-it_lora" # LoRAアダプターID
88
+
89
+ # QLoRAの設定
90
+ bnb_config = BitsAndBytesConfig(
91
+ load_in_4bit=True,
92
+ bnb_4bit_quant_type="nf4",
93
+ bnb_4bit_compute_dtype=torch.bfloat16,
94
+ )
95
+
96
+ # モデルとトークナイザーのロード
97
+ model = AutoModelForCausalLM.from_pretrained(
98
+ base_model_id,
99
+ quantization_config=bnb_config,
100
+ device_map="auto",
101
+ token=HF_TOKEN # HF_TOKENはHugging Faceのアクセストークン
102
+ )
103
+ tokenizer = AutoTokenizer.from_pretrained(base_model_id, trust_remote_code=True, token=HF_TOKEN)
104
+
105
+ # LoRAアダプターを統合
106
+ model = PeftModel.from_pretrained(model, adapter_id, token=HF_TOKEN)
107
+
108
+ ```
109
+ ### 合成データの生成
110
+ 次に、モデルを使って合成データを生成します。以下では、ELYZA-tasks-100のデータを使用して新しいタスクを生成し、それに対するモデルの回答を作成します。
111
+
112
+ ```python
113
+ from datasets import load_dataset
114
+ from tqdm import tqdm
115
+
116
+ # データセットの読み込み
117
+ datasets = load_dataset("elyza/ELYZA-tasks-100")
118
+
119
+ task_results = []
120
+
121
+ # タスクの生成
122
+ for ref_input in tqdm(datasets['test']['input']):
123
+ prompt = f"""以下に示す参考タスクに従って、類似したタスクを生成しなさい。
124
+ ## 参考タスク
125
+ 仕事の熱意を取り戻すためのアイデアを5つ挙げてください。
126
+ ## 類似タスク
127
+ 試合に挑む心構えを3つほど挙げてください。
128
+ ## 参考タスク
129
+ {ref_input}
130
+ ## 類似タスク
131
+ """
132
+
133
+ tokenized_input = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt").to(model.device)
134
+ attention_mask = torch.ones_like(tokenized_input)
135
+
136
+ with torch.no_grad():
137
+ outputs = model.generate(
138
+ tokenized_input,
139
+ attention_mask=attention_mask,
140
+ max_new_tokens=100,
141
+ num_return_sequences=3, # 同じタスクから3つの新タスクを生成
142
+ do_sample=True,
143
+ temperature=0.6,
144
+ top_p=0.9,
145
+ repetition_penalty=1.2,
146
+ pad_token_id=tokenizer.eos_token_id
147
+ )
148
+
149
+ output_texts = [tokenizer.decode(output[tokenized_input.size(1):], skip_special_tokens=True) for output in outputs]
150
+
151
+ new_task = {"reference_task": ref_input}
152
+ new_task.update({f"similar_task_{i}": output_text for i, output_text in enumerate(output_texts)})
153
+ task_results.append(new_task)
154
+
155
+ df = pd.DataFrame(task_results)
156
+ df.head()
157
+ ```
158
+
159
+
160
+ ### DPO (Differentiable Prompt Optimization) の学習
161
+ DPOを使って、生成したタスクと回答のペアに基づいてモデルをトレーニングします。
162
+ ```python
163
+ from trl import DPOConfig, DPOTrainer
164
+ from datasets import Dataset
165
+ import torch
166
+
167
+ # DPO用のデータセットを準備
168
+ dpo_datasets = Dataset.from_list(dpo_datasets)
169
+
170
+ # DPOの設定
171
+ training_args = DPOConfig(
172
+ output_dir=new_model_id,
173
+ per_device_train_batch_size=1,
174
+ gradient_accumulation_steps=4,
175
+ num_train_epochs=2,
176
+ logging_steps=10,
177
+ save_steps=100,
178
+ save_total_limit=1,
179
+ learning_rate=1.5e-4,
180
+ fp16=True,
181
+ )
182
+
183
+ # DPOトレーナーの設定
184
+ dpo_trainer = DPOTrainer(
185
+ model,
186
+ args=training_args,
187
+ train_dataset=dpo_datasets,
188
+ tokenizer=tokenizer,
189
+ peft_config=peft_config,
190
+ )
191
+
192
+ # 学習の実行
193
+ dpo_trainer.train()
194
+ ```
195
+
196
+ ### モデルの推論
197
+ 最後に、モデルにタスクを入力し、その結果を得るための推論コードを提供します。
198
+ ```python
199
+
200
+
201
+ # データセットの読み込み。
202
+ datasets = []
203
+ with open("./elyza-tasks-100-TV_0.jsonl", "r") as f:
204
+ item = ""
205
+ for line in f:
206
+ line = line.strip()
207
+ item += line
208
+ if item.endswith("}"):
209
+ datasets.append(json.loads(item))
210
+ item = ""
211
+
212
+ task_results = []
213
+ outputs_results = []
214
+
215
+ for task in tqdm(dataset):
216
+ prompt = f"### 指示:\n{task}\n### 回答:\n"
217
+ tokenized_input = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt").to(model.device)
218
+ attention_mask = torch.ones_like(tokenized_input)
219
+
220
+ with torch.no_grad():
221
+ outputs = model.generate(
222
+ tokenized_input,
223
+ attention_mask=attention_mask,
224
+ max_new_tokens=512,
225
+ num_return_sequences=3, # 最低でも2個の出力を生成
226
+ do_sample=True,
227
+ temperature=0.6,
228
+ top_p=0.9,
229
+ repetition_penalty=1.2,
230
+ pad_token_id=tokenizer.eos_token_id
231
+ )
232
+
233
+ output_texts = [tokenizer.decode(output[tokenized_input.size(1):], skip_special_tokens=True) for output in outputs]
234
+ outputs_results.append(output_texts)
235
+
236
+ # 結果の表示
237
+ for result in outputs_results:
238
+ print(result)
239
+
240
+ ```