JaneJohnDoe commited on
Commit
d8dca4d
·
verified ·
1 Parent(s): 75d3dbf

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +145 -17
README.md CHANGED
@@ -23,20 +23,148 @@ This llama model was trained 2x faster with [Unsloth](https://github.com/unsloth
23
 
24
 
25
 
26
- ## モデルの詳細
27
-
28
- ### モデルの説明
29
-
30
- - **開発者:** [JaneJohnDoe]
31
- - **モデルタイプ:** [llm-jp-3-13b]
32
- - **言語(NLP):** [日本語]
33
- - **ファインチューニング元モデル [任意]:** [ichikara-instruction-003-001-1]
34
- ## バイアス、リスク、および制限
35
- 誤った情報を出力する可能性があります。
36
- ### 推奨事項
37
- ユーザー(直接および下流)は、モデルのリスク、バイアス、および制限について認識している必要があります。さらなる推奨事項には追加情報が必要です。
38
- ## トレーニングの詳細
39
- ### トレーニングデータ
40
- ichikara-instruction-003-001-1
41
- ### トレーニング手順
42
- llm-jp-3-13bに対しトレーニングデータをファインチューニングしています。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
 
24
 
25
 
26
+ **概要**
27
+
28
+ このドキュメントでは、Hugging Face で公開されているモデル `llm-jp/llm-jp-3-13b` を使用して、与えられた入力データ ( `elyza-tasks-100-TV_0.jsonl` ) を推論し、その結果をファイルに出力する手順を説明します。
29
+
30
+ **準備**
31
+
32
+ 1. **実行環境:** Python が利用できる環境 (例: Google Colab、AWS SageMakerなど) を用意してください。
33
+ 2. **Hugging Face トークン:** Hugging Face のアクセストークン ( `HF_TOKEN` ) を取得してください。
34
+
35
+ **セットアップ**
36
+
37
+ 以下の手順で、必要なライブラリのインストールと、Hugging Face トークンの設定を行います。
38
+
39
+ **1. ライブラリのインストール**
40
+
41
+ ```python
42
+ !pip install -U bitsandbytes
43
+ !pip install -U transformers
44
+ !pip install -U accelerate
45
+ !pip install -U datasets
46
+ !pip install -U peft
47
+ !pip install ipywidgets --upgrade
48
+ ```
49
+
50
+ **2. Hugging Face トークンの設定**
51
+
52
+ 環境に合わせてトークンを設定します。Google Colab の例を以下に示します。
53
+ ```python
54
+ from google.colab import userdata
55
+ HF_TOKEN = userdata.get('HF_TOKEN')
56
+ ```
57
+
58
+ **モデルとトークナイザの読み込み**
59
+
60
+ 以下のコードを実行して、Hugging Face からモデルとトークナイザを読み込みます。
61
+
62
+ ここでは、効率的な推論のために量子化 (QLoRA) を適用しています。
63
+
64
+ ```python
65
+ import torch
66
+ from transformers import (
67
+ AutoModelForCausalLM,
68
+ AutoTokenizer,
69
+ BitsAndBytesConfig,
70
+ )
71
+ import json
72
+ from tqdm import tqdm
73
+ import re
74
+
75
+ # モデルIDを設定
76
+ model_id = "llm-jp/llm-jp-3-13b"
77
+
78
+ # QLoRA用の設定
79
+ bnb_config = BitsAndBytesConfig(
80
+ load_in_4bit=True,
81
+ bnb_4bit_quant_type="nf4",
82
+ bnb_4bit_compute_dtype=torch.bfloat16,
83
+ )
84
+
85
+ # モデルのロード
86
+ model = AutoModelForCausalLM.from_pretrained(
87
+ model_id,
88
+ quantization_config=bnb_config,
89
+ device_map="auto",
90
+ token=HF_TOKEN
91
+ )
92
+
93
+ # トークナイザのロード
94
+ tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True, token=HF_TOKEN)
95
+ ```
96
+
97
+ **入力データの準備**
98
+
99
+ `elyza-tasks-100-TV_0.jsonl` ファイルからデータを読み込み、リストに格納します。
100
+
101
+ ```python
102
+ datasets = []
103
+ with open("./elyza-tasks-100-TV_0.jsonl", "r") as f:
104
+ item = ""
105
+ for line in f:
106
+ line = line.strip()
107
+ item += line
108
+ if item.endswith("}"):
109
+ datasets.append(json.loads(item))
110
+ item = ""
111
+ ```
112
+
113
+ **推論の実行**
114
+
115
+ 読み込んだデータセットの各データに対して、モデルで推論を実行します。
116
+
117
+ ```python
118
+ results = []
119
+ for data in tqdm(datasets):
120
+ input_data = data["input"]
121
+
122
+ prompt = f"""### 指示
123
+ {input_data}
124
+ ### 回答
125
+ """
126
+ # 推論用の入力を作成
127
+ tokenized_input = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt").to(model.device)
128
+ attention_mask = torch.ones_like(tokenized_input)
129
+
130
+ # 推論の実行
131
+ with torch.no_grad():
132
+ outputs = model.generate(
133
+ tokenized_input,
134
+ attention_mask=attention_mask,
135
+ max_new_tokens=200,
136
+ do_sample=False,
137
+ repetition_penalty=1.2,
138
+ pad_token_id=tokenizer.eos_token_id
139
+ )[0]
140
+
141
+ # 推論結果をデコード
142
+ output = tokenizer.decode(outputs[tokenized_input.size(1):], skip_special_tokens=True)
143
+
144
+ # 結果をリストに追加
145
+ results.append({
146
+ "input": input_data,
147
+ "output": output
148
+ })
149
+ ```
150
+
151
+ **出力結果の保存**
152
+
153
+ 推論結果を、モデルIDに基づいたファイル名 ( `[model_id]-outputs.jsonl` ) で保存します。
154
+
155
+ ```python
156
+ # モデルIDからファイル名を作成
157
+ jsonl_id = re.sub(".*/", "", model_id)
158
+
159
+ # 結果をファイルに保存
160
+ with open(f"./{jsonl_id}-outputs.jsonl", 'w', encoding='utf-8') as f:
161
+ for result in results:
162
+ json.dump(result, f, ensure_ascii=False)
163
+ f.write('\n')
164
+ ```
165
+
166
+ **まとめ**
167
+
168
+ 上記の手順を実行することで、モデルによる推論結果が `[model_id]-outputs.jsonl` というファイルに保存されます。このファイルには、入力データとそれに対するモデルの出力が含まれます。
169
+
170
+