File size: 7,163 Bytes
06442c1
 
f4832c3
 
 
 
 
 
 
 
 
 
 
99221bd
 
 
 
 
f4832c3
 
99221bd
f4832c3
 
 
e1c9884
 
 
99221bd
 
 
 
 
 
f4832c3
 
 
 
 
 
 
 
 
 
99221bd
f4832c3
 
 
 
 
 
 
 
 
99221bd
 
 
 
 
 
f4832c3
 
99221bd
f4832c3
99221bd
 
 
 
 
 
 
 
 
 
 
 
f4832c3
99221bd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f4832c3
 
99221bd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f4832c3
 
 
99221bd
 
16db186
 
99221bd
f4832c3
99221bd
 
f4832c3
 
 
 
 
 
 
 
 
 
 
 
99221bd
4a18628
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
---
license: apache-2.0
language:
- ja
- en
library_name: transformers
tags:
- japanese
---

# Tanuki-8x8B-dpo-v1.0

## モデルについて
Tanuki-8x8Bは、フルスクラッチで約1.7Tトークン事前学習を行った8x8Bパラメータ(総パラメータ約47B、アクティブパラメータ約13B)の大規模言語モデルです。  
Tanuki-8x8B-dpo-v1.0は、SFTおよびDPOにより対話用に調整されています。  
より詳細な情報については[ブログ記事](https://zenn.dev/matsuolab/articles/377f7ae8b1169e)を参照してください。  
  
[GENIAC 松尾研 LLM開発プロジェクト](https://weblab.t.u-tokyo.ac.jp/geniac_llm/)のもと、一般公募により集まった有志の参加者(企業所属、学生、研究者等)が開発を実施しました。 

## 量子化モデル
[AWQ 4bit量子化](https://huggingface.co/team-hatakeyama-phase2/Tanuki-8x8B-dpo-v1.0-AWQ)  [GPTQ 4bit量子化](https://huggingface.co/team-hatakeyama-phase2/Tanuki-8x8B-dpo-v1.0-GPTQ-4bit)  [GPTQ 8bit量子化](https://huggingface.co/team-hatakeyama-phase2/Tanuki-8x8B-dpo-v1.0-GPTQ-8bit)  [GGUF量子化](https://huggingface.co/team-hatakeyama-phase2/Tanuki-8x8B-dpo-v1.0-GGUF)*  
*GGUF版は性能低下が発生している可能性があり、非推奨

## 使い方
[こちらの記事](https://zenn.dev/matsuolab/articles/a3b42ddbf5d121)にTanuki-8x8Bおよびその量子化モデルの各種推論方法についてまとめていますので、ご確認ください。  
以下に一部の推論方法を解説します。

本モデルの推論にはflash attentionが必須です。以下のようにインストールしてください。
```bash
pip install --no-build-isolation flash_attn
```

以下はHuggingFace Transformersを使った推論のサンプルコードです。

```python
from transformers import AutoModelForCausalLM, AutoTokenizer, TextStreamer

model = AutoModelForCausalLM.from_pretrained("weblab-GENIAC/Tanuki-8x8B-dpo-v1.0", device_map="auto", torch_dtype="auto", trust_remote_code=True)
tokenizer = AutoTokenizer.from_pretrained("weblab-GENIAC/Tanuki-8x8B-dpo-v1.0")
streamer = TextStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)

messages = [
    {"role": "system", "content": "以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい。"},
    {"role": "user", "content": "たぬきに純粋理性批判は理解できますか?"}
]

input_ids = tokenizer.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt").to(model.device)
output_ids = model.generate(input_ids,
                            max_new_tokens=1024,
                            temperature=0.5,
                            streamer=streamer)
```

また、vLLMを使って推論をする場合は独自アーキテクチャへの対応が必要となります。[こちら](https://github.com/team-hatakeyama-phase2/vllm)から改変済みvLLMを以下のようにビルドしてご利用ください。

```bash
git clone https://github.com/team-hatakeyama-phase2/vllm.git
cd vllm
LD_LIBRARY_PATH="" MAX_JOBS=16 pip install -e .
```

以下はvLLMを使った推論のサンプルコードです。

```python
from time import time
from vllm import LLM, SamplingParams

model_name = "weblab-GENIAC/Tanuki-8x8B-dpo-v1.0"
# model_name = "team-hatakeyama-phase2/Tanuki-8x8B-dpo-v1.0-AWQ"
# model_name = "team-hatakeyama-phase2/Tanuki-8x8B-dpo-v1.0-GPTQ-4bit"
# model_name = "team-hatakeyama-phase2/Tanuki-8x8B-dpo-v1.0-GPTQ-8bit"

# vllm = LLM(model_name, trust_remote_code=True, tensor_parallel_size=1)  # 1GPUの場合
vllm = LLM(model_name, trust_remote_code=True, tensor_parallel_size=2)  # 2GPUを使う場合
tokenizer = vllm.get_tokenizer()

messages = [
    {"role": "system", "content": "以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい。"},
    {"role": "user", "content": "たぬきに純粋理性批判は理解できますか?"}
]

inputs_text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
print(f"inputs_text: {inputs_text}")

sampling_params = SamplingParams(temperature=0.0, max_tokens=1024, seed=1, repetition_penalty=1.1)
start = time()
outputs = vllm.generate(inputs_text, sampling_params=sampling_params, use_tqdm=False)
end = time()
outputs_text = outputs[0].outputs[0].text
print(f"outputs_text: {outputs_text}")
print(f"Elapsed time: {(end - start):.4f} sec.")
```

## プロンプト形式
Tanuki-8x8B-dpo-v1.0は日本語版Alpacaのプロンプト形式を利用します。
- シングルターン
  ```
  <s>以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい。
  
  ### 指示:
  たぬきに純粋理性批判は理解できますか?
  
  ### 応答:
  
  ```
- マルチターン
  ```
  <s>以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい。
  
  ### 指示:
  {1ターン目の入力}
  
  ### 応答:
  {1ターン目の応答}</s>

  ### 指示:
  {2ターン目の入力}
  
  ### 応答:
  ```

なお、本モデルはデフォルトのシステムプロンプトである「以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい。」以外を学習していないため、このシステムプロンプトの使用を推奨します。タスクの詳細はユーザープロンプトに記述してください。

## ベンチマーク

**人手評価**  
Chatbot Arenaを模したシステムを作成し、人手によるブラインドテストを実施しました。
(詳細は[こちら](https://zenn.dev/matsuolab/articles/95fa297ef12a14))  
[全評価データ(約2000件)](https://huggingface.co/datasets/team-hatakeyama-phase2/LLMChat)を公開しています。
![image/png](https://cdn-uploads.huggingface.co/production/uploads/6348501e50fe0799927c3667/RzPOQfETYD9_AFEjVkwCX.png)

**Japanese MT-Bench**  
GPT-4による評価 (gpt-4-0613、平均スコア算出においてスコア-1は除外)  
| | Tanuki-8B-dpo-v1.0 | Tanuki-8x8B-dpo-v1.0 |
| ---- | ---- | ---- | 
| 平均スコア | 7.24 | 7.96 |
| coding |	5.4	| 6.75 |
| extraction |	6.65	| 6.90|
| humanities	| 9.1	| 9.3 |
| math	| 3.9	| 5.75 |
| reasoning	| 5.75	| 7.35 |
| roleplay	| 8.75	| 8.95 |
| stem	| 9.35	| 9.40 |
| writing	| 9.05	| 8.85 |

## 開発メンバー
畠山 歓 [リーダー]、asaoka_tadashi、Atsushi Saito、Chattso-GPT、Chihiro Arata、Chihiro HIGUCHI、Daichi Kohmoto、Esty、Hideaki Hayashi、hiroaki shioya、Issei Fujimoto、Jie Zeng、Jinsei Shiraishi、K. Nishizawa、Kazutaka Nishimae、Kunihiro Watanabe、masaki okamura、Minami Someya、Mさん、Nishi、Nishijima、p1atdev、Rumi Nakagawa、Ryota Mitsuhashi、Susumu Ota、takagi、Toshio Nishida、y_morinaga、Yuki Namiuchi、Yukie Kawano、永原恒治、加藤純、河越 淳、岩田 兼太朗、菊池満帆、熊田匡仁、江國翔太、佐野敏幸、山口 裕輝、西井康隆、川村 正春、片上 舜、堀江吏将、林寛太 (Kanta Hayashi)