autoprogrammer commited on
Commit
e97598c
·
verified ·
1 Parent(s): 71b8394

Upload folder using huggingface_hub

Browse files
README.md ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # DenseBackwardOLMoE
2
+
3
+ 自定义的OLMoE模型,使用DenseBackwardOlmoeSparseMoeBlock替换原版的MoE模块,实现dense backward功能。
4
+
5
+ ## 用法
6
+
7
+ ```python
8
+ from transformers import AutoConfig, AutoModelForCausalLM
9
+
10
+ # 使用trust_remote_code=True加载模型
11
+ config = AutoConfig.from_pretrained("autoprogrammer/olmoe_densebackward", trust_remote_code=True)
12
+ model = AutoModelForCausalLM.from_pretrained("autoprogrammer/olmoe_densebackward", config=config, trust_remote_code=True)
13
+ ```
__init__.py ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # 导出自定义配置和模型类
2
+ from .configuration_densebackward_olmoe0125 import DenseBackwardOLMoEConfig
3
+ from .modeling_densebackward_olmoe0125 import DenseBackwardOLMoEForCausalLM, DenseBackwardOlmoeSparseMoeBlock
4
+
5
+ # 显式注册模型类型
6
+ from transformers.models.auto.configuration_auto import CONFIG_MAPPING
7
+ from transformers.models.auto.modeling_auto import MODEL_FOR_CAUSAL_LM_MAPPING
8
+
9
+ __all__ = [
10
+ "DenseBackwardOLMoEConfig",
11
+ "DenseBackwardOLMoEForCausalLM",
12
+ "DenseBackwardOlmoeSparseMoeBlock"
13
+ ]
config.json ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_name_or_path": "allenai/OLMoE-1B-7B-0125",
3
+ "architectures": [
4
+ "DenseBackwardOLMoEForCausalLM"
5
+ ],
6
+ "auto_map": {
7
+ "AutoConfig": "configuration_densebackward_olmoe0125.DenseBackwardOLMoEConfig",
8
+ "AutoModel": "modeling_densebackward_olmoe0125.DenseBackwardOLMoEForCausalLM",
9
+ "AutoModelForCausalLM": "modeling_densebackward_olmoe0125.DenseBackwardOLMoEForCausalLM"
10
+ },
11
+ "attention_bias": false,
12
+ "attention_dropout": 0.0,
13
+ "clip_qkv": null,
14
+ "eos_token_id": 50279,
15
+ "hidden_act": "silu",
16
+ "hidden_size": 2048,
17
+ "initializer_range": 0.02,
18
+ "intermediate_size": 1024,
19
+ "max_position_embeddings": 4096,
20
+ "model_type": "olmoe",
21
+ "norm_topk_prob": false,
22
+ "num_attention_heads": 16,
23
+ "num_experts": 64,
24
+ "num_experts_per_tok": 8,
25
+ "num_hidden_layers": 16,
26
+ "num_key_value_heads": 16,
27
+ "output_router_logits": false,
28
+ "pad_token_id": 1,
29
+ "rms_norm_eps": 1e-05,
30
+ "rope_scaling": null,
31
+ "rope_theta": 10000.0,
32
+ "router_aux_loss_coef": 0.01,
33
+ "tie_word_embeddings": false,
34
+ "torch_dtype": "float32",
35
+ "transformers_version": "4.45.2",
36
+ "use_cache": true,
37
+ "vocab_size": 50304
38
+ }
configuration_densebackward_olmoe0125.py ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # my_custom_olmoe/configuration_custom.py
2
+
3
+ # 注意:根据你的 transformers 版本,导入官方 OLMoE 配置的路径可能需要调整
4
+ from transformers.models.olmoe.configuration_olmoe import OlmoeConfig
5
+
6
+ class DenseBackwardOLMoEConfig(OlmoeConfig):
7
+ model_type = "DenseBackward_olmoe" # 这里覆盖 model_type 字段,便于后续识别
8
+
9
+ # 添加auto_map用于支持AutoClass
10
+ auto_map = {
11
+ "AutoConfig": "configuration_custom.DenseBackwardOLMoEConfig",
12
+ "AutoModelForCausalLM": "modeling_custom.DenseBackwardOLMoEForCausalLM"
13
+ }
14
+
15
+ def __init__(self, model_marker="DenseBackward_olmoe_marker", **kwargs):
16
+ super().__init__(**kwargs)
17
+ self.model_marker = model_marker
18
+ self.intermediate_size= 1024
19
+ #test
20
+ def main():
21
+ config = DenseBackwardOLMoEConfig(model_marker="DenseBackward_olmoe_marker")
22
+ print(config)
23
+
24
+ if __name__ == "__main__":
25
+ main()
generation_config.json ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ {
2
+ "_from_model_config": true,
3
+ "eos_token_id": 50279,
4
+ "pad_token_id": 1,
5
+ "transformers_version": "4.45.2"
6
+ }
model-00001-of-00006.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:df5a700fa91fd94e9d1a7ae523c5ae055f5879778a02ea19758edd37089da1ca
3
+ size 4993992240
model-00002-of-00006.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5f299f21e6de71f5334e937fd51a083bab8cffe55682488219e4082d9558fdba
3
+ size 4992966080
model-00003-of-00006.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4491eb552fd917a6777260f75c88e714f3174fbba7dd69d44b97c4124ddcd56b
3
+ size 4992966080
model-00004-of-00006.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:7aeea413752cd17a8e7c343aa436594a8158d279817e4993aa5df4b7c7cfdf22
3
+ size 4992966416
model-00005-of-00006.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:18c7f749af753359e10c33a9c5deec688b7155f7c01052937806cd351c52cc38
3
+ size 4992966680
model-00006-of-00006.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:299009ba118f5e918de33573a316ad3d3b9236651986fb1a14dc894f55269e67
3
+ size 2711184968
model.safetensors.index.json ADDED
The diff for this file is too large to render. See raw diff
 
modeling_densebackward_olmoe0125.py ADDED
@@ -0,0 +1,157 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # my_custom_olmoe/modeling_custom.py
2
+
3
+ import torch
4
+ import torch.nn as nn
5
+ import torch.nn.functional as F
6
+
7
+ # 导入官方实现(注意根据你的 transformers 版本调整导入路径)
8
+ from transformers.models.olmoe.modeling_olmoe import OlmoeForCausalLM, OlmoeSparseMoeBlock, OlmoeMLP
9
+ from .configuration_densebackward_olmoe0125 import DenseBackwardOLMoEConfig
10
+
11
+
12
+ class DenseBackwardOlmoeSparseMoeBlock(OlmoeSparseMoeBlock):
13
+
14
+ """
15
+ 继承自官方 OlmoeSparseMoeBlock,实现 dense backward 功能:
16
+ 前向输出依旧保持与官方相同(即稀疏计算结果),
17
+ 但在反向传播时,通过直通梯度让 dense 计算的梯度传递回来,
18
+ dense 输出通过对每个专家在所有 token 上进行计算,并利用全 routing 权重加权获得。
19
+
20
+ 输入:
21
+ hidden_states: Tensor, shape (batch_size, sequence_length, hidden_dim)
22
+ 输出:
23
+ final_output: Tensor, shape (batch_size, sequence_length, hidden_dim)
24
+ router_logits: Tensor, shape (batch_size * sequence_length, num_experts)
25
+ """
26
+ def forward(self, hidden_states: torch.Tensor):
27
+ batch_size, seq_length, hidden_dim = hidden_states.shape
28
+ # 记录输入张量的数据类型,确保所有计算保持一致
29
+ dtype = hidden_states.dtype
30
+ device = hidden_states.device
31
+
32
+ flat_hidden = hidden_states.view(-1, hidden_dim) # (B*seq_len, hidden_dim)
33
+ N_tokens = flat_hidden.size(0)
34
+
35
+ # 计算路由逻辑
36
+ router_logits = self.gate(flat_hidden) # (B*seq_len, num_experts)
37
+ # 确保router_logits和flat_hidden数据类型一致
38
+ router_logits = router_logits.to(dtype=dtype)
39
+ routing_weights = F.softmax(router_logits, dim=1, dtype=dtype) # (B*seq_len, num_experts)
40
+
41
+ # 选择top-k专家
42
+ routing_weights_topk, selected_experts = torch.topk(routing_weights, self.top_k, dim=-1)
43
+ if self.norm_topk_prob:
44
+ routing_weights_topk = routing_weights_topk / routing_weights_topk.sum(dim=-1, keepdim=True)
45
+ # 确保归一化后类型一致
46
+ routing_weights_topk = routing_weights_topk.to(dtype=dtype)
47
+
48
+ # ---------- 真实计算所有专家输出(密集计算)----------
49
+ all_expert_outputs = torch.zeros((N_tokens, self.num_experts, hidden_dim),
50
+ dtype=dtype, device=device)
51
+
52
+ for expert_idx in range(self.num_experts):
53
+ expert_layer = self.experts[expert_idx]
54
+ # 对所有token都计算当前专家的输出
55
+ expert_output = expert_layer(flat_hidden) # (N_tokens, hidden_dim)
56
+ # 计算当前expert的激活mask,只有激活token梯度被保留
57
+ activation_mask = (selected_experts == expert_idx).any(dim=1).float().unsqueeze(-1).to(dtype)
58
+ # 注册梯度hook,使得非激活token的梯度被置零
59
+ if expert_output.requires_grad:
60
+ expert_output.register_hook(lambda grad, mask=activation_mask: grad * mask)
61
+ # 确保专家输出与预期类型一致
62
+ expert_output = expert_output.to(dtype=dtype)
63
+ all_expert_outputs[:, expert_idx, :] = expert_output
64
+
65
+ # ---------- 提取激活专家输出(稀疏前向)- 使用张量批处理 ----------
66
+ # 创建索引张量,第一维是token索引,第二维是专家索引
67
+ token_indices = torch.arange(N_tokens, device=device).unsqueeze(1).expand(-1, self.top_k)
68
+ batch_indices = token_indices.reshape(-1)
69
+ expert_indices = selected_experts.reshape(-1)
70
+
71
+ # 批量提取激活专家的输出
72
+ selected_outputs = all_expert_outputs[batch_indices, expert_indices].view(N_tokens, self.top_k, hidden_dim)
73
+
74
+ # 扩展权重以便批量相乘
75
+ expanded_weights = routing_weights_topk.unsqueeze(-1) # (N_tokens, top_k, 1)
76
+ expanded_weights = expanded_weights.to(dtype=dtype)
77
+
78
+ # 权重乘以专家输出并求和
79
+ sparse_output = (selected_outputs * expanded_weights).sum(dim=1) # (N_tokens, hidden_dim)
80
+
81
+ # ---------- 密集计算聚合(用于反向传播)----------
82
+ # 使用所有专家的输出和路由权重计算密集输出
83
+ routing_weights_expanded = routing_weights.unsqueeze(-1) # (N_tokens, num_experts, 1)
84
+ routing_weights_expanded = routing_weights_expanded.to(dtype=dtype)
85
+ dense_outputs = (all_expert_outputs * routing_weights_expanded).sum(dim=1) # (N_tokens, hidden_dim)
86
+
87
+ # ---------- 组合稀疏前向和密集反向 ----------
88
+ # sparse_output.detach()保留稀疏前向计算图
89
+ # (dense_outputs - dense_outputs.detach())只保留密集反向梯度
90
+ final_flat = sparse_output.detach() + (dense_outputs - dense_outputs.detach())
91
+ final_flat = final_flat.to(dtype=dtype) # 确保最终输出类型一致
92
+ final_output = final_flat.view(batch_size, seq_length, hidden_dim)
93
+
94
+ return final_output, router_logits
95
+
96
+ class DenseBackwardOLMoEForCausalLM(OlmoeForCausalLM):
97
+ """
98
+ 自定义的 Olmoe ForCausalLM 模型,使用新的 DenseBackwardOlmoeSparseMoeBlock 替换原版的 MoE 模块,
99
+ 以实现 dense backward 功能。
100
+
101
+ 配置类:DenseBackwardOLMoEConfig
102
+ """
103
+ config_class = DenseBackwardOLMoEConfig
104
+ base_model_prefix = "olmoe"
105
+
106
+ def __init__(self, config):
107
+ # 首先调用父类初始化方法
108
+ super().__init__(config)
109
+
110
+ # 不要尝试重新赋值self,而是从预训练模型加载并更新当前模型
111
+ pretrained_model = OlmoeForCausalLM.from_pretrained("allenai/OLMoE-1B-7B-0125")
112
+
113
+ # 复制预训练模型的状态到当前模型
114
+ self.config = pretrained_model.config
115
+ self.model = pretrained_model.model
116
+ self.vocab_size = pretrained_model.vocab_size
117
+ self.router_aux_loss_coef = pretrained_model.router_aux_loss_coef
118
+ self.num_experts = pretrained_model.num_experts
119
+ self.lm_head = pretrained_model.lm_head
120
+
121
+ # 遍历模型中所有 decoder 层,替换每个 OlmoeSparseMoeBlock 为 DenseBackward 版本
122
+ # 此处假设官方模型在 self.model.layers 中组织 decoder 层,
123
+ # 且每层中 mlp 模块包含属性 sparse_moe_block。
124
+ for layer in self.model.layers:
125
+ if hasattr(layer.mlp, "gate"):
126
+ print("111")
127
+ orig_block = layer.mlp
128
+ # 通过直接复制原版属性创建新的块
129
+ new_block = DenseBackwardOlmoeSparseMoeBlock(config) # 或其他适当参数
130
+ # 然后手动复制需要共享的属性:
131
+ new_block.gate = orig_block.gate
132
+ new_block.experts = orig_block.experts
133
+ new_block.num_experts = orig_block.num_experts
134
+ new_block.top_k = orig_block.top_k
135
+ new_block.norm_topk_prob = orig_block.norm_topk_prob
136
+ layer.mlp = new_block
137
+ print(type(layer.mlp))
138
+ # 释放预训练模型内存
139
+ del pretrained_model
140
+ import gc
141
+ gc.collect()
142
+ torch.cuda.empty_cache()
143
+ print("原始预训练模型已释放")
144
+
145
+ def main():
146
+ config = DenseBackwardOLMoEConfig( # 官方模型参数
147
+ model_marker="DenseBackward_olmoe_marker",
148
+ )
149
+ # 创建自定义模型实例
150
+ model = DenseBackwardOLMoEForCausalLM(config)
151
+ print(type(model))
152
+ print(type(model.model))
153
+ print(type(model.model.layers[0]))
154
+ print(type(model.model.layers[0].mlp))
155
+ print(type(model.model.layers[0].mlp.experts))
156
+ if __name__ == "__main__":
157
+ main()
special_tokens_map.json ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "eos_token": {
3
+ "content": "<|endoftext|>",
4
+ "lstrip": false,
5
+ "normalized": false,
6
+ "rstrip": false,
7
+ "single_word": false
8
+ },
9
+ "pad_token": {
10
+ "content": "<|padding|>",
11
+ "lstrip": false,
12
+ "normalized": false,
13
+ "rstrip": false,
14
+ "single_word": false
15
+ }
16
+ }
tokenizer.json ADDED
The diff for this file is too large to render. See raw diff
 
tokenizer_config.json ADDED
@@ -0,0 +1,239 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "add_bos_token": false,
3
+ "add_eos_token": false,
4
+ "add_prefix_space": false,
5
+ "added_tokens_decoder": {
6
+ "0": {
7
+ "content": "|||IP_ADDRESS|||",
8
+ "lstrip": false,
9
+ "normalized": true,
10
+ "rstrip": false,
11
+ "single_word": false,
12
+ "special": false
13
+ },
14
+ "1": {
15
+ "content": "<|padding|>",
16
+ "lstrip": false,
17
+ "normalized": false,
18
+ "rstrip": false,
19
+ "single_word": false,
20
+ "special": true
21
+ },
22
+ "50254": {
23
+ "content": " ",
24
+ "lstrip": false,
25
+ "normalized": true,
26
+ "rstrip": false,
27
+ "single_word": false,
28
+ "special": false
29
+ },
30
+ "50255": {
31
+ "content": " ",
32
+ "lstrip": false,
33
+ "normalized": true,
34
+ "rstrip": false,
35
+ "single_word": false,
36
+ "special": false
37
+ },
38
+ "50256": {
39
+ "content": " ",
40
+ "lstrip": false,
41
+ "normalized": true,
42
+ "rstrip": false,
43
+ "single_word": false,
44
+ "special": false
45
+ },
46
+ "50257": {
47
+ "content": " ",
48
+ "lstrip": false,
49
+ "normalized": true,
50
+ "rstrip": false,
51
+ "single_word": false,
52
+ "special": false
53
+ },
54
+ "50258": {
55
+ "content": " ",
56
+ "lstrip": false,
57
+ "normalized": true,
58
+ "rstrip": false,
59
+ "single_word": false,
60
+ "special": false
61
+ },
62
+ "50259": {
63
+ "content": " ",
64
+ "lstrip": false,
65
+ "normalized": true,
66
+ "rstrip": false,
67
+ "single_word": false,
68
+ "special": false
69
+ },
70
+ "50260": {
71
+ "content": " ",
72
+ "lstrip": false,
73
+ "normalized": true,
74
+ "rstrip": false,
75
+ "single_word": false,
76
+ "special": false
77
+ },
78
+ "50261": {
79
+ "content": " ",
80
+ "lstrip": false,
81
+ "normalized": true,
82
+ "rstrip": false,
83
+ "single_word": false,
84
+ "special": false
85
+ },
86
+ "50262": {
87
+ "content": " ",
88
+ "lstrip": false,
89
+ "normalized": true,
90
+ "rstrip": false,
91
+ "single_word": false,
92
+ "special": false
93
+ },
94
+ "50263": {
95
+ "content": " ",
96
+ "lstrip": false,
97
+ "normalized": true,
98
+ "rstrip": false,
99
+ "single_word": false,
100
+ "special": false
101
+ },
102
+ "50264": {
103
+ "content": " ",
104
+ "lstrip": false,
105
+ "normalized": true,
106
+ "rstrip": false,
107
+ "single_word": false,
108
+ "special": false
109
+ },
110
+ "50265": {
111
+ "content": " ",
112
+ "lstrip": false,
113
+ "normalized": true,
114
+ "rstrip": false,
115
+ "single_word": false,
116
+ "special": false
117
+ },
118
+ "50266": {
119
+ "content": " ",
120
+ "lstrip": false,
121
+ "normalized": true,
122
+ "rstrip": false,
123
+ "single_word": false,
124
+ "special": false
125
+ },
126
+ "50267": {
127
+ "content": " ",
128
+ "lstrip": false,
129
+ "normalized": true,
130
+ "rstrip": false,
131
+ "single_word": false,
132
+ "special": false
133
+ },
134
+ "50268": {
135
+ "content": " ",
136
+ "lstrip": false,
137
+ "normalized": true,
138
+ "rstrip": false,
139
+ "single_word": false,
140
+ "special": false
141
+ },
142
+ "50269": {
143
+ "content": " ",
144
+ "lstrip": false,
145
+ "normalized": true,
146
+ "rstrip": false,
147
+ "single_word": false,
148
+ "special": false
149
+ },
150
+ "50270": {
151
+ "content": " ",
152
+ "lstrip": false,
153
+ "normalized": true,
154
+ "rstrip": false,
155
+ "single_word": false,
156
+ "special": false
157
+ },
158
+ "50271": {
159
+ "content": " ",
160
+ "lstrip": false,
161
+ "normalized": true,
162
+ "rstrip": false,
163
+ "single_word": false,
164
+ "special": false
165
+ },
166
+ "50272": {
167
+ "content": " ",
168
+ "lstrip": false,
169
+ "normalized": true,
170
+ "rstrip": false,
171
+ "single_word": false,
172
+ "special": false
173
+ },
174
+ "50273": {
175
+ "content": " ",
176
+ "lstrip": false,
177
+ "normalized": true,
178
+ "rstrip": false,
179
+ "single_word": false,
180
+ "special": false
181
+ },
182
+ "50274": {
183
+ "content": " ",
184
+ "lstrip": false,
185
+ "normalized": true,
186
+ "rstrip": false,
187
+ "single_word": false,
188
+ "special": false
189
+ },
190
+ "50275": {
191
+ "content": " ",
192
+ "lstrip": false,
193
+ "normalized": true,
194
+ "rstrip": false,
195
+ "single_word": false,
196
+ "special": false
197
+ },
198
+ "50276": {
199
+ "content": " ",
200
+ "lstrip": false,
201
+ "normalized": true,
202
+ "rstrip": false,
203
+ "single_word": false,
204
+ "special": false
205
+ },
206
+ "50277": {
207
+ "content": "|||EMAIL_ADDRESS|||",
208
+ "lstrip": false,
209
+ "normalized": true,
210
+ "rstrip": false,
211
+ "single_word": false,
212
+ "special": false
213
+ },
214
+ "50278": {
215
+ "content": "|||PHONE_NUMBER|||",
216
+ "lstrip": false,
217
+ "normalized": true,
218
+ "rstrip": false,
219
+ "single_word": false,
220
+ "special": false
221
+ },
222
+ "50279": {
223
+ "content": "<|endoftext|>",
224
+ "lstrip": false,
225
+ "normalized": false,
226
+ "rstrip": false,
227
+ "single_word": false,
228
+ "special": true
229
+ }
230
+ },
231
+ "bos_token": null,
232
+ "clean_up_tokenization_spaces": true,
233
+ "eos_token": "<|endoftext|>",
234
+ "extra_special_tokens": {},
235
+ "model_max_length": 1000000000000000019884624838656,
236
+ "pad_token": "<|padding|>",
237
+ "tokenizer_class": "GPTNeoXTokenizer",
238
+ "unk_token": null
239
+ }