ultimatemagic79 commited on
Commit
11b90fa
1 Parent(s): 1e7c072

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +124 -118
README.md CHANGED
@@ -1,119 +1,125 @@
1
- ---
2
- license: mit
3
- ---
4
-
5
- # lora_gemma_9b
6
-
7
- このモデルは、[Gemma-2-9b](https://huggingface.co/google/gemma-2-9b) をベースに微調整されたモデルです。
8
- LLM講座の最終課題のために作成されたものになります。
9
-
10
- ## 出力方法
11
-
12
- 以下のコードを使用して、モデルをロードし、結果を生成できます。
13
-
14
- ```python
15
- from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
16
- from peft import PeftModel
17
- from datasets import load_dataset
18
- from tqdm import tqdm
19
- import torch
20
- import json
21
-
22
- # トークナイザーのロード
23
- tokenizer = AutoTokenizer.from_pretrained("ultimatemagic79/lora_gemma_9b", use_fast=False)
24
-
25
- # ベースモデルのロード
26
- bnb_config = BitsAndBytesConfig(
27
- load_in_8bit=True,
28
- llm_int8_threshold=6.0,
29
- )
30
- base_model = AutoModelForCausalLM.from_pretrained(
31
- "google/gemma-2-9b",
32
- device_map="auto",
33
- quantization_config=bnb_config,
34
- torch_dtype=torch.float16,
35
- )
36
-
37
- # 微調整モデルのロード
38
- model = PeftModel.from_pretrained(base_model, "ultimatemagic79/lora_gemma_9b")
39
-
40
- # Few-Shot Promptの設定
41
- dataset = load_dataset("elyza/ELYZA-tasks-100") # 実際のデータセットパスに変更
42
- num_samples = 3
43
- few_shot_samples = dataset["test"].select(range(num_samples))
44
-
45
- # 推論の実行
46
- # ELYZA-tasks-100-TVデータセットのロード
47
- def load_elyza_tasks(file_path):
48
- data = []
49
- with open(file_path, 'r', encoding='utf-8') as f:
50
- for line in f:
51
- data.append(json.loads(line))
52
- return data
53
-
54
- test_dataset = load_elyza_tasks('elyza-tasks-100-TV_0.jsonl')
55
-
56
- def generate_prompt(input_text, examples):
57
- prompt = ""
58
- for idx, example in enumerate(examples, 1):
59
- prompt += f"[例{idx}]\n"
60
- prompt += f"入力: {example['input']}\n"
61
- prompt += f"出力: {example['output']}\n\n"
62
- prompt += "[あなたの質問]\n"
63
- prompt += f"入力: {input_text}\n"
64
- prompt += "出力:"
65
- return prompt
66
-
67
- def generate_response(model, tokenizer, prompt):
68
- inputs = tokenizer(
69
- prompt,
70
- return_tensors="pt",
71
- truncation=True,
72
- max_length=1024,
73
- ).to(model.device)
74
-
75
- with torch.no_grad():
76
- outputs = model.generate(
77
- input_ids=inputs["input_ids"],
78
- attention_mask=inputs["attention_mask"],
79
- max_new_tokens=256,
80
- temperature=0.7,
81
- repetition_penalty=1.1,
82
- top_p=0.9,
83
- do_sample=True,
84
- eos_token_id=tokenizer.eos_token_id,
85
- )
86
-
87
- output_text = tokenizer.decode(outputs[0][inputs["input_ids"].shape[-1]:], skip_special_tokens=True)
88
- return output_text
89
-
90
- # 推論と結果の収集
91
- results = []
92
- for test_data in tqdm(test_dataset):
93
- task_id = test_data["task_id"]
94
- input_text = test_data["input"]
95
- prompt = generate_prompt(input_text, few_shot_samples)
96
- response = generate_response(model, tokenizer, prompt)
97
- results.append({
98
- "task_id": task_id,
99
- "output": response,
100
- })
101
- ```
102
-
103
- ## ELYZA-tasks-100データセットの利用について
104
-
105
- このモデルは、ELYZA社が公開する [ELYZA-tasks-100](https://huggingface.co/datasets/elyza/ELYZA-tasks-100)を使用してファインチューニング,プロンプトエンジニアリングを行っています。
106
-
107
- ELYZA-tasks-100は [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/deed.ja)でライセンスされています。
108
-
109
- 詳細なライセンス情報は、[ELYZA-tasks-100のモデルカード](https://huggingface.co/datasets/elyza/ELYZA-tasks-100)をご参照ください。
110
-
111
- ## Gemma-2-9bの使用権利について
112
-
113
- このモデルは、Google社が提供する [gemma-2-9b](https://huggingface.co/google/gemma-2-9b) をベースに微調整されています。
114
-
115
- Gemma-2-9bは、商用利用が許可されたライセンスの下で公開されています。
116
-
117
- 詳細なライセンス情報は、[gemma-2-9bのモデルカード](https://huggingface.co/google/gemma-2-9b)をご参照ください。
118
-
 
 
 
 
 
 
119
  **注意**: このモデルを使用する際は、Gemma-2-9bのライセンスに従ってください。
 
1
+ ---
2
+ license: mit
3
+ datasets:
4
+ - elyza/ELYZA-tasks-100
5
+ language:
6
+ - ja
7
+ base_model:
8
+ - google/gemma-2-9b
9
+ ---
10
+
11
+ # lora_gemma_9b
12
+
13
+ このモデルは、[Gemma-2-9b](https://huggingface.co/google/gemma-2-9b) をベースに微調整されたモデルです。
14
+ LLM講座の最終課題のために作成されたものになります。
15
+
16
+ ## 出力方法
17
+
18
+ 以下のコードを使用して、モデルをロードし、結果を生成できます。
19
+
20
+ ```python
21
+ from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
22
+ from peft import PeftModel
23
+ from datasets import load_dataset
24
+ from tqdm import tqdm
25
+ import torch
26
+ import json
27
+
28
+ # トークナイザーのロード
29
+ tokenizer = AutoTokenizer.from_pretrained("ultimatemagic79/lora_gemma_9b", use_fast=False)
30
+
31
+ # ベースモデルのロード
32
+ bnb_config = BitsAndBytesConfig(
33
+ load_in_8bit=True,
34
+ llm_int8_threshold=6.0,
35
+ )
36
+ base_model = AutoModelForCausalLM.from_pretrained(
37
+ "google/gemma-2-9b",
38
+ device_map="auto",
39
+ quantization_config=bnb_config,
40
+ torch_dtype=torch.float16,
41
+ )
42
+
43
+ # 微調整モデルのロード
44
+ model = PeftModel.from_pretrained(base_model, "ultimatemagic79/lora_gemma_9b")
45
+
46
+ # Few-Shot Promptの設定
47
+ dataset = load_dataset("elyza/ELYZA-tasks-100")
48
+ num_samples = 3
49
+ few_shot_samples = dataset["test"].select(range(num_samples))
50
+
51
+ # 推論の実行
52
+ # ELYZA-tasks-100-TVデータセットのロード
53
+ def load_elyza_tasks(file_path):
54
+ data = []
55
+ with open(file_path, 'r', encoding='utf-8') as f:
56
+ for line in f:
57
+ data.append(json.loads(line))
58
+ return data
59
+
60
+ test_dataset = load_elyza_tasks('elyza-tasks-100-TV_0.jsonl')
61
+
62
+ def generate_prompt(input_text, examples):
63
+ prompt = ""
64
+ for idx, example in enumerate(examples, 1):
65
+ prompt += f"[例{idx}]\n"
66
+ prompt += f"入力: {example['input']}\n"
67
+ prompt += f"出力: {example['output']}\n\n"
68
+ prompt += "[あなたの質問]\n"
69
+ prompt += f"入力: {input_text}\n"
70
+ prompt += "出力:"
71
+ return prompt
72
+
73
+ def generate_response(model, tokenizer, prompt):
74
+ inputs = tokenizer(
75
+ prompt,
76
+ return_tensors="pt",
77
+ truncation=True,
78
+ max_length=1024,
79
+ ).to(model.device)
80
+
81
+ with torch.no_grad():
82
+ outputs = model.generate(
83
+ input_ids=inputs["input_ids"],
84
+ attention_mask=inputs["attention_mask"],
85
+ max_new_tokens=256,
86
+ temperature=0.7,
87
+ repetition_penalty=1.1,
88
+ top_p=0.9,
89
+ do_sample=True,
90
+ eos_token_id=tokenizer.eos_token_id,
91
+ )
92
+
93
+ output_text = tokenizer.decode(outputs[0][inputs["input_ids"].shape[-1]:], skip_special_tokens=True)
94
+ return output_text
95
+
96
+ # 推論と結果の収集
97
+ results = []
98
+ for test_data in tqdm(test_dataset):
99
+ task_id = test_data["task_id"]
100
+ input_text = test_data["input"]
101
+ prompt = generate_prompt(input_text, few_shot_samples)
102
+ response = generate_response(model, tokenizer, prompt)
103
+ results.append({
104
+ "task_id": task_id,
105
+ "output": response,
106
+ })
107
+ ```
108
+
109
+ ## ELYZA-tasks-100データセットの利用について
110
+
111
+ このモデルは、ELYZA社が公開する [ELYZA-tasks-100](https://huggingface.co/datasets/elyza/ELYZA-tasks-100)を使用してファインチューニング,プロンプトエンジニアリングを行っています。
112
+
113
+ ELYZA-tasks-100は [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/deed.ja)でライセンスされています。
114
+
115
+ 詳細なライセンス情報は、[ELYZA-tasks-100のモデルカード](https://huggingface.co/datasets/elyza/ELYZA-tasks-100)をご参照ください。
116
+
117
+ ## Gemma-2-9bの使用権利について
118
+
119
+ このモデルは、Google社が提供する [gemma-2-9b](https://huggingface.co/google/gemma-2-9b) をベースに微調整されています。
120
+
121
+ Gemma-2-9bは、商用利用が許可されたライセンスの下で公開されています。
122
+
123
+ 詳細なライセンス情報は、[gemma-2-9bのモデルカード](https://huggingface.co/google/gemma-2-9b)をご参照ください。
124
+
125
  **注意**: このモデルを使用する際は、Gemma-2-9bのライセンスに従ってください。