File size: 2,484 Bytes
d42d85d 5a39442 d42d85d 5a39442 |
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 102 |
# Elyza-TV 100を解かせる手順 (松尾研LLM講座最終課題のコンペ評価用)
llama.cpp を使って、google/gemma-2-27bをLoRAファインチューニング後にGGUF量子化したモデルで回答を生成します。
* [こちら](https://colab.research.google.com/drive/1SIZNxbyf1R8332iK8IvhhNlGhR_j9Sjt#scrollTo=pd8VbKeIQ_3J)に推論用のGoogle Colab Noteを共有しましたので、評価時の参考にしてください。
まず、GPUを利用できる形でllama.cppをビルドし直します。
```
!CMAKE_ARGS="-DLLAMA_CUDA=on" pip install llama-cpp-python[server]
```
必要なパッケージのインストール
```
!pip install huggingface_hub
```
必要なライブラリのインポート
```
import os
from llama_cpp import Llama
from huggingface_hub import hf_hub_download
```
モデルをダウンロード
```
from google.colab import userdata
os.environ['HUGGINGFACE_TOKEN'] = userdata.get('HF_TOKEN')
# Download the model
hf_hub_download(
repo_id="hideax/gemma-2-27b-it-5-q5_k_m",
filename="unsloth.Q5_K_M.gguf",
local_dir="./models"
)
```
モデルをロード
```
llm = Llama(
model_path="models/unsloth.Q5_K_M.gguf",
flash_attn=True,
n_gpu_layers=81,
n_batch=1024,
n_ctx=8192,
)
```
ELYZA-tasks-100-TVの読み込み
```
import json
datasets = []
with open("/content//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 = ""
```
タスクの実行
```
from tqdm import tqdm
results = []
for dt in tqdm(datasets):
input = dt["input"]
prompt = f"""### 指示\n{input}\n### 回答\n"""
output = llm(
prompt,
max_tokens=max_tokens,
temperature=temperature,
top_p=top_p,
stop=stop or [],
echo=False
)
prediction = output["choices"][0]["text"].strip()
result = {"task_id": dt["task_id"], "input": input, "output": prediction}
print(result)
results.append(result)
```
結果をjsonlで保存
```
model_id = "gemma-2-27b-it-5-Q5_K_M"
with open(f"{model_id}_output.jsonl", 'w', encoding='utf-8') as f:
for result in results:
json.dump(result, f, ensure_ascii=False)
f.write('\n')
```
# 利用したモデル
- google/gemma-2-27b
# ファインチューニングに利用したデータ
- llm-jp/magpie-sft-v1.0 (apache-2.0 license)
|