File size: 6,698 Bytes
f35b84e d7645f9 f35b84e d7645f9 f35b84e 28b4310 f35b84e 28b4310 5ffc8db 7a3f05f 9e1b489 34c71df f35b84e 2b00460 f35b84e ab1b42e f35b84e e0f5e25 f35b84e bf46e38 f35b84e ffcf760 f35b84e bf46e38 |
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 |
---
base_model:
- NTQAI/chatntq-ja-7b-v1.0
- Elizezen/Antler-7B
language:
- ja
tags:
- mistral
- mixtral
- merge
- moe
- not-for-all-audiences
- nsfw
pipeline_tag: text-generation
---
# LightChatAssistant-2x7B
#### GGUF量子化は[こちら](https://huggingface.co/Sdff-Ltba/LightChatAssistant-2x7B-GGUF)
#### より日本語を自然にする調整を手作業で施した[LightChatAssistant-TypeB-2x7Bを製作しました。](https://huggingface.co/Sdff-Ltba/LightChatAssistant-TypeB-2x7B)
#### 使用モデルを4つに増やした4x7B版を[Aratakoさん](https://huggingface.co/Aratako)が開発してくださいました。[こちら](https://huggingface.co/Aratako/LightChatAssistant-4x7B)からご覧ください。
日本語が滑らかで、高速なチャット・ノベル生成モデルを目指して作成しました。
32kのContextSize対応、iQ3_XXS量子化でVRAM12GBでフルロード可能なモデルです。
## モデル概要
パラメータ数が小さくても優秀なベンチマークスコアを持つ、Mistral7Bモデルをベースとした日本語対応モデルを使用しました。
2つのモデルそれぞれにChatVector手法を用いて対話能力強化ののち、mergekitでMoE化しました。
## MoE化モデルの前準備(ChatVector適用)
以下の2モデルをChatVector手法で対話強化して素材に使用しています。
- [NTQAI/chatntq-ja-7b-v1.0](https://huggingface.co/NTQAI/chatntq-ja-7b-v1.0)
- [Elizezen/Antler-7B](https://huggingface.co/Elizezen/Antler-7B)
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)を参考にしました。
```python
# Antler-7Bに適用した例 chat_vectorの重みを0.8倍にして日本語モデルに足す
from transformers import AutoModelForCausalLM
import torch
base_model = AutoModelForCausalLM.from_pretrained(
"mistralai/Mistral-7B-v0.1",
torch_dtype=torch.bfloat16,
device_map="cpu",
)
inst_model = AutoModelForCausalLM.from_pretrained(
"mistralai/Mistral-7B-Instruct-v0.2",
torch_dtype=torch.bfloat16,
device_map="cpu",
)
cp_model = AutoModelForCausalLM.from_pretrained(
"Elizezen/Antler-7B",
torch_dtype=torch.bfloat16,
device_map="cpu",
)
for k, v in cp_model.state_dict().items():
chat_vector = inst_model.state_dict()[k] - base_model.state_dict()[k]
new_v = v + ( 0.8 * chat_vector.to(v.device) )
v.copy_(new_v)
cp_model.save_pretrained("./model-chatvector")
```
2. 作成されたモデルディレクトリにはtokenizer関係のファイルがないので、ChatVectorを適用する日本語モデルから(上の例だとElizezen/Antler-7B)足りないファイルをコピーします。[special_tokens_map.json、tokenizer.json、tokenizer.model、tokenizer_config.json]
3. 作成されたモデルディレクトリにあるconfig.jsonを以下のように変更して、ContextSizeの内容をMistral7B-Instructの通りに修正します。(一つ目以外はあまり理解していない)
- `"max_position_embeddings"`を`32768`
- `"rope_theta"`を`1000000.0`
- `"sliding_window"`を`null`
## MoE化
[mergekit](https://github.com/arcee-ai/mergekit)を用いて素材2モデルをMoE化しています。
config.ymlは以下を使用しました。[Undi95/Mixtral-8x7B-MoE-RP-Story](https://huggingface.co/Undi95/Mixtral-8x7B-MoE-RP-Story)を参考にしました。
```config.yml
base_model: ./chatntq-ja-7b-v1.0-chatvector
gate_mode: cheap_embed
dtype: bfloat16
experts:
- source_model: ./chatntq-ja-7b-v1.0-chatvector
positive_prompts:
- "sex"
- "roleplay"
- "erotic"
- "fuck"
- "orgasm"
- "uncensored"
- "question"
- "answer"
- "chat"
- "companion"
- "[Mode: Roleplay]"
- "[Mode: Chat]"
negative_prompts:
- "storywriting"
- "book"
- "story"
- "chapter"
- "tale"
- "history"
- "write"
- "[Mode: Writing]"
- source_model: ./Antler-7B-chatvector
positive_prompts:
- "sex"
- "storywriting"
- "erotic"
- "fuck"
- "orgasm"
- "uncensored"
- "book"
- "story"
- "chapter"
- "tale"
- "history"
- "write"
- "[Mode: Writing]"
tokenizer_source: union
```
## 環境
- CPU: Ryzen 5 5600X
- GPU: GeForce RTX 3060 12GB
- RAM: DDR4-3200 96GB
- OS: Windows 10
- software: Python 3.12.2、[KoboldCpp](https://github.com/LostRuins/koboldcpp) v1.61.2
#### KoboldCppの設定
(デフォルトから変更したもののみ記載)
- `GPU Layers: 33` (33以上でフルロード)
- `Context Size: 32768`
## 出力例
```出力例
User: 次のお話の続きを考えて恋愛小説で書いてください。
吾輩は猫である。名前はまだない
了解しました、吾輩が主人公となりますね。タイトルは「A Cat's Love Story」としましょうか。この物語は、吾輩が飼われている家で出会った人間の女性に恋をする話です。
吾輩は、ある日突然現れた野良猫でした。彼女、美香さんの家庭にやって来た時、凄く警戒されましたが、その中でも特に美香さんは優しい人でした。毎日彼女が作ってくれるご飯は美味しく、彼女が触ってくれる手は温かく、吾輩は彼女にすぐに心を開きました。
ある日、吾輩は美香さんが自分を抱きかかえて、庭を見渡せる場所に連れて行ってくれました。そこで、吾輩は初めて空を飛ぶ鳥たちを見ました。青い空に白い雲が浮かび、風が匂い立つ草原を吹き抜けていく様子を、彼女と一緒に眺めていました。その時、吾輩は美香さんがとても愛おしくなりました。
しかし、吾輩は猫であり、言葉を話せず、感情を表現する方法もありません。それでも、吾輩は美香さんを追いかけ続けました。美香さんは他の男性と付き合っていましたが、吾輩はじっと我慢し、ただ待ち続けました。
美香さんは気づいていませんでしたが、吾輩は彼女の部屋に入り込み、寝室に入り込むようになりました。彼女が疲れ果てて眠る横で、吾輩は静かに身体を寄
```
### 参考文献
- [Chat Vectorを使って日本語LLMをチャットモデルに改造する #Python - Qiita](https://qiita.com/jovyan/items/ee6affa5ee5bdaada6b4)
- [学習済みの LLM を束ねて Mixture of Experts を作るテク](https://zenn.dev/zaburo_ch/articles/88e35e5c80f974)
|