kazuHF commited on
Commit
bbc800e
·
verified ·
1 Parent(s): 6c880da

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +83 -1
README.md CHANGED
@@ -30,7 +30,7 @@ This llama model was trained 2x faster with [Unsloth](https://github.com/unsloth
30
  # Googleドライブに接続
31
  from google.colab import drive
32
  drive.mount('/content/drive')
33
- # 接続しているGPUの種類
34
  !nvidia-smi
35
 
36
  # 必要なライブラリのインストール
@@ -38,7 +38,89 @@ drive.mount('/content/drive')
38
  !pip uninstall unsloth -y && pip install --upgrade --no-cache-dir "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git" -q
39
  !pip install -U torch -q
40
  !pip install -U peft -q
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
41
  ```
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
 
43
 
44
  # ■ kazuHF/llm-jp-3-13b-it2_loraの概要
 
30
  # Googleドライブに接続
31
  from google.colab import drive
32
  drive.mount('/content/drive')
33
+ # 接続しているGPUの種類の表示
34
  !nvidia-smi
35
 
36
  # 必要なライブラリのインストール
 
38
  !pip uninstall unsloth -y && pip install --upgrade --no-cache-dir "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git" -q
39
  !pip install -U torch -q
40
  !pip install -U peft -q
41
+
42
+ # 必要なライブラリの読み込み
43
+ from unsloth import FastLanguageModel
44
+ from peft import PeftModel
45
+ import torch
46
+ import json
47
+ from tqdm import tqdm
48
+ import re
49
+ ```
50
+ 2. モデルの読み込み
51
+ - 元のモデル(llm-jp/llm-jp-3-13b)と学習させたアダプターとを統合する。
52
+ - huggeinface_tokenの所にhugging face tokenを入力して使用する。
53
+
54
+ ```bash
55
+ # ベースとなるモデルと学習したLoRAのアダプタ(本モデル)のIDやHugging face tokenを指定。
56
+ model_id = "llm-jp/llm-jp-3-13b"
57
+ adapter_id = "kazuHF/llm-jp-3-13b-it2_lora"
58
+ HF_TOKEN = "huggingface_token"
59
+ # unslothのFastLanguageModelで元のモデルとトークナイザーをロード。
60
+ model, tokenizer = FastLanguageModel.from_pretrained(
61
+ model_name=model_id,
62
+ dtype=None,
63
+ load_in_4bit=True,
64
+ trust_remote_code=True,
65
+ )
66
+
67
+ # 元のモデルにLoRAのアダプタを統合。
68
+ model = PeftModel.from_pretrained(model, adapter_id, token = HF_TOKEN)
69
+ # 推論するためにモデルのモードを変更
70
+ FastLanguageModel.for_inference(model)
71
  ```
72
+ 3. 単一の入力文に対して推論する場合
73
+
74
+ ```bash
75
+ # 単一の入力文に基づいて推論する関数の定義。
76
+ def Decoder(input):
77
+ prompt = f"""### 指示\n\n{str(input)}\n\n### 回答"""
78
+ inputs = tokenizer([prompt], return_tensors = "pt").to(model.device)
79
+ outputs = model.generate(**inputs, max_new_tokens = 512, use_cache = True, do_sample=False, repetition_penalty=1.2)
80
+ prediction = tokenizer.decode(outputs[0], skip_special_tokens=True).split('\n### 回答')[-1]
81
+ print(prompt)
82
+ print(prediction)
83
+ ```
84
+ ◇ 使用例
85
+ ```bash
86
+ Decoder('犬と猫の違いについて述べてください。')
87
+ ```
88
+
89
+ 4. jasonlで保存された入力文を一括して推論する場合
90
+ - Colabの/contentにeliza-tasks-100-TV_0.jsonlをuploadしておく。
91
+
92
+ ```bash
93
+ # jsonlで作製されたタスクを一括処理する場合。
94
+ datasets = []
95
+ with open("./elyza-tasks-100-TV_0.jsonl", "r") as f:
96
+ item = ""
97
+ for line in f:
98
+ line = line.strip()
99
+ item += line
100
+ if item.endswith("}"):
101
+ datasets.append(json.loads(item))
102
+ item = ""
103
+
104
+ # モデルで入力を一括処理。
105
+ results = []
106
+ for dt in tqdm(datasets):
107
+ input = dt["input"]
108
+ prompt = f"""### 指示\n{input}\n### 回答\n"""
109
+ inputs = tokenizer([prompt], return_tensors = "pt").to(model.device)
110
+ outputs = model.generate(**inputs, max_new_tokens = 512, use_cache = True, do_sample=False, repetition_penalty=1.2)
111
+ prediction = tokenizer.decode(outputs[0], skip_special_tokens=True).split('\n### 回答')[-1]
112
+ results.append({"task_id": dt["task_id"], "input": input, "output": prediction})
113
+
114
+ # 結果をjsonlで保存。
115
+ json_file_id = re.sub(".*/", "", adapter_id)
116
+ with open(f"/content/{json_file_id}_output.jsonl", 'w', encoding='utf-8') as f:
117
+ for result in results:
118
+ json.dump(result, f, ensure_ascii=False)
119
+ f.write('\n')
120
+ ```
121
+
122
+ - 推論結果はColabの/contentに、llm-jp-3-13b-it2_lora_output.jsonlとして保存される。
123
+
124
 
125
 
126
  # ■ kazuHF/llm-jp-3-13b-it2_loraの概要