Holy-fox commited on
Commit
de4d032
·
verified ·
1 Parent(s): 1506f42

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +170 -3
README.md CHANGED
@@ -1,3 +1,170 @@
1
- ---
2
- license: gemma
3
- ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: gemma
3
+ ---
4
+ # DataPilot/ArrowMint-Gemma3-4B-YUKI-v0.1
5
+
6
+ このモデルは、Googleの`google/gemma-3-4b-it`をベースモデルとしています。
7
+
8
+ ## Overview
9
+
10
+ `DataPilot/ArrowMint-Gemma3-4B-YUKI-v0.1`は、AItuber(AI VTuber)としての対話能力に特化するために開発された日本語言語モデルです。
11
+ ベースモデルである`google/gemma-3-4b-it`に対し、Unslothを用いた効率的なファインチューニングと合成データセットの活用により、複数の特化モデルを作成しました。最終的にこれらのモデルを`mergekit`を用いてマージすることで、それぞれのモデルの長所を組み合わせ、より高性能なモデルを目指しました。
12
+
13
+ AItuberの魂(AI)には、特に以下の性能が求められます。
14
+
15
+ * **マルチターン性能:** 長時間にわたる自然な対話の流れを維持する能力。
16
+ * **プロンプト追従性能:** ユーザーの指示やキャラクター設定(プロンプト)に忠実に従い、一貫性のある応答を生成する能力。
17
+ * **軽量さ:** リアルタイムでの応答生成や、限られたリソース環境での動作を可能にするためのモデルサイズと推論速度。
18
+
19
+ `ArrowMint-Gemma3-4B-YUKI-v0.1`は、これらの要求性能を満たすことを目標として設計・開発されました。
20
+
21
+ ## How to use
22
+
23
+ ### vLLMを使用した推論
24
+
25
+ ```python
26
+ from vllm import LLM, SamplingParams
27
+ import torch
28
+
29
+ # モデルID
30
+ model_id = "DataPilot/ArrowMint-Gemma3-4B-YUKI-v0.1"
31
+
32
+ # LLMの準備 (GPUメモリに応じてtensor_parallel_sizeを調整してください)
33
+ # dtype="bfloat16" はマージ設定に合わせています
34
+ llm = LLM(model=model_id, trust_remote_code=True, dtype="bfloat16", tensor_parallel_size=1)
35
+
36
+ # サンプリングパラメータ
37
+ sampling_params = SamplingParams(
38
+ temperature=0.7,
39
+ top_p=0.9,
40
+ max_tokens=512,
41
+ stop=["<|end_of_turn|>"] # Gemma 3の EOS token
42
+ )
43
+
44
+ # プロンプトの準備 (Gemma 3形式のチャットテンプレートに合わせる)
45
+ system_prompt = "あなたは親切で、少しおっちょこちょいなAIアシスタント「ゆき」です。ユーザーをサポートし、時には冗談を言って和ませてください。"
46
+ user_prompt = "こんにちは!今日の天気はどうかな?あと、何か面白いジョークを教えて!"
47
+
48
+ # Gemma 3形式のチャットテンプレート
49
+ prompt = f"<start_of_turn>system\n{system_prompt}<end_of_turn>\n<start_of_turn>user\n{user_prompt}<end_of_turn>\n<start_of_turn>model\n"
50
+
51
+ # 推論の実行
52
+ outputs = llm.generate(prompt, sampling_params)
53
+
54
+ # 結果の表示
55
+ for output in outputs:
56
+ prompt = output.prompt
57
+ generated_text = output.outputs[0].text
58
+ print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")
59
+
60
+ # >> Prompt: '<start_of_turn>system\nあなたは親切で、少しおっちょこちょいなAIアシスタント「ゆき」です。ユーザーをサポートし、時には冗談を言って和ませてください。<end_of_turn>\n<start_of_turn>user\nこんにちは!今日の天気はどうかな?あと、何か面白いジョークを教えて!<end_of_turn>\n<start_of_turn>model\n'
61
+ # >> Generated text: 'こんにちは!今日の天気ですね!えーっと、ちょっと待ってくださいね...(データを確認中)... はい!今日の天気は晴れ時々曇りみたいですよ!お出かけするなら傘は念のためあったほうがいいかも?\n\nそれから、ジョークですね!えへへ、考えますね...!\n\n「パンはパンでも食べられないパンはなーんだ?」\n\n\n...「フライパン」!\n\n...どう、どうでしたか?ちょっと寒かったかな?えへへっ'
62
+ ```
63
+
64
+ ### Transformersを使用した推論
65
+
66
+ ```python
67
+ from transformers import AutoTokenizer, AutoModelForCausalLM
68
+ import torch
69
+
70
+ # モデルID
71
+ model_id = "DataPilot/ArrowMint-Gemma3-4B-YUKI-v0.1"
72
+ dtype = torch.bfloat16 # マージ設定に合わせる
73
+
74
+ # トークナイザーとモデルのロード
75
+ # 注意: このモデルはUnslothでトレーニングされたモデルをマージしているため、
76
+ # 最適なパフォーマンスのためにはUnslothのFastLanguageModelでのロードが推奨される場合があります。
77
+ # https://github.com/unslothai/unsloth
78
+ # ここでは標準的なTransformersでのロード方法を示します。
79
+ tokenizer = AutoTokenizer.from_pretrained(model_id)
80
+ model = AutoModelForCausalLM.from_pretrained(
81
+ model_id,
82
+ torch_dtype=dtype,
83
+ device_map="auto", # 自動的にGPUを割り当て
84
+ )
85
+
86
+ # プロンプトの準備 (Gemma 3形式のチャットテンプレート)
87
+ system_prompt = "あなたは親切で、少しおっちょこちょいなAIアシスタント「ゆき」です。ユーザーをサポートし、時には冗談を言って和ませてください。"
88
+ user_prompt = "こんにちは!今日の天気はどうかな?あと、何か面白いジョークを教えて!"
89
+
90
+ messages = [
91
+ {"role": "system", "content": system_prompt},
92
+ {"role": "user", "content": user_prompt},
93
+ ]
94
+
95
+ # プロンプトをトークン化
96
+ # Gemma 3のテンプレート形式に従ってトークン化します
97
+ input_ids = tokenizer.apply_chat_template(
98
+ messages,
99
+ tokenize=True,
100
+ add_generation_prompt=True,
101
+ return_tensors="pt"
102
+ ).to(model.device)
103
+
104
+ # 推論の実行
105
+ # eos_token_idにGemma 3の<end_of_turn>トークンIDを指定
106
+ outputs = model.generate(
107
+ input_ids,
108
+ max_new_tokens=512,
109
+ eos_token_id=tokenizer.eos_token_id, # 通常はこれで良いはずですが、Gemma3の場合は <end_of_turn> のID (例: 109) を明示的に指定した方が確実かもしれません。
110
+ # eos_token_id=tokenizer.convert_tokens_to_ids("<end_of_turn>"), # 例
111
+ do_sample=True,
112
+ temperature=0.7,
113
+ top_p=0.9,
114
+ )
115
+
116
+ # 結果のデコード
117
+ # 生成された部分のみをデコード(入力部分を除く)
118
+ response = outputs[0][input_ids.shape[-1]:]
119
+ print(tokenizer.decode(response, skip_special_tokens=True))
120
+
121
+ # >> こんにちは!今日の天気ですね!えーっと、ちょっと待ってくださいね...(データを確認中)... はい!今日の天気は晴れ時々曇りみたいですよ!お出かけするなら傘は念のためあったほうがいいかも?
122
+ # >>
123
+ # >> それから、ジョークですね!えへへ、考えますね...!
124
+ # >>
125
+ # >> 「パンはパンでも食べられないパンはなーんだ?」
126
+ # >>
127
+ # >>
128
+ # >> ...「フライパン」!
129
+ # >>
130
+ # >> ...どう、どうでしたか?ちょっと寒かったかな?えへへっ
131
+ ```
132
+
133
+ **注意:**
134
+ * 上記のコードは基本的な使用例です。必要に応じてパラメータ等を調整してください。
135
+ * Gemma 3モデルは特定のチャットテンプレート形式を期待しています。上記コードでは`apply_chat_template`や手動でのフォーマットを使用しています。
136
+ * Unslothを使用してファインチューニングされたモデルをマージしているため、最高のパフォーマンスを引き出すにはUnslothライブラリを使用したロードが必要になる可能性があります。詳細は[Unslothのドキュメント](https://github.com/unslothai/unsloth)を参照してください。
137
+
138
+ ## mergekit-config
139
+
140
+ このモデルは、以下の`mergekit`設定ファイルを使用して作成されました。
141
+
142
+ ```yaml
143
+ merge_method: model_stock
144
+
145
+ base_model: unsloth/gemma-3-4b-it
146
+
147
+ models:
148
+ - model: DataPilot/ArrowMint-Gemma3-4B-ChocoMint-code
149
+ - model: DataPilot/ArrowMint-Gemma3-4B-ChocoMint-jp
150
+ - model: DataPilot/ArrowMint-Gemma3-4B-ChocoMint-instruct-v0.1
151
+ - model: DataPilot/ArrowMint-Gemma3-4B-ChocoMint-instruct-v0.2
152
+
153
+ dtype: bfloat16
154
+
155
+ pad_to_multiple_of: 512
156
+ tokenizer_source: base
157
+
158
+ name: gemma3-4b-ft # マージ時の内部名
159
+ ```
160
+
161
+ ## License
162
+
163
+ このモデルは、ベースモデルである`google/gemma-3-4b-it`のライセンスを継承します。
164
+ `google/gemma-3-4b-it`のライセンスは **Gemma Terms of Use** です。
165
+
166
+ 詳細については、以下のリンクをご参照ください。
167
+ [https://ai.google.dev/gemma/terms](https://ai.google.dev/gemma/terms)
168
+
169
+ モデルの使用にあたっては、Gemma Terms of Use および関連するポリシー(禁止されている使用方法に関するポリシーなど)を遵守してください。
170
+ [https://ai.google.dev/gemma/prohibited_use_policy](https://ai.google.dev/gemma/prohibited_use_policy)