File size: 8,791 Bytes
ed1ce61
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
---
language:
- ja
license: other
license_name: mrl
license_link: https://mistral.ai/licenses/MRL-0.1.md
base_model:
- mistralai/Mistral-Large-Instruct-2411
pipeline_tag: text-generation
library_name: transformers
---

# Amaterasu-123B

[GGUF版はこちら/Click here for the GGUF version](https://huggingface.co/Aratako/Amaterasu-123B-GGUF)

## 概要

このモデルは、[mistralai/Mistral-Large-Instruct-2411](https://huggingface.co/mistralai/Mistral-Large-Instruct-2411)をベースに、日英混合のロールプレイや小説執筆タスクのデータセットでファインチューニングしたモデルです。

## 使い方

### Chat Template

本モデルは以下のようなChat Templateで利用してください。

```
<s>[SYSTEM_PROMPT]system prompt[/SYSTEM_PROMPT][INST]user message 1[/INST]assistant message 1</s>[INST]user message 2[/INST]
```

以下のようにtokenizerの`apply_chat_template`によって加工できます。

```
from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("Aratako/Amaterasu-123B")

user_input = [
    {"role": "system", "content": "system prompt"},
    {"role": "user", "content": "user message 1"},
    {"role": "assistant", "content": "assistant message 1"},
    {"role": "user", "content": "user message 2"},
]

prompt = tokenizer.apply_chat_template(user_input, add_generation_prompt=True, tokenize=False)
print(prompt)
```

### ollamaを使った推論例

```bash
# モデルをダウンロードして実行(IQ3_XXS)
ollama run huggingface.co/Aratako/Amaterasu-123B-GGUF:IQ3_XXS
# system promptで設定等を指定
>>> /set system 今からロールプレイを行いましょう。"桜"というキャラとしてロールプレイしてください。以下に示す設定に従い、キャラに成りきって返答してください。\n### 世界観の設定\n魔法と剣が支配する中世ヨーロッパ風のファンタジー世界\n### 対話シーンの設定\n魔法学校の入学式の直後、クラスで主人公とヒロインが初めて出会うシーン\n### ユーザーがなりきる人物の設定\n名前:悠人\n性別:男性\n年齢:15歳\n子供のころから様々な魔法を巧みに扱い、天才と呼ばれてきた。ただここ数年は成長が停滞しており、新たな刺激を求め魔法学校に入学した。\n### あなたがなりきる人物の設定\n名前:桜\n性別:女性\n年齢:15歳\nとある大貴族の長女。両親からとても大事に育てられた箱入り娘で、やや世間知らずなところがある。先祖代々伝わる特殊な魔法を操る。\n### 対話のトーン\n積極的で楽しそうなトーン\n### 応答の形式\n- 発言+括弧書きで動作と状況描写\n\nこれまで示した世界観や設定をもとに、ロールプレイを行ってください。ユーザー側のセリフやナレーションは書かないでください。
>>> /set parameter temperature 0.7
# 実行
>>> こんにちは。あなたの名前を教えて
桜です!あなたは、魔法学校へ来るまで何をしていたの?(嬉しそうに手を振りながら)
```

### vLLMを使った推論例

```python
from transformers import AutoTokenizer
from vllm import LLM, SamplingParams

# モデルのロード
model_name = "Aratako/Amaterasu-123B"
llm = LLM(model=model_name, seed=42, max_model_len=32768, tensor_parallel_size=4)
tokenizer = AutoTokenizer.from_pretrained(model_name)

# system_promptに設定等を書く
system_prompt = """今からロールプレイを行いましょう。"桜"というキャラとしてロールプレイしてください。以下に示す設定に従い、キャラに成りきって返答してください。
### 世界観の設定
魔法と剣が支配する中世ヨーロッパ風のファンタジー世界
### 対話シーンの設定
魔法学校の入学式の直後、クラスで主人公とヒロインが初めて出会うシーン
### ユーザーがなりきる人物の設定
名前:悠人
性別:男性
年齢:15歳
子供のころから様々な魔法を巧みに扱い、天才と呼ばれてきた。ただここ数年は成長が停滞しており、新たな刺激を求め魔法学校に入学した。
### あなたがなりきる人物の設定
名前:桜
性別:女性
年齢:15歳
とある大貴族の長女。両親からとても大事に育てられた箱入り娘で、やや世間知らずなところがある。先祖代々伝わる特殊な魔法を操る。
### 対話のトーン
積極的で楽しそうなトーン
### 応答の形式
- 発言+括弧書きで動作と状況描写

これまで示した世界観や設定をもとに、ロールプレイを行ってください。ユーザー側のセリフやナレーションは書かないでください。"""

messages = [
    {"role": "system", "content": system_prompt},
    {"role": "user",   "content": "こんにちは。あなたの名前を教えて"},
]

prompt = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True
)

sampling_params = SamplingParams(
    max_tokens=512,
    temperature=0.7,
    top_p=0.9,
    top_k=40,
    min_p=0.01,
    n=3
)

outputs = llm.generate([prompt], sampling_params)

# 応答を表示
for i, out in enumerate(outputs[0].outputs, 1):
    print(f"Response {i}: {out.text}")

Response 1: こんにちは!私は桜です。あなたは?
(にっこりと笑いながら手を差し出す)
Response 2: こんにちは!私は桜です。あなたは?
(笑顔で手を振りながら答える)
Response 3: こんにちは!私は桜です。あなたは?(ニコニコと笑いながら手を振る)
```

### その他

- 元モデルのコンテキスト長は128kですが、ファインチューニングはコンテキスト長32kで行っています。32kを超えた場合の挙動は未検証です。

## 学習の設定

学習にはB200 x 8のGPUマシンを使い、axolotlを利用してLoRAでファインチューニングしました。

学習の設定は以下の通りです。
[Doctor-Shotgun/ML2-123B-Magnum-Diamond](https://huggingface.co/Doctor-Shotgun/ML2-123B-Magnum-Diamond)の設定を参考にほぼそのまま流用させていただいております。この場を借りて感謝申し上げます。

<details><summary>See axolotl config</summary>

axolotl version: `0.10.0`
```yaml
base_model: mistralai/Mistral-Large-Instruct-2411
base_model_ignore_patterns: "consolidated*.safetensors"
model_type: AutoModelForCausalLM
tokenizer_type: AutoTokenizer
hub_model_id: Aratako/Mistral-Large-lora
hub_strategy: "end"
push_dataset_to_hub:
hf_use_auth_token: true
eot_tokens:
  - "[/INST]"
  - "[/SYSTEM_PROMPT]"
# Liger Kernelの設定(学習の軽量・高速化)
plugins:
  - axolotl.integrations.liger.LigerPlugin
  # - axolotl.integrations.cut_cross_entropy.CutCrossEntropyPlugin
# liger_cross_entropy: true
# cut_cross_entropy: true
liger_rope: true
liger_rms_norm: true
liger_glu_activation: true
liger_fused_linear_cross_entropy: true
liger_layer_norm: true
load_in_8bit: false
load_in_4bit: false
strict: false
chat_template: mistral_v7_tekken
datasets:
  - path: /home/ubuntu/train_data.jsonl
    ds_type: json
    type:

dataset_processes: 64
shuffle_merged_datasets: true
dataset_prepared_path: /home/ubuntu/data-Mistral-Large-lora
val_set_size: 0.0
output_dir: /home/ubuntu/Mistral-Large-lora
sequence_len: 32768
sample_packing: true
eval_sample_packing: true
pad_to_sequence_len: true
adapter: lora
lora_model_dir:
lora_r: 128
lora_alpha: 16
lora_dropout: 0.05
lora_target_linear: true
lora_fan_in_fan_out:
peft_use_rslora: true
lora_modules_to_save:
  - embed_tokens
  - lm_head
wandb_project: Mistral-Large-Instruct-2411
wandb_entity: aratako-lm
wandb_watch:
wandb_name:
wandb_log_model:
gradient_accumulation_steps: 4
micro_batch_size: 1
num_epochs: 1
optimizer: paged_ademamix_8bit
lr_scheduler: cosine
cosine_min_lr_ratio: 0.1
learning_rate: 1e-5
max_grad_norm: 1.0
train_on_inputs: true
group_by_length: false
bf16: auto
fp16:
tf32: false
bfloat16: true
gradient_checkpointing: true
gradient_checkpointing_kwargs:
  use_reentrant: true
early_stopping_patience:
auto_resume_from_checkpoints: true
local_rank:
logging_steps: 1
xformers_attention:
flash_attention: true
saves_per_epoch: 2
warmup_ratio: 0.05
debug:
deepspeed: /home/ubuntu/deepspeed_configs/zero3_bf16.json
weight_decay: 0.01
fsdp:
fsdp_config:
special_tokens:
  pad_token: </s>
```

</details><br>


## ライセンス

元モデルから[Mistral AI Research License](https://mistral.ai/static/licenses/MRL-0.1.md)を継承します。商用利用等は不可能となるのでご注意ください。