File size: 6,840 Bytes
47095c7 45b8ea4 6a14871 45b8ea4 56fa043 596893e 4a4d634 e4de7eb 56fa043 98cb398 524b9a7 cac393f fa3bd30 cac393f fa3bd30 f46baf7 fa3bd30 3875cf0 be70762 3875cf0 cac393f 98cb398 3ce885f |
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 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 |
---
language: 日本語
license: apache-2.0
tags:
- text-generation
- causal-lm
- llm
model_name: takeofuture/llm-jp-3-13b-finetune-22_lora
base_model: llm-jp/llm-jp-3-13b
datasets:
- IchikaraInstruction
pipeline_tag: text-generation
---
# llm-jp-3-13b-finetune-22_lora
[![Hugging Face Models](https://img.shields.io/badge/HuggingFace-Model-yellow)](https://huggingface.co/your-model-repo)
このモデルは [Hugging Face](https://huggingface.co) 上で提供されている llm-jp/llm-jp-3-13b をファインチューニングしたモデルです。
主に日本語の指示応答タスク向けに最適化されています。
## **モデルの概要**
- **タイプ**: Transformer-based Language Model
- **トレーニングデータ**: LLM-jp の公開している Ichikara Instruction
https://liat-aip.sakura.ne.jp/wp/llmのための日本語インストラクションデータ作成/llmのための日本語インストラクションデータ-公開/
関根聡, 安藤まや, 後藤美知子, 鈴木久美, 河原大輔, 井之上直也, 乾健太郎. ichikara-instruction: LLMのための日本語インストラクションデータの構築. 言語処理学会第30回年次大会(2024)
- **タスク**: elyza_100_tv のベンチマークに対する応答
## **モデルのファインチューニング**
- **コンテキスト長**: 1024
- **学習率**: 2e-4
- **バッチサイズ**: 2
- **勾配蓄積数**: 4
## **実行環境**
- GOOGLE Colaboratory
- Linux (例: Ubuntu 24.04 CUDA12.6)
## **Ubuntuでの環境設定方法と推論実行方法**
- 必要ライブラリのインストール
```
pip install unsloth
pip install -U torch
pip install -U peft
```
- ベースとなるモデルのダウンロード(任意)
```
from huggingface_hub import snapshot_download
model_name = "llm-jp/llm-jp-3-13b"
local_dir = f"./models/{model_name}"
snapshot_download(repo_id=model_name, local_dir=local_dir, local_dir_use_symlinks=False)
print(f"Model downloaded to: {local_dir}")
```
- 推論
```
from unsloth import FastLanguageModel
from peft import PeftModel
import torch
import json
from tqdm import tqdm
import re
#ベースとなるモデルと学習したLoRAのアダプタ(Hugging FaceのIDを指定)。
#model_id = "llm-jp/llm-jp-3-13 #HUGGINGFACEをよりダウンロードするときはこちらを使いください
local_model_dir = "./models/llm-jp/llm-jp-3-13b" # 事前にダウンロードしたモデルのローカルディレクトリ
adapter_id = "takeofuture/llm-jp-3-13b-finetune-22_lora"
HF_TOKEN = "HUGGINGFACEのTOKENを入れてください"
#unslothのFastLanguageModelで元のモデルをロード。
dtype = None # Noneにしておけば自動で設定
load_in_4bit = True # 今回は13Bモデルを扱うためTrue
model, tokenizer = FastLanguageModel.from_pretrained(
#model_name=model_id,
model_name=local_model_dir,
dtype=dtype,
load_in_4bit=load_in_4bit,
trust_remote_code=True,
)
model = PeftModel.from_pretrained(model, adapter_id, token = HF_TOKEN)
#推論モードに切り替え
FastLanguageModel.for_inference(model)
prompt = f"""### 指示\n名古屋の有名なグルメは何ですか?\n### 回答\n"""
inputs = tokenizer([prompt], return_tensors = "pt").to(model.device)
#不要な `token_type_ids` を削除
if "token_type_ids" in inputs:
del inputs["token_type_ids"]
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]
print(prediction)
```
- **ベンチマークの実施**
```
from unsloth import FastLanguageModel
from peft import PeftModel
import torch
import json
from tqdm import tqdm
import re
#ベースとなるモデルと学習したLoRAのアダプタ(Hugging FaceのIDを指定)。
#model_id = "llm-jp/llm-jp-3-13b" #HUGGINGFACEをよりダウンロードするときはこちらを使いください
local_model_dir = "./models/llm-jp/llm-jp-3-13b" # 事前にダウンロードしたモデルのローカルディレクトリ
adapter_id = "takeofuture/llm-jp-3-13b-finetune-22_lora"
HF_TOKEN = "HUGGINGFACEのTOKENを入れてください"
#unslothのFastLanguageModelで元のモデルをロード。
dtype = None # Noneにしておけば自動で設定
load_in_4bit = True # 今回は13Bモデルを扱うためTrue
model, tokenizer = FastLanguageModel.from_pretrained(
#model_name=model_id,
model_name=local_model_dir,
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"]
print("\n\n=====================================================================================================================\n")
print("---指示---")
print(input)
prompt = f"""### 指示\n{input}\n### 回答\n"""
inputs = tokenizer([prompt], return_tensors = "pt").to(model.device)
if "token_type_ids" in inputs:
del inputs["token_type_ids"]
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]
print("---回答---")
print(prediction)
results.append({"task_id": dt["task_id"], "input": input, "output": prediction})
#結果をjsonlで保存。
json_file_id = re.sub(".*/", "", adapter_id)
with open(f"./{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')
```
## **GOOGLE COLABORATORYでのelyza_100_tvでの推論方法**
以下のノートを参照してください
- [Model_Inference_Template_unsloth_20241127.ipynb](./Model_Inference_Template_unsloth_20241127.ipynb)
# Uploaded model
- **Developed by:** takeofuture
- **License:** apache-2.0
- **Finetuned from model :** llm-jp/llm-jp-3-13b
This llama model was trained 2x faster with [Unsloth](https://github.com/unslothai/unsloth) and Huggingface's TRL library.
[<img src="https://raw.githubusercontent.com/unslothai/unsloth/main/images/unsloth%20made%20with%20love.png" width="200"/>](https://github.com/unslothai/unsloth)
|