Sdff-Ltba commited on
Commit
f35b84e
1 Parent(s): bdbc2ef

Upload README.md

Browse files
Files changed (1) hide show
  1. README.md +140 -0
README.md ADDED
@@ -0,0 +1,140 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ language:
3
+ - ja
4
+ tags:
5
+ - mistral
6
+ - mixtral
7
+ - not-for-all-audiences
8
+ - nsfw
9
+ pipeline_tag: text-generation
10
+ ---
11
+
12
+ # chatntq-chatvector_MoE_Antler-chatvector_2x7B
13
+
14
+ 日本語が滑らかで、高速なチャット・ノベル生成モデルを目指して作成しました。
15
+ 32kのContextSize対応、iq3_xxs量子化でVRAM12GBでフルロード可能なモデルです。
16
+
17
+ ## モデル概要
18
+
19
+ パラメータ数が小さくても優秀なベンチマークスコアを持つ、Mistral7Bモデルをベースとした日本語対応モデルを使用しました。
20
+ 2つのモデルそれぞれにChatVector手法を用いて対話能力強化ののち、mergekitでMoE化しました。
21
+
22
+ ## MoE化モデルの前準備(ChatVector適用)
23
+
24
+ 以下の2モデルをChatVector手法で対話強化して素材に使用しています。
25
+
26
+ - [NTQAI/chatntq-ja-7b-v1.0](https://huggingface.co/NTQAI/chatntq-ja-7b-v1.0)
27
+ - [Elizezen/Antler-7B](https://huggingface.co/Elizezen/Antler-7B)
28
+
29
+ 1. ChatVectorは以下を用いて適用します。`chat_vector`を0.8倍にするのは[aixsatoshi/Swallow-MX-8x7b-NVE-chatvector-Mixtral-instruct-v2](https://huggingface.co/aixsatoshi/Swallow-MX-8x7b-NVE-chatvector-Mixtral-instruct-v2)を参考にしました。
30
+ ```python
31
+ # Antler-7Bに適用した例 chat_vectorの重みを0.8倍にして日本語モデルに足す
32
+
33
+ from transformers import AutoModelForCausalLM
34
+ import torch
35
+
36
+ base_model = AutoModelForCausalLM.from_pretrained(
37
+ "mistralai/Mistral-7B-v0.1",
38
+ torch_dtype=torch.bfloat16,
39
+ device_map="cpu",
40
+ )
41
+ inst_model = AutoModelForCausalLM.from_pretrained(
42
+ "mistralai/Mistral-7B-Instruct-v0.2",
43
+ torch_dtype=torch.bfloat16,
44
+ device_map="cpu",
45
+ )
46
+ cp_model = AutoModelForCausalLM.from_pretrained(
47
+ "Elizezen/Antler-7B",
48
+ torch_dtype=torch.bfloat16,
49
+ device_map="cpu",
50
+ )
51
+
52
+ for k, v in cp_model.state_dict().items():
53
+ chat_vector = inst_model.state_dict()[k] - base_model.state_dict()[k]
54
+ new_v = v + ( 0.8 * chat_vector.to(v.device) )
55
+ v.copy_(new_v)
56
+
57
+ cp_model.save_pretrained("./model-chatvector")
58
+ ```
59
+
60
+ 2. 作成されたモデルディレクトリにはtokenizer関係のファイルがないので、ChatVectorを適用する日本語モデルから(上の例だとElizezen/Antler-7B)足りないファイルをコピーします。[special_tokens_map.json、tokenizer.model、tokenizer_config.json]
61
+
62
+ 3. 作成されたモデルディレクトリにあるconfig.jsonを以下のように変更して、ContextSizeの内容をMistral7BInstructの通りに修正します。(一つ目以外はあまり理解していない)
63
+
64
+ - "max_position_embeddings"を32768
65
+ - "rope_theta"を1000000.0
66
+ - "sliding_window"をnull
67
+
68
+ ## MoE化
69
+
70
+ [mergekit](https://github.com/arcee-ai/mergekit)を用いて素材2モデルをMoE化しています。
71
+
72
+ config.ymlは以下を使用しました。[Undi95/Mixtral-8x7B-MoE-RP-Story](https://huggingface.co/Undi95/Mixtral-8x7B-MoE-RP-Story)を参考にしました。
73
+ ```config.yml
74
+ base_model: ./chatntq-ja-7b-v1.0-chatvector
75
+ gate_mode: cheap_embed
76
+ dtype: bfloat16
77
+ experts:
78
+ - source_model: ./chatntq-ja-7b-v1.0-chatvector
79
+ positive_prompts:
80
+ - "sex"
81
+ - "roleplay"
82
+ - "erotic"
83
+ - "fuck"
84
+ - "orgasm"
85
+ - "uncensored"
86
+ - "question"
87
+ - "answer"
88
+ - "chat"
89
+ - "companion"
90
+ - "[Mode: Roleplay]"
91
+ - "[Mode: Chat]"
92
+ negative_prompts:
93
+ - "storywriting"
94
+ - "book"
95
+ - "story"
96
+ - "chapter"
97
+ - "tale"
98
+ - "history"
99
+ - "write"
100
+ - "[Mode: Writing]"
101
+ - source_model: ./Antler-7B-chatvector
102
+ positive_prompts:
103
+ - "sex"
104
+ - "storywriting"
105
+ - "erotic"
106
+ - "fuck"
107
+ - "orgasm"
108
+ - "uncensored"
109
+ - "book"
110
+ - "story"
111
+ - "chapter"
112
+ - "tale"
113
+ - "history"
114
+ - "write"
115
+ - "[Mode: Writing]"
116
+ tokenizer_source: union
117
+ ```
118
+
119
+ ## 出力例
120
+
121
+ ```出力例
122
+ User: 次のお話の続きを考えて恋愛小説で書いてください。
123
+ 吾輩は猫である。名前はまだない
124
+
125
+
126
+ 了解しました、吾輩が主人公となりますね。タイトルは「A Cat's Love Story」としましょうか。この物語は、吾輩が飼われている家で出会った人間の女性に恋をする話です。
127
+
128
+ 吾輩は、ある日突然現れた野良猫でした。彼女、美香さんの家庭にやって来た時、凄く警戒されましたが、その中でも特に美香さんは優しい人でした。毎日彼女が作ってくれるご飯は美味しく、彼女が触ってくれる手は温かく、吾輩は彼女にすぐに心を開きました。
129
+
130
+ ある日、吾輩は美香さんが自分を抱きかかえて、庭を見渡せる場所に連れて行ってくれました。そこで、吾輩は初めて空を飛ぶ鳥たちを見ました。青い空に白い雲が浮かび、風が匂い立つ草原を吹き抜けていく様子を、彼女と一緒に眺めていました。その時、吾輩は美香さんがとても愛おしくなりました。
131
+
132
+ しかし、吾輩は��であり、言葉を話せず、感情を表現する方法もありません。それでも、吾輩は美香さんを追いかけ続けました。美香さんは他の男性と付き合っていましたが、吾輩はじっと我慢し、ただ待ち続けました。
133
+
134
+ 美香さんは気づいていませんでしたが、吾輩は彼女の部屋に入り込み、寝室に入り込むようになりました。彼女が疲れ果てて眠る横で、吾輩は静かに身体を寄
135
+ ```
136
+
137
+ ### 参考文献
138
+
139
+ [Chat Vectorを使って日本語LLMをチャットモデルに改造する #Python - Qiita](https://qiita.com/jovyan/items/ee6affa5ee5bdaada6b4)
140
+ [学習済みの LLM を束ねて Mixture of Experts を作るテク](https://zenn.dev/zaburo_ch/articles/88e35e5c80f974)