--- 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で利用してください。 ``` [SYSTEM_PROMPT]system prompt[/SYSTEM_PROMPT][INST]user message 1[/INST]assistant message 1[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)の設定を参考にほぼそのまま流用させていただいております。この場を借りて感謝申し上げます。
See axolotl config 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: ```

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