|
|
--- |
|
|
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)を継承します。商用利用等は不可能となるのでご注意ください。 |