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)