File size: 3,590 Bytes
db0dce6 cc20c76 b345c3a cc20c76 7ac00c2 cc20c76 7ac00c2 0161dc3 cee8f38 0161dc3 cee8f38 0161dc3 cc20c76 cee8f38 cc20c76 0161dc3 cc20c76 3f57330 0161dc3 cc20c76 cee8f38 0161dc3 7ac00c2 cee8f38 cc20c76 7ac00c2 0161dc3 cee8f38 0161dc3 7ac00c2 cee8f38 cc20c76 7ac00c2 cee8f38 0161dc3 cee8f38 0161dc3 cee8f38 0161dc3 cee8f38 0161dc3 cee8f38 0161dc3 7ac00c2 cee8f38 cc20c76 7ac00c2 0161dc3 cee8f38 0161dc3 7ac00c2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
---
base_model: llm-jp/llm-jp-3-13b
---
# モデルの概要
このモデルは、松尾研大規模言語モデル講座2024の最終課題として作成された提出モデルです。
ベースとなるモデルは「llm-jp/llm-jp-3-13b」です。このベースモデルを元に以下のデータセットを用いて追加学習を行いました。
・ichikara-Instruction
・ELIZA-task-100
これらのデータセットを活用することで、モデルの指示対応能力とタスク処理能力を向上させています。
# 推論用コード
以下のコードを実行すると、HuggingFace上の本モデル「Gamoooo/llm-jp-3-13b-last」を実行して、最終課題用入力データ「elyza-tasks-100-TV_0.jsonl」(課題用オリジナルデータセット)を推論し、その結果を{json_file_id}-outputs.jsonlというファイルに出力できます。
### ライブラリーのインストール&セットアップ
### Google Colab環境向けインストール手順
以下のコマンドをGoogle Colabのセルに入力して実行してください:
```
!pip install unsloth
!pip uninstall unsloth -y && pip install --upgrade --no-cache-dir "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"
!pip install -U torch
!pip install -U peft
from unsloth import FastLanguageModel
from peft import PeftModel
import torch
import json
from tqdm import tqdm
import re
```
### Hugging FaceのTokenの指定
以下のコードを使用して、Hugging Faceのトークンを指定してください:
```
HF_TOKEN = "your-token" #@param {type:"string"}
```
### モデル・トークナイザの読み込み
### 量子化パラメータの設定
ベースモデルは13Bの大規模モデルであるため、量子化(4bit)を行います。
```
model_id = "llm-jp/llm-jp-3-13b" # ベースモデルのID
adapter_id = "Gamoooo/llm-jp-3-13b-last" # 本モデルのアダプタモデルID
dtype = None
load_in_4bit = True # メモリ効率化のため4bit量子化を有効化
model, tokenizer = FastLanguageModel.from_pretrained(
model_name=model_id,
dtype=dtype,
load_in_4bit=load_in_4bit,
trust_remote_code=True,
)
model = PeftModel.from_pretrained(model, adapter_id, token = HF_TOKEN)
```
### 入力データの準備
```
datasets = []
with open("./elyza-tasks-100-TV_0.jsonl", "r") as f:
item = ""
for line in f:
line = line.strip()
item += line
if item.endswith("}"):
datasets.append(json.loads(item))
item = ""
```
### 推論実行
```
FastLanguageModel.for_inference(model)
results = []
for dt in tqdm(datasets):
input = dt["input"]
prompt = f"### 指示\n{input}\n次の要件を満たしてください:\n1. 簡潔に回答する。\n2. 必要なら箇条書きを使用して要点を整理する。\n3. 指示された内容に忠実に答える。\n### 回答\n"
inputs = tokenizer([prompt], return_tensors="pt").to(model.device)
outputs = model.generate(
**inputs,
max_new_tokens=512,
use_cache=True,
do_sample=False,
repetition_penalty=1.2,
)
prediction = tokenizer.decode(outputs[0], skip_special_tokens=True).split('\n### 回答')[-1]
results.append({"task_id": dt["task_id"], "input": input, "output": prediction})
```
### 出力の保存
```
json_file_id = re.sub(".*/", "", adapter_id)
with open(f"/content/{json_file_id}_output.jsonl", 'w', encoding='utf-8') as f:
for result in results:
json.dump(result, f, ensure_ascii=False)
f.write('\n')
``` |