Text Generation
Transformers
Safetensors
English
bananamind2_pico
causal-lm
base-model
muon
xsa-refresh
custom-code
trust-remote-code
custom_code
Instructions to use Banaxi-Tech/pico-30 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use Banaxi-Tech/pico-30 with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="Banaxi-Tech/pico-30", trust_remote_code=True)# Load model directly from transformers import AutoModelForCausalLM model = AutoModelForCausalLM.from_pretrained("Banaxi-Tech/pico-30", trust_remote_code=True, device_map="auto") - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use Banaxi-Tech/pico-30 with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "Banaxi-Tech/pico-30" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "Banaxi-Tech/pico-30", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }'Use Docker
docker model run hf.co/Banaxi-Tech/pico-30
- SGLang
How to use Banaxi-Tech/pico-30 with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "Banaxi-Tech/pico-30" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "Banaxi-Tech/pico-30", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "Banaxi-Tech/pico-30" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "Banaxi-Tech/pico-30", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }' - Docker Model Runner
How to use Banaxi-Tech/pico-30 with Docker Model Runner:
docker model run hf.co/Banaxi-Tech/pico-30
Upload pico-30 checkpoint
Browse files- README.md +67 -0
- checkpoint_metadata.json +72 -0
- config.json +51 -0
- configuration_bananamind2pico.py +111 -0
- generation_config.json +7 -0
- model.safetensors +3 -0
- modeling_bananamind2pico.py +456 -0
- special_tokens_map.json +6 -0
- tokenizer.json +991 -0
- tokenizer_config.json +10 -0
- tokenizer_training_manifest.json +29 -0
- training_metrics.jsonl +0 -0
README.md
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
language:
|
| 3 |
+
- en
|
| 4 |
+
library_name: transformers
|
| 5 |
+
pipeline_tag: text-generation
|
| 6 |
+
datasets:
|
| 7 |
+
- epfml/FineWeb-HQ
|
| 8 |
+
- HuggingFaceTB/smollm-corpus
|
| 9 |
+
tags:
|
| 10 |
+
- causal-lm
|
| 11 |
+
- base-model
|
| 12 |
+
- muon
|
| 13 |
+
- xsa-refresh
|
| 14 |
+
- custom-code
|
| 15 |
+
- trust-remote-code
|
| 16 |
+
---
|
| 17 |
+
|
| 18 |
+
# BananaMind 2 Pico Test - 30%
|
| 19 |
+
|
| 20 |
+
This is the **30% checkpoint** of a 900,002-parameter
|
| 21 |
+
base causal language model. It is not instruction tuned.
|
| 22 |
+
|
| 23 |
+
## Architecture
|
| 24 |
+
|
| 25 |
+
| Field | Value |
|
| 26 |
+
|---|---:|
|
| 27 |
+
| Parameters | 900,002 |
|
| 28 |
+
| Layers / hidden size | 6 / 96 |
|
| 29 |
+
| SwiGLU intermediate size | 380 |
|
| 30 |
+
| Query / KV heads | 6 / 2 |
|
| 31 |
+
| Head dimension | 16 |
|
| 32 |
+
| Context | 4,096 |
|
| 33 |
+
| Vocabulary | 384, tied |
|
| 34 |
+
| Refresh layers | 4 and 6 |
|
| 35 |
+
| Refresh kernel | Causal depthwise, width 9 |
|
| 36 |
+
|
| 37 |
+
The selective XSA refresh gate reads detached attention output as its signal,
|
| 38 |
+
reinjects the original input embedding as its value, and carries convolution
|
| 39 |
+
history alongside the K/V cache. Its learned residual scalar starts at zero.
|
| 40 |
+
|
| 41 |
+
## Training
|
| 42 |
+
|
| 43 |
+
| Field | Value |
|
| 44 |
+
|---|---:|
|
| 45 |
+
| Progress | 30% |
|
| 46 |
+
| Tokens seen | 60,001,615,872 |
|
| 47 |
+
| Target tokens | 200,000,000,000 |
|
| 48 |
+
| Hardware | 4 x NVIDIA H200 |
|
| 49 |
+
| Matrix optimizer | Stock `torch.optim.Muon` |
|
| 50 |
+
| Muon peak LR | 0.07 |
|
| 51 |
+
| Embedding/control optimizer | AdamW, LR 0.004 |
|
| 52 |
+
| Precision | bfloat16 autocast |
|
| 53 |
+
|
| 54 |
+
| Token range | FineWeb-HQ | Cosmopedia v2 |
|
| 55 |
+
|---|---:|---:|
|
| 56 |
+
| 0.00B-100.00B | 80% | 20% |
|
| 57 |
+
| 100.00B-200.00B | 60% | 40% |
|
| 58 |
+
|
| 59 |
+
## Usage
|
| 60 |
+
|
| 61 |
+
```python
|
| 62 |
+
from transformers import AutoModelForCausalLM, AutoTokenizer
|
| 63 |
+
|
| 64 |
+
model_id = "Banaxi-Tech/pico-test"
|
| 65 |
+
tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)
|
| 66 |
+
model = AutoModelForCausalLM.from_pretrained(model_id, trust_remote_code=True)
|
| 67 |
+
```
|
checkpoint_metadata.json
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"parameters": 900002,
|
| 3 |
+
"architecture": {
|
| 4 |
+
"vocab_size": 384,
|
| 5 |
+
"hidden_size": 96,
|
| 6 |
+
"num_hidden_layers": 6,
|
| 7 |
+
"num_attention_heads": 6,
|
| 8 |
+
"num_key_value_heads": 2,
|
| 9 |
+
"head_dim": 16,
|
| 10 |
+
"intermediate_size": 380,
|
| 11 |
+
"refresh_layers": [
|
| 12 |
+
3,
|
| 13 |
+
5
|
| 14 |
+
],
|
| 15 |
+
"refresh_kernel_size": 9,
|
| 16 |
+
"refresh_alpha_init": 0.0,
|
| 17 |
+
"max_position_embeddings": 4096,
|
| 18 |
+
"rope_theta": 100000.0,
|
| 19 |
+
"rms_norm_eps": 1e-06,
|
| 20 |
+
"initializer_range": 0.02,
|
| 21 |
+
"use_cache": true,
|
| 22 |
+
"transformers_version": "5.15.0",
|
| 23 |
+
"architectures": null,
|
| 24 |
+
"output_hidden_states": false,
|
| 25 |
+
"return_dict": true,
|
| 26 |
+
"dtype": null,
|
| 27 |
+
"chunk_size_feed_forward": 0,
|
| 28 |
+
"is_encoder_decoder": false,
|
| 29 |
+
"id2label": {
|
| 30 |
+
"0": "LABEL_0",
|
| 31 |
+
"1": "LABEL_1"
|
| 32 |
+
},
|
| 33 |
+
"label2id": {
|
| 34 |
+
"LABEL_0": 0,
|
| 35 |
+
"LABEL_1": 1
|
| 36 |
+
},
|
| 37 |
+
"problem_type": null,
|
| 38 |
+
"_name_or_path": "",
|
| 39 |
+
"tie_word_embeddings": true,
|
| 40 |
+
"bos_token_id": 1,
|
| 41 |
+
"eos_token_id": 2,
|
| 42 |
+
"pad_token_id": 0,
|
| 43 |
+
"unk_token_id": 3,
|
| 44 |
+
"model_type": "bananamind2_pico",
|
| 45 |
+
"output_attentions": false
|
| 46 |
+
},
|
| 47 |
+
"training_percent": 30,
|
| 48 |
+
"step": 6732,
|
| 49 |
+
"total_steps": 22439,
|
| 50 |
+
"tokens_seen": 60001615872,
|
| 51 |
+
"target_tokens": 200000000000,
|
| 52 |
+
"trained_token_target": 199996473344,
|
| 53 |
+
"tokens_per_step": 8912896,
|
| 54 |
+
"local_batch": 544,
|
| 55 |
+
"effective_global_batch": 2176,
|
| 56 |
+
"world_size": 4,
|
| 57 |
+
"gpu_name": "NVIDIA H200",
|
| 58 |
+
"optimizer": "Muon + AdamW",
|
| 59 |
+
"muon_peak_lr": 0.07,
|
| 60 |
+
"adamw_peak_lr": 0.004,
|
| 61 |
+
"architecture_revision": "ee5739850035c878ce4d9fc29fc38b075987e03b",
|
| 62 |
+
"tokenizer_revision": "ee5739850035c878ce4d9fc29fc38b075987e03b",
|
| 63 |
+
"dataset_revisions": {
|
| 64 |
+
"fineweb_hq": "e58199cdd52438d94405df1a4d8630cc5f13bf84",
|
| 65 |
+
"cosmopedia_v2": "3ba9d605774198c5868892d7a8deda78031a781f"
|
| 66 |
+
},
|
| 67 |
+
"source_tokens": {
|
| 68 |
+
"fineweb_hq": 48004857856,
|
| 69 |
+
"cosmopedia_v2": 11996758016
|
| 70 |
+
},
|
| 71 |
+
"elapsed_seconds": 8633.815947532654
|
| 72 |
+
}
|
config.json
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"vocab_size": 384,
|
| 3 |
+
"hidden_size": 96,
|
| 4 |
+
"num_hidden_layers": 6,
|
| 5 |
+
"num_attention_heads": 6,
|
| 6 |
+
"num_key_value_heads": 2,
|
| 7 |
+
"head_dim": 16,
|
| 8 |
+
"intermediate_size": 380,
|
| 9 |
+
"refresh_layers": [
|
| 10 |
+
3,
|
| 11 |
+
5
|
| 12 |
+
],
|
| 13 |
+
"refresh_kernel_size": 9,
|
| 14 |
+
"refresh_alpha_init": 0.0,
|
| 15 |
+
"max_position_embeddings": 4096,
|
| 16 |
+
"rope_theta": 100000.0,
|
| 17 |
+
"rms_norm_eps": 1e-06,
|
| 18 |
+
"initializer_range": 0.02,
|
| 19 |
+
"use_cache": true,
|
| 20 |
+
"transformers_version": "5.15.0",
|
| 21 |
+
"architectures": [
|
| 22 |
+
"BananaMind2PicoForCausalLM"
|
| 23 |
+
],
|
| 24 |
+
"output_hidden_states": false,
|
| 25 |
+
"return_dict": true,
|
| 26 |
+
"dtype": null,
|
| 27 |
+
"chunk_size_feed_forward": 0,
|
| 28 |
+
"is_encoder_decoder": false,
|
| 29 |
+
"id2label": {
|
| 30 |
+
"0": "LABEL_0",
|
| 31 |
+
"1": "LABEL_1"
|
| 32 |
+
},
|
| 33 |
+
"label2id": {
|
| 34 |
+
"LABEL_0": 0,
|
| 35 |
+
"LABEL_1": 1
|
| 36 |
+
},
|
| 37 |
+
"problem_type": null,
|
| 38 |
+
"_name_or_path": "Banaxi-Tech/pico-test",
|
| 39 |
+
"tie_word_embeddings": true,
|
| 40 |
+
"bos_token_id": 1,
|
| 41 |
+
"eos_token_id": 2,
|
| 42 |
+
"pad_token_id": 0,
|
| 43 |
+
"unk_token_id": 3,
|
| 44 |
+
"model_type": "bananamind2_pico",
|
| 45 |
+
"output_attentions": false,
|
| 46 |
+
"auto_map": {
|
| 47 |
+
"AutoConfig": "configuration_bananamind2pico.BananaMind2PicoConfig",
|
| 48 |
+
"AutoModelForCausalLM": "modeling_bananamind2pico.BananaMind2PicoForCausalLM"
|
| 49 |
+
},
|
| 50 |
+
"torch_dtype": "float32"
|
| 51 |
+
}
|
configuration_bananamind2pico.py
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Configuration for BananaMind 2 Pico."""
|
| 2 |
+
|
| 3 |
+
from __future__ import annotations
|
| 4 |
+
|
| 5 |
+
from transformers import PretrainedConfig
|
| 6 |
+
|
| 7 |
+
|
| 8 |
+
class BananaMind2PicoConfig(PretrainedConfig):
|
| 9 |
+
model_type = "bananamind2_pico"
|
| 10 |
+
|
| 11 |
+
def __init__(
|
| 12 |
+
self,
|
| 13 |
+
vocab_size: int = 384,
|
| 14 |
+
hidden_size: int = 96,
|
| 15 |
+
num_hidden_layers: int = 6,
|
| 16 |
+
num_attention_heads: int = 6,
|
| 17 |
+
num_key_value_heads: int = 2,
|
| 18 |
+
head_dim: int = 16,
|
| 19 |
+
intermediate_size: int = 380,
|
| 20 |
+
refresh_layers: tuple[int, ...] | list[int] = (3, 5),
|
| 21 |
+
refresh_kernel_size: int = 9,
|
| 22 |
+
refresh_alpha_init: float = 0.0,
|
| 23 |
+
max_position_embeddings: int = 4096,
|
| 24 |
+
rope_theta: float = 100000.0,
|
| 25 |
+
rms_norm_eps: float = 1e-6,
|
| 26 |
+
initializer_range: float = 0.02,
|
| 27 |
+
tie_word_embeddings: bool = True,
|
| 28 |
+
use_cache: bool = True,
|
| 29 |
+
bos_token_id: int = 1,
|
| 30 |
+
eos_token_id: int = 2,
|
| 31 |
+
pad_token_id: int = 0,
|
| 32 |
+
unk_token_id: int = 3,
|
| 33 |
+
**kwargs,
|
| 34 |
+
):
|
| 35 |
+
if hidden_size != num_attention_heads * head_dim:
|
| 36 |
+
raise ValueError("hidden_size must equal num_attention_heads * head_dim")
|
| 37 |
+
if num_attention_heads % num_key_value_heads:
|
| 38 |
+
raise ValueError("num_attention_heads must be divisible by num_key_value_heads")
|
| 39 |
+
if intermediate_size <= 0:
|
| 40 |
+
raise ValueError("intermediate_size must be positive")
|
| 41 |
+
if refresh_kernel_size <= 0 or refresh_kernel_size % 2 == 0:
|
| 42 |
+
raise ValueError("refresh_kernel_size must be a positive odd integer")
|
| 43 |
+
refresh_layers = tuple(int(index) for index in refresh_layers)
|
| 44 |
+
if len(refresh_layers) != len(set(refresh_layers)):
|
| 45 |
+
raise ValueError("refresh_layers must not contain duplicates")
|
| 46 |
+
if any(index < 0 or index >= num_hidden_layers for index in refresh_layers):
|
| 47 |
+
raise ValueError("refresh_layers contains an out-of-range zero-based index")
|
| 48 |
+
|
| 49 |
+
self.vocab_size = vocab_size
|
| 50 |
+
self.hidden_size = hidden_size
|
| 51 |
+
self.num_hidden_layers = num_hidden_layers
|
| 52 |
+
self.num_attention_heads = num_attention_heads
|
| 53 |
+
self.num_key_value_heads = num_key_value_heads
|
| 54 |
+
self.head_dim = head_dim
|
| 55 |
+
self.intermediate_size = intermediate_size
|
| 56 |
+
self.refresh_layers = list(refresh_layers)
|
| 57 |
+
self.refresh_kernel_size = refresh_kernel_size
|
| 58 |
+
self.refresh_alpha_init = refresh_alpha_init
|
| 59 |
+
self.max_position_embeddings = max_position_embeddings
|
| 60 |
+
self.rope_theta = rope_theta
|
| 61 |
+
self.rms_norm_eps = rms_norm_eps
|
| 62 |
+
self.initializer_range = initializer_range
|
| 63 |
+
self.use_cache = use_cache
|
| 64 |
+
super().__init__(
|
| 65 |
+
tie_word_embeddings=tie_word_embeddings,
|
| 66 |
+
bos_token_id=bos_token_id,
|
| 67 |
+
eos_token_id=eos_token_id,
|
| 68 |
+
pad_token_id=pad_token_id,
|
| 69 |
+
unk_token_id=unk_token_id,
|
| 70 |
+
**kwargs,
|
| 71 |
+
)
|
| 72 |
+
|
| 73 |
+
def parameter_counts(self) -> dict[str, int]:
|
| 74 |
+
"""Return an analytical parameter breakdown for drift checks."""
|
| 75 |
+
hidden = self.hidden_size
|
| 76 |
+
query_width = self.num_attention_heads * self.head_dim
|
| 77 |
+
kv_width = self.num_key_value_heads * self.head_dim
|
| 78 |
+
embedding = self.vocab_size * hidden
|
| 79 |
+
attention = hidden * query_width + 2 * hidden * kv_width + query_width * hidden
|
| 80 |
+
qk_norms = 2 * self.head_dim
|
| 81 |
+
mlp = 3 * hidden * self.intermediate_size
|
| 82 |
+
block_norms = 2 * hidden
|
| 83 |
+
refresh = (
|
| 84 |
+
3 * hidden * hidden
|
| 85 |
+
+ hidden * self.refresh_kernel_size
|
| 86 |
+
+ 3 * hidden
|
| 87 |
+
+ 1
|
| 88 |
+
)
|
| 89 |
+
base_layer = attention + qk_norms + mlp + block_norms
|
| 90 |
+
total = (
|
| 91 |
+
embedding
|
| 92 |
+
+ self.num_hidden_layers * base_layer
|
| 93 |
+
+ len(self.refresh_layers) * refresh
|
| 94 |
+
+ hidden
|
| 95 |
+
)
|
| 96 |
+
if not self.tie_word_embeddings:
|
| 97 |
+
total += embedding
|
| 98 |
+
return {
|
| 99 |
+
"total": total,
|
| 100 |
+
"embedding": embedding,
|
| 101 |
+
"base_layer": base_layer,
|
| 102 |
+
"attention_per_layer": attention + qk_norms,
|
| 103 |
+
"mlp_per_layer": mlp,
|
| 104 |
+
"refresh_per_selected_layer": refresh,
|
| 105 |
+
"refresh_layer_count": len(self.refresh_layers),
|
| 106 |
+
}
|
| 107 |
+
|
| 108 |
+
|
| 109 |
+
BananaMind2PicoConfig.register_for_auto_class("AutoConfig")
|
| 110 |
+
|
| 111 |
+
__all__ = ["BananaMind2PicoConfig"]
|
generation_config.json
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"_from_model_config": true,
|
| 3 |
+
"bos_token_id": 1,
|
| 4 |
+
"eos_token_id": 2,
|
| 5 |
+
"pad_token_id": 0,
|
| 6 |
+
"transformers_version": "5"
|
| 7 |
+
}
|
model.safetensors
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:76305ca46bfffc3587baf2496a45410569dd30f75005239c54e4df67380f685a
|
| 3 |
+
size 3756344
|
modeling_bananamind2pico.py
ADDED
|
@@ -0,0 +1,456 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""BananaMind 2 Pico causal LM with selective XSA refresh gates."""
|
| 2 |
+
|
| 3 |
+
from __future__ import annotations
|
| 4 |
+
|
| 5 |
+
import math
|
| 6 |
+
from typing import Optional
|
| 7 |
+
|
| 8 |
+
import torch
|
| 9 |
+
import torch.nn as nn
|
| 10 |
+
import torch.nn.functional as F
|
| 11 |
+
from transformers import PreTrainedModel
|
| 12 |
+
from transformers.cache_utils import Cache, DynamicCache
|
| 13 |
+
from transformers.generation.utils import GenerationMixin
|
| 14 |
+
from transformers.modeling_outputs import CausalLMOutputWithPast
|
| 15 |
+
|
| 16 |
+
try:
|
| 17 |
+
from .configuration_bananamind2pico import BananaMind2PicoConfig
|
| 18 |
+
except ImportError: # Standalone training jobs import the mounted/downloaded files.
|
| 19 |
+
from configuration_bananamind2pico import BananaMind2PicoConfig
|
| 20 |
+
|
| 21 |
+
|
| 22 |
+
class BananaMind2PicoRMSNorm(nn.Module):
|
| 23 |
+
def __init__(self, dim: int, eps: float = 1e-6):
|
| 24 |
+
super().__init__()
|
| 25 |
+
self.eps = eps
|
| 26 |
+
self.weight = nn.Parameter(torch.ones(dim))
|
| 27 |
+
|
| 28 |
+
def forward(self, hidden_states: torch.Tensor) -> torch.Tensor:
|
| 29 |
+
states = hidden_states.float()
|
| 30 |
+
states = states * torch.rsqrt(states.square().mean(-1, keepdim=True) + self.eps)
|
| 31 |
+
return (states * self.weight.float()).to(hidden_states.dtype)
|
| 32 |
+
|
| 33 |
+
|
| 34 |
+
def _rope_cos_sin(
|
| 35 |
+
head_dim: int,
|
| 36 |
+
positions: torch.Tensor,
|
| 37 |
+
theta: float,
|
| 38 |
+
) -> tuple[torch.Tensor, torch.Tensor]:
|
| 39 |
+
inv_freq = 1.0 / (
|
| 40 |
+
theta
|
| 41 |
+
** (
|
| 42 |
+
torch.arange(0, head_dim, 2, dtype=torch.float32, device=positions.device)
|
| 43 |
+
/ head_dim
|
| 44 |
+
)
|
| 45 |
+
)
|
| 46 |
+
frequencies = torch.outer(positions.float(), inv_freq)
|
| 47 |
+
return frequencies.cos(), frequencies.sin()
|
| 48 |
+
|
| 49 |
+
|
| 50 |
+
def _apply_rope(
|
| 51 |
+
query: torch.Tensor,
|
| 52 |
+
key: torch.Tensor,
|
| 53 |
+
cosine: torch.Tensor,
|
| 54 |
+
sine: torch.Tensor,
|
| 55 |
+
) -> tuple[torch.Tensor, torch.Tensor]:
|
| 56 |
+
query_dtype, key_dtype = query.dtype, key.dtype
|
| 57 |
+
cosine = cosine[None, None, :, :]
|
| 58 |
+
sine = sine[None, None, :, :]
|
| 59 |
+
query_pairs = query.float().reshape(*query.shape[:-1], -1, 2)
|
| 60 |
+
key_pairs = key.float().reshape(*key.shape[:-1], -1, 2)
|
| 61 |
+
query_even, query_odd = query_pairs.unbind(-1)
|
| 62 |
+
key_even, key_odd = key_pairs.unbind(-1)
|
| 63 |
+
query = torch.stack(
|
| 64 |
+
(query_even * cosine - query_odd * sine, query_even * sine + query_odd * cosine),
|
| 65 |
+
dim=-1,
|
| 66 |
+
).flatten(-2)
|
| 67 |
+
key = torch.stack(
|
| 68 |
+
(key_even * cosine - key_odd * sine, key_even * sine + key_odd * cosine),
|
| 69 |
+
dim=-1,
|
| 70 |
+
).flatten(-2)
|
| 71 |
+
return query.to(query_dtype), key.to(key_dtype)
|
| 72 |
+
|
| 73 |
+
|
| 74 |
+
class BananaMind2PicoCache(DynamicCache):
|
| 75 |
+
"""K/V cache plus causal-convolution history for selected refresh layers."""
|
| 76 |
+
|
| 77 |
+
def __init__(self, config: BananaMind2PicoConfig):
|
| 78 |
+
try:
|
| 79 |
+
super().__init__(config=config)
|
| 80 |
+
except TypeError:
|
| 81 |
+
super().__init__()
|
| 82 |
+
self.refresh_states: list[torch.Tensor | None] = [
|
| 83 |
+
None for _ in range(config.num_hidden_layers)
|
| 84 |
+
]
|
| 85 |
+
|
| 86 |
+
def refresh_input(
|
| 87 |
+
self,
|
| 88 |
+
layer_idx: int,
|
| 89 |
+
current: torch.Tensor,
|
| 90 |
+
history_size: int,
|
| 91 |
+
) -> torch.Tensor:
|
| 92 |
+
history = self.refresh_states[layer_idx]
|
| 93 |
+
if history is None:
|
| 94 |
+
history = current.new_zeros(current.size(0), current.size(1), history_size)
|
| 95 |
+
elif history.size(-1) < history_size:
|
| 96 |
+
history = F.pad(history, (history_size - history.size(-1), 0))
|
| 97 |
+
convolution_input = torch.cat((history, current), dim=-1)
|
| 98 |
+
self.refresh_states[layer_idx] = convolution_input[..., -history_size:]
|
| 99 |
+
return convolution_input
|
| 100 |
+
|
| 101 |
+
def reorder_cache(self, beam_idx: torch.LongTensor):
|
| 102 |
+
super().reorder_cache(beam_idx)
|
| 103 |
+
self.refresh_states = [
|
| 104 |
+
None if state is None else state.index_select(0, beam_idx.to(state.device))
|
| 105 |
+
for state in self.refresh_states
|
| 106 |
+
]
|
| 107 |
+
|
| 108 |
+
def batch_repeat_interleave(self, repeats: int):
|
| 109 |
+
super().batch_repeat_interleave(repeats)
|
| 110 |
+
self.refresh_states = [
|
| 111 |
+
None if state is None else state.repeat_interleave(repeats, dim=0)
|
| 112 |
+
for state in self.refresh_states
|
| 113 |
+
]
|
| 114 |
+
|
| 115 |
+
def batch_select_indices(self, indices: torch.Tensor):
|
| 116 |
+
super().batch_select_indices(indices)
|
| 117 |
+
self.refresh_states = [
|
| 118 |
+
None if state is None else state.index_select(0, indices.to(state.device))
|
| 119 |
+
for state in self.refresh_states
|
| 120 |
+
]
|
| 121 |
+
|
| 122 |
+
def crop(self, max_length: int):
|
| 123 |
+
current_length = self.get_seq_length()
|
| 124 |
+
target_length = current_length + max_length if max_length < 0 else max_length
|
| 125 |
+
if target_length < current_length:
|
| 126 |
+
raise NotImplementedError(
|
| 127 |
+
"BananaMind2PicoCache cannot roll back causal refresh state"
|
| 128 |
+
)
|
| 129 |
+
super().crop(max_length)
|
| 130 |
+
|
| 131 |
+
|
| 132 |
+
class BananaMind2PicoAttention(nn.Module):
|
| 133 |
+
def __init__(self, config: BananaMind2PicoConfig, layer_idx: int):
|
| 134 |
+
super().__init__()
|
| 135 |
+
self.layer_idx = layer_idx
|
| 136 |
+
self.num_heads = config.num_attention_heads
|
| 137 |
+
self.num_kv_heads = config.num_key_value_heads
|
| 138 |
+
self.head_dim = config.head_dim
|
| 139 |
+
self.num_kv_groups = self.num_heads // self.num_kv_heads
|
| 140 |
+
self.q_proj = nn.Linear(config.hidden_size, self.num_heads * self.head_dim, bias=False)
|
| 141 |
+
self.k_proj = nn.Linear(config.hidden_size, self.num_kv_heads * self.head_dim, bias=False)
|
| 142 |
+
self.v_proj = nn.Linear(config.hidden_size, self.num_kv_heads * self.head_dim, bias=False)
|
| 143 |
+
self.o_proj = nn.Linear(self.num_heads * self.head_dim, config.hidden_size, bias=False)
|
| 144 |
+
self.o_proj.BANANAMIND_SCALE_INIT = True
|
| 145 |
+
self.q_norm = BananaMind2PicoRMSNorm(self.head_dim, config.rms_norm_eps)
|
| 146 |
+
self.k_norm = BananaMind2PicoRMSNorm(self.head_dim, config.rms_norm_eps)
|
| 147 |
+
|
| 148 |
+
def forward(
|
| 149 |
+
self,
|
| 150 |
+
hidden_states: torch.Tensor,
|
| 151 |
+
cosine: torch.Tensor,
|
| 152 |
+
sine: torch.Tensor,
|
| 153 |
+
attention_mask: torch.Tensor | None = None,
|
| 154 |
+
past_key_values: Cache | None = None,
|
| 155 |
+
) -> torch.Tensor:
|
| 156 |
+
batch_size, query_length, _ = hidden_states.shape
|
| 157 |
+
query = self.q_proj(hidden_states).view(
|
| 158 |
+
batch_size, query_length, self.num_heads, self.head_dim
|
| 159 |
+
).transpose(1, 2)
|
| 160 |
+
key = self.k_proj(hidden_states).view(
|
| 161 |
+
batch_size, query_length, self.num_kv_heads, self.head_dim
|
| 162 |
+
).transpose(1, 2)
|
| 163 |
+
value = self.v_proj(hidden_states).view(
|
| 164 |
+
batch_size, query_length, self.num_kv_heads, self.head_dim
|
| 165 |
+
).transpose(1, 2)
|
| 166 |
+
query = self.q_norm(query)
|
| 167 |
+
key = self.k_norm(key)
|
| 168 |
+
query, key = _apply_rope(query, key, cosine, sine)
|
| 169 |
+
|
| 170 |
+
past_length = 0
|
| 171 |
+
if past_key_values is not None:
|
| 172 |
+
past_length = past_key_values.get_seq_length(self.layer_idx)
|
| 173 |
+
key, value = past_key_values.update(key, value, self.layer_idx)
|
| 174 |
+
|
| 175 |
+
key_length = key.size(-2)
|
| 176 |
+
key = key.repeat_interleave(self.num_kv_groups, dim=1)
|
| 177 |
+
value = value.repeat_interleave(self.num_kv_groups, dim=1)
|
| 178 |
+
is_causal = query_length > 1 and past_length == 0 and attention_mask is None
|
| 179 |
+
sdpa_mask = None
|
| 180 |
+
if not is_causal and query_length > 1:
|
| 181 |
+
query_positions = past_length + torch.arange(query_length, device=query.device)
|
| 182 |
+
key_positions = torch.arange(key_length, device=query.device)
|
| 183 |
+
sdpa_mask = (key_positions[None, :] <= query_positions[:, None])[None, None]
|
| 184 |
+
if attention_mask is not None:
|
| 185 |
+
key_padding = attention_mask.to(torch.bool)
|
| 186 |
+
if key_padding.size(-1) < key_length:
|
| 187 |
+
key_padding = F.pad(
|
| 188 |
+
key_padding,
|
| 189 |
+
(key_length - key_padding.size(-1), 0),
|
| 190 |
+
value=True,
|
| 191 |
+
)
|
| 192 |
+
else:
|
| 193 |
+
key_padding = key_padding[:, -key_length:]
|
| 194 |
+
key_padding = key_padding[:, None, None, :]
|
| 195 |
+
sdpa_mask = key_padding if sdpa_mask is None else sdpa_mask & key_padding
|
| 196 |
+
is_causal = False
|
| 197 |
+
|
| 198 |
+
output = F.scaled_dot_product_attention(
|
| 199 |
+
query,
|
| 200 |
+
key,
|
| 201 |
+
value,
|
| 202 |
+
attn_mask=sdpa_mask,
|
| 203 |
+
is_causal=is_causal,
|
| 204 |
+
)
|
| 205 |
+
output = output.transpose(1, 2).contiguous().view(
|
| 206 |
+
batch_size, query_length, self.num_heads * self.head_dim
|
| 207 |
+
)
|
| 208 |
+
return self.o_proj(output)
|
| 209 |
+
|
| 210 |
+
|
| 211 |
+
class BananaMind2PicoRefreshGate(nn.Module):
|
| 212 |
+
def __init__(self, config: BananaMind2PicoConfig, layer_idx: int):
|
| 213 |
+
super().__init__()
|
| 214 |
+
hidden = config.hidden_size
|
| 215 |
+
self.layer_idx = layer_idx
|
| 216 |
+
self.kernel_size = config.refresh_kernel_size
|
| 217 |
+
self.attention_norm = BananaMind2PicoRMSNorm(hidden, config.rms_norm_eps)
|
| 218 |
+
self.embedding_norm = BananaMind2PicoRMSNorm(hidden, config.rms_norm_eps)
|
| 219 |
+
self.output_norm = BananaMind2PicoRMSNorm(hidden, config.rms_norm_eps)
|
| 220 |
+
self.gate_proj = nn.Linear(hidden, hidden, bias=False)
|
| 221 |
+
self.value_proj = nn.Linear(hidden, hidden, bias=False)
|
| 222 |
+
self.out_proj = nn.Linear(hidden, hidden, bias=False)
|
| 223 |
+
self.out_proj.BANANAMIND_SCALE_INIT = True
|
| 224 |
+
# A real 2D parameter keeps the depthwise kernel eligible for stock Muon.
|
| 225 |
+
self.depthwise_kernel = nn.Parameter(torch.empty(hidden, self.kernel_size))
|
| 226 |
+
nn.init.normal_(self.depthwise_kernel, mean=0.0, std=config.initializer_range)
|
| 227 |
+
self.alpha = nn.Parameter(torch.tensor(float(config.refresh_alpha_init)))
|
| 228 |
+
|
| 229 |
+
def _causal_depthwise_conv(
|
| 230 |
+
self,
|
| 231 |
+
attention_signal: torch.Tensor,
|
| 232 |
+
past_key_values: BananaMind2PicoCache | None,
|
| 233 |
+
) -> torch.Tensor:
|
| 234 |
+
signal = attention_signal.transpose(1, 2)
|
| 235 |
+
history_size = self.kernel_size - 1
|
| 236 |
+
if past_key_values is None:
|
| 237 |
+
convolution_input = F.pad(signal, (history_size, 0))
|
| 238 |
+
else:
|
| 239 |
+
convolution_input = past_key_values.refresh_input(
|
| 240 |
+
self.layer_idx,
|
| 241 |
+
signal,
|
| 242 |
+
history_size,
|
| 243 |
+
)
|
| 244 |
+
convolved = F.conv1d(
|
| 245 |
+
convolution_input,
|
| 246 |
+
self.depthwise_kernel.unsqueeze(1),
|
| 247 |
+
groups=signal.size(1),
|
| 248 |
+
)
|
| 249 |
+
return convolved.transpose(1, 2)
|
| 250 |
+
|
| 251 |
+
def forward(
|
| 252 |
+
self,
|
| 253 |
+
attention_output: torch.Tensor,
|
| 254 |
+
original_embedding: torch.Tensor,
|
| 255 |
+
past_key_values: BananaMind2PicoCache | None,
|
| 256 |
+
) -> torch.Tensor:
|
| 257 |
+
attention_signal = self.attention_norm(attention_output.detach())
|
| 258 |
+
embedding_value = self.embedding_norm(original_embedding)
|
| 259 |
+
gate = self.gate_proj(attention_signal) + self._causal_depthwise_conv(
|
| 260 |
+
attention_signal,
|
| 261 |
+
past_key_values,
|
| 262 |
+
)
|
| 263 |
+
value = self.value_proj(embedding_value)
|
| 264 |
+
refreshed = self.output_norm(self.out_proj(F.silu(gate) * value))
|
| 265 |
+
return self.alpha * refreshed
|
| 266 |
+
|
| 267 |
+
|
| 268 |
+
class BananaMind2PicoMLP(nn.Module):
|
| 269 |
+
def __init__(self, config: BananaMind2PicoConfig):
|
| 270 |
+
super().__init__()
|
| 271 |
+
self.gate_proj = nn.Linear(config.hidden_size, config.intermediate_size, bias=False)
|
| 272 |
+
self.up_proj = nn.Linear(config.hidden_size, config.intermediate_size, bias=False)
|
| 273 |
+
self.down_proj = nn.Linear(config.intermediate_size, config.hidden_size, bias=False)
|
| 274 |
+
self.down_proj.BANANAMIND_SCALE_INIT = True
|
| 275 |
+
|
| 276 |
+
def forward(self, hidden_states: torch.Tensor) -> torch.Tensor:
|
| 277 |
+
return self.down_proj(
|
| 278 |
+
F.silu(self.gate_proj(hidden_states)) * self.up_proj(hidden_states)
|
| 279 |
+
)
|
| 280 |
+
|
| 281 |
+
|
| 282 |
+
class BananaMind2PicoBlock(nn.Module):
|
| 283 |
+
def __init__(self, config: BananaMind2PicoConfig, layer_idx: int):
|
| 284 |
+
super().__init__()
|
| 285 |
+
self.input_norm = BananaMind2PicoRMSNorm(config.hidden_size, config.rms_norm_eps)
|
| 286 |
+
self.attention = BananaMind2PicoAttention(config, layer_idx)
|
| 287 |
+
self.refresh = (
|
| 288 |
+
BananaMind2PicoRefreshGate(config, layer_idx)
|
| 289 |
+
if layer_idx in config.refresh_layers
|
| 290 |
+
else None
|
| 291 |
+
)
|
| 292 |
+
self.post_attention_norm = BananaMind2PicoRMSNorm(
|
| 293 |
+
config.hidden_size,
|
| 294 |
+
config.rms_norm_eps,
|
| 295 |
+
)
|
| 296 |
+
self.mlp = BananaMind2PicoMLP(config)
|
| 297 |
+
|
| 298 |
+
def forward(
|
| 299 |
+
self,
|
| 300 |
+
hidden_states: torch.Tensor,
|
| 301 |
+
original_embedding: torch.Tensor,
|
| 302 |
+
cosine: torch.Tensor,
|
| 303 |
+
sine: torch.Tensor,
|
| 304 |
+
attention_mask: torch.Tensor | None,
|
| 305 |
+
past_key_values: BananaMind2PicoCache | None,
|
| 306 |
+
) -> torch.Tensor:
|
| 307 |
+
attention_output = self.attention(
|
| 308 |
+
self.input_norm(hidden_states),
|
| 309 |
+
cosine,
|
| 310 |
+
sine,
|
| 311 |
+
attention_mask=attention_mask,
|
| 312 |
+
past_key_values=past_key_values,
|
| 313 |
+
)
|
| 314 |
+
hidden_states = hidden_states + attention_output
|
| 315 |
+
if self.refresh is not None:
|
| 316 |
+
hidden_states = hidden_states + self.refresh(
|
| 317 |
+
attention_output,
|
| 318 |
+
original_embedding,
|
| 319 |
+
past_key_values,
|
| 320 |
+
)
|
| 321 |
+
return hidden_states + self.mlp(self.post_attention_norm(hidden_states))
|
| 322 |
+
|
| 323 |
+
|
| 324 |
+
class BananaMind2PicoPreTrainedModel(PreTrainedModel):
|
| 325 |
+
config_class = BananaMind2PicoConfig
|
| 326 |
+
base_model_prefix = "transformer"
|
| 327 |
+
supports_gradient_checkpointing = False
|
| 328 |
+
_no_split_modules = ["BananaMind2PicoBlock"]
|
| 329 |
+
_supports_sdpa = True
|
| 330 |
+
_supports_cache_class = True
|
| 331 |
+
|
| 332 |
+
def _init_weights(self, module: nn.Module):
|
| 333 |
+
std = self.config.initializer_range
|
| 334 |
+
if hasattr(module, "BANANAMIND_SCALE_INIT"):
|
| 335 |
+
std *= (2 * self.config.num_hidden_layers) ** -0.5
|
| 336 |
+
if isinstance(module, nn.Linear):
|
| 337 |
+
nn.init.normal_(module.weight, mean=0.0, std=std)
|
| 338 |
+
elif isinstance(module, nn.Embedding):
|
| 339 |
+
nn.init.normal_(module.weight, mean=0.0, std=std)
|
| 340 |
+
|
| 341 |
+
|
| 342 |
+
class BananaMind2PicoForCausalLM(BananaMind2PicoPreTrainedModel, GenerationMixin):
|
| 343 |
+
_tied_weights_keys = {"lm_head.weight": "transformer.wte.weight"}
|
| 344 |
+
|
| 345 |
+
@classmethod
|
| 346 |
+
def _supports_default_dynamic_cache(cls) -> bool:
|
| 347 |
+
return False
|
| 348 |
+
|
| 349 |
+
def __init__(self, config: BananaMind2PicoConfig):
|
| 350 |
+
super().__init__(config)
|
| 351 |
+
self.transformer = nn.ModuleDict(
|
| 352 |
+
{
|
| 353 |
+
"wte": nn.Embedding(config.vocab_size, config.hidden_size),
|
| 354 |
+
"h": nn.ModuleList(
|
| 355 |
+
[
|
| 356 |
+
BananaMind2PicoBlock(config, index)
|
| 357 |
+
for index in range(config.num_hidden_layers)
|
| 358 |
+
]
|
| 359 |
+
),
|
| 360 |
+
"ln_f": BananaMind2PicoRMSNorm(
|
| 361 |
+
config.hidden_size,
|
| 362 |
+
config.rms_norm_eps,
|
| 363 |
+
),
|
| 364 |
+
}
|
| 365 |
+
)
|
| 366 |
+
self.lm_head = nn.Linear(config.hidden_size, config.vocab_size, bias=False)
|
| 367 |
+
self.embedding_scale = math.sqrt(config.hidden_size)
|
| 368 |
+
self.post_init()
|
| 369 |
+
if config.tie_word_embeddings:
|
| 370 |
+
self.tie_weights()
|
| 371 |
+
|
| 372 |
+
def get_input_embeddings(self):
|
| 373 |
+
return self.transformer["wte"]
|
| 374 |
+
|
| 375 |
+
def set_input_embeddings(self, value):
|
| 376 |
+
self.transformer["wte"] = value
|
| 377 |
+
|
| 378 |
+
def get_output_embeddings(self):
|
| 379 |
+
return self.lm_head
|
| 380 |
+
|
| 381 |
+
def set_output_embeddings(self, value):
|
| 382 |
+
self.lm_head = value
|
| 383 |
+
|
| 384 |
+
def forward(
|
| 385 |
+
self,
|
| 386 |
+
input_ids: torch.LongTensor,
|
| 387 |
+
attention_mask: Optional[torch.Tensor] = None,
|
| 388 |
+
labels: Optional[torch.LongTensor] = None,
|
| 389 |
+
past_key_values: Optional[Cache] = None,
|
| 390 |
+
use_cache: Optional[bool] = None,
|
| 391 |
+
**kwargs,
|
| 392 |
+
) -> CausalLMOutputWithPast:
|
| 393 |
+
if use_cache is None:
|
| 394 |
+
use_cache = self.config.use_cache and labels is None
|
| 395 |
+
if use_cache and past_key_values is None:
|
| 396 |
+
past_key_values = BananaMind2PicoCache(self.config)
|
| 397 |
+
if use_cache and not isinstance(past_key_values, BananaMind2PicoCache):
|
| 398 |
+
raise TypeError("BananaMind 2 Pico requires its cache for refresh state")
|
| 399 |
+
if not use_cache:
|
| 400 |
+
past_key_values = None
|
| 401 |
+
|
| 402 |
+
past_length = past_key_values.get_seq_length() if past_key_values is not None else 0
|
| 403 |
+
sequence_length = input_ids.size(1)
|
| 404 |
+
total_length = past_length + sequence_length
|
| 405 |
+
if total_length > self.config.max_position_embeddings:
|
| 406 |
+
raise ValueError(
|
| 407 |
+
f"Sequence length {total_length} exceeds "
|
| 408 |
+
f"{self.config.max_position_embeddings}"
|
| 409 |
+
)
|
| 410 |
+
|
| 411 |
+
original_embedding = self.transformer["wte"](input_ids) * self.embedding_scale
|
| 412 |
+
hidden_states = original_embedding
|
| 413 |
+
positions = torch.arange(
|
| 414 |
+
past_length,
|
| 415 |
+
total_length,
|
| 416 |
+
dtype=torch.float32,
|
| 417 |
+
device=input_ids.device,
|
| 418 |
+
)
|
| 419 |
+
cosine, sine = _rope_cos_sin(
|
| 420 |
+
self.config.head_dim,
|
| 421 |
+
positions,
|
| 422 |
+
self.config.rope_theta,
|
| 423 |
+
)
|
| 424 |
+
for block in self.transformer["h"]:
|
| 425 |
+
hidden_states = block(
|
| 426 |
+
hidden_states,
|
| 427 |
+
original_embedding,
|
| 428 |
+
cosine,
|
| 429 |
+
sine,
|
| 430 |
+
attention_mask,
|
| 431 |
+
past_key_values,
|
| 432 |
+
)
|
| 433 |
+
hidden_states = self.transformer["ln_f"](hidden_states)
|
| 434 |
+
logits = self.lm_head(hidden_states)
|
| 435 |
+
|
| 436 |
+
loss = None
|
| 437 |
+
if labels is not None:
|
| 438 |
+
loss = F.cross_entropy(
|
| 439 |
+
logits[..., :-1, :].float().reshape(-1, logits.size(-1)),
|
| 440 |
+
labels[..., 1:].reshape(-1),
|
| 441 |
+
ignore_index=-100,
|
| 442 |
+
)
|
| 443 |
+
return CausalLMOutputWithPast(
|
| 444 |
+
loss=loss,
|
| 445 |
+
logits=logits,
|
| 446 |
+
past_key_values=past_key_values,
|
| 447 |
+
)
|
| 448 |
+
|
| 449 |
+
|
| 450 |
+
BananaMind2PicoForCausalLM.register_for_auto_class("AutoModelForCausalLM")
|
| 451 |
+
|
| 452 |
+
__all__ = [
|
| 453 |
+
"BananaMind2PicoCache",
|
| 454 |
+
"BananaMind2PicoForCausalLM",
|
| 455 |
+
"BananaMind2PicoPreTrainedModel",
|
| 456 |
+
]
|
special_tokens_map.json
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"pad_token": "<|pad|>",
|
| 3 |
+
"bos_token": "<|bos|>",
|
| 4 |
+
"eos_token": "<|eos|>",
|
| 5 |
+
"unk_token": "<|unk|>"
|
| 6 |
+
}
|
tokenizer.json
ADDED
|
@@ -0,0 +1,991 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"version": "1.0",
|
| 3 |
+
"truncation": null,
|
| 4 |
+
"padding": null,
|
| 5 |
+
"added_tokens": [
|
| 6 |
+
{
|
| 7 |
+
"id": 0,
|
| 8 |
+
"content": "<|pad|>",
|
| 9 |
+
"single_word": false,
|
| 10 |
+
"lstrip": false,
|
| 11 |
+
"rstrip": false,
|
| 12 |
+
"normalized": false,
|
| 13 |
+
"special": true
|
| 14 |
+
},
|
| 15 |
+
{
|
| 16 |
+
"id": 1,
|
| 17 |
+
"content": "<|bos|>",
|
| 18 |
+
"single_word": false,
|
| 19 |
+
"lstrip": false,
|
| 20 |
+
"rstrip": false,
|
| 21 |
+
"normalized": false,
|
| 22 |
+
"special": true
|
| 23 |
+
},
|
| 24 |
+
{
|
| 25 |
+
"id": 2,
|
| 26 |
+
"content": "<|eos|>",
|
| 27 |
+
"single_word": false,
|
| 28 |
+
"lstrip": false,
|
| 29 |
+
"rstrip": false,
|
| 30 |
+
"normalized": false,
|
| 31 |
+
"special": true
|
| 32 |
+
},
|
| 33 |
+
{
|
| 34 |
+
"id": 3,
|
| 35 |
+
"content": "<|unk|>",
|
| 36 |
+
"single_word": false,
|
| 37 |
+
"lstrip": false,
|
| 38 |
+
"rstrip": false,
|
| 39 |
+
"normalized": false,
|
| 40 |
+
"special": true
|
| 41 |
+
}
|
| 42 |
+
],
|
| 43 |
+
"normalizer": {
|
| 44 |
+
"type": "NFKC"
|
| 45 |
+
},
|
| 46 |
+
"pre_tokenizer": {
|
| 47 |
+
"type": "Sequence",
|
| 48 |
+
"pretokenizers": [
|
| 49 |
+
{
|
| 50 |
+
"type": "Split",
|
| 51 |
+
"pattern": {
|
| 52 |
+
"Regex": "\\d"
|
| 53 |
+
},
|
| 54 |
+
"behavior": "Isolated",
|
| 55 |
+
"invert": false
|
| 56 |
+
},
|
| 57 |
+
{
|
| 58 |
+
"type": "ByteLevel",
|
| 59 |
+
"add_prefix_space": false,
|
| 60 |
+
"trim_offsets": true,
|
| 61 |
+
"use_regex": true
|
| 62 |
+
}
|
| 63 |
+
]
|
| 64 |
+
},
|
| 65 |
+
"post_processor": {
|
| 66 |
+
"type": "TemplateProcessing",
|
| 67 |
+
"single": [
|
| 68 |
+
{
|
| 69 |
+
"Sequence": {
|
| 70 |
+
"id": "A",
|
| 71 |
+
"type_id": 0
|
| 72 |
+
}
|
| 73 |
+
}
|
| 74 |
+
],
|
| 75 |
+
"pair": [
|
| 76 |
+
{
|
| 77 |
+
"Sequence": {
|
| 78 |
+
"id": "A",
|
| 79 |
+
"type_id": 0
|
| 80 |
+
}
|
| 81 |
+
},
|
| 82 |
+
{
|
| 83 |
+
"Sequence": {
|
| 84 |
+
"id": "B",
|
| 85 |
+
"type_id": 1
|
| 86 |
+
}
|
| 87 |
+
}
|
| 88 |
+
],
|
| 89 |
+
"special_tokens": {}
|
| 90 |
+
},
|
| 91 |
+
"decoder": {
|
| 92 |
+
"type": "ByteLevel",
|
| 93 |
+
"add_prefix_space": true,
|
| 94 |
+
"trim_offsets": true,
|
| 95 |
+
"use_regex": true
|
| 96 |
+
},
|
| 97 |
+
"model": {
|
| 98 |
+
"type": "BPE",
|
| 99 |
+
"dropout": null,
|
| 100 |
+
"unk_token": "<|unk|>",
|
| 101 |
+
"continuing_subword_prefix": null,
|
| 102 |
+
"end_of_word_suffix": null,
|
| 103 |
+
"fuse_unk": false,
|
| 104 |
+
"byte_fallback": false,
|
| 105 |
+
"ignore_merges": false,
|
| 106 |
+
"vocab": {
|
| 107 |
+
"<|pad|>": 0,
|
| 108 |
+
"<|bos|>": 1,
|
| 109 |
+
"<|eos|>": 2,
|
| 110 |
+
"<|unk|>": 3,
|
| 111 |
+
"!": 4,
|
| 112 |
+
"\"": 5,
|
| 113 |
+
"#": 6,
|
| 114 |
+
"$": 7,
|
| 115 |
+
"%": 8,
|
| 116 |
+
"&": 9,
|
| 117 |
+
"'": 10,
|
| 118 |
+
"(": 11,
|
| 119 |
+
")": 12,
|
| 120 |
+
"*": 13,
|
| 121 |
+
"+": 14,
|
| 122 |
+
",": 15,
|
| 123 |
+
"-": 16,
|
| 124 |
+
".": 17,
|
| 125 |
+
"/": 18,
|
| 126 |
+
"0": 19,
|
| 127 |
+
"1": 20,
|
| 128 |
+
"2": 21,
|
| 129 |
+
"3": 22,
|
| 130 |
+
"4": 23,
|
| 131 |
+
"5": 24,
|
| 132 |
+
"6": 25,
|
| 133 |
+
"7": 26,
|
| 134 |
+
"8": 27,
|
| 135 |
+
"9": 28,
|
| 136 |
+
":": 29,
|
| 137 |
+
";": 30,
|
| 138 |
+
"<": 31,
|
| 139 |
+
"=": 32,
|
| 140 |
+
">": 33,
|
| 141 |
+
"?": 34,
|
| 142 |
+
"@": 35,
|
| 143 |
+
"A": 36,
|
| 144 |
+
"B": 37,
|
| 145 |
+
"C": 38,
|
| 146 |
+
"D": 39,
|
| 147 |
+
"E": 40,
|
| 148 |
+
"F": 41,
|
| 149 |
+
"G": 42,
|
| 150 |
+
"H": 43,
|
| 151 |
+
"I": 44,
|
| 152 |
+
"J": 45,
|
| 153 |
+
"K": 46,
|
| 154 |
+
"L": 47,
|
| 155 |
+
"M": 48,
|
| 156 |
+
"N": 49,
|
| 157 |
+
"O": 50,
|
| 158 |
+
"P": 51,
|
| 159 |
+
"Q": 52,
|
| 160 |
+
"R": 53,
|
| 161 |
+
"S": 54,
|
| 162 |
+
"T": 55,
|
| 163 |
+
"U": 56,
|
| 164 |
+
"V": 57,
|
| 165 |
+
"W": 58,
|
| 166 |
+
"X": 59,
|
| 167 |
+
"Y": 60,
|
| 168 |
+
"Z": 61,
|
| 169 |
+
"[": 62,
|
| 170 |
+
"\\": 63,
|
| 171 |
+
"]": 64,
|
| 172 |
+
"^": 65,
|
| 173 |
+
"_": 66,
|
| 174 |
+
"`": 67,
|
| 175 |
+
"a": 68,
|
| 176 |
+
"b": 69,
|
| 177 |
+
"c": 70,
|
| 178 |
+
"d": 71,
|
| 179 |
+
"e": 72,
|
| 180 |
+
"f": 73,
|
| 181 |
+
"g": 74,
|
| 182 |
+
"h": 75,
|
| 183 |
+
"i": 76,
|
| 184 |
+
"j": 77,
|
| 185 |
+
"k": 78,
|
| 186 |
+
"l": 79,
|
| 187 |
+
"m": 80,
|
| 188 |
+
"n": 81,
|
| 189 |
+
"o": 82,
|
| 190 |
+
"p": 83,
|
| 191 |
+
"q": 84,
|
| 192 |
+
"r": 85,
|
| 193 |
+
"s": 86,
|
| 194 |
+
"t": 87,
|
| 195 |
+
"u": 88,
|
| 196 |
+
"v": 89,
|
| 197 |
+
"w": 90,
|
| 198 |
+
"x": 91,
|
| 199 |
+
"y": 92,
|
| 200 |
+
"z": 93,
|
| 201 |
+
"{": 94,
|
| 202 |
+
"|": 95,
|
| 203 |
+
"}": 96,
|
| 204 |
+
"~": 97,
|
| 205 |
+
"¡": 98,
|
| 206 |
+
"¢": 99,
|
| 207 |
+
"£": 100,
|
| 208 |
+
"¤": 101,
|
| 209 |
+
"¥": 102,
|
| 210 |
+
"¦": 103,
|
| 211 |
+
"§": 104,
|
| 212 |
+
"¨": 105,
|
| 213 |
+
"©": 106,
|
| 214 |
+
"ª": 107,
|
| 215 |
+
"«": 108,
|
| 216 |
+
"¬": 109,
|
| 217 |
+
"®": 110,
|
| 218 |
+
"¯": 111,
|
| 219 |
+
"°": 112,
|
| 220 |
+
"±": 113,
|
| 221 |
+
"²": 114,
|
| 222 |
+
"³": 115,
|
| 223 |
+
"´": 116,
|
| 224 |
+
"µ": 117,
|
| 225 |
+
"¶": 118,
|
| 226 |
+
"·": 119,
|
| 227 |
+
"¸": 120,
|
| 228 |
+
"¹": 121,
|
| 229 |
+
"º": 122,
|
| 230 |
+
"»": 123,
|
| 231 |
+
"¼": 124,
|
| 232 |
+
"½": 125,
|
| 233 |
+
"¾": 126,
|
| 234 |
+
"¿": 127,
|
| 235 |
+
"À": 128,
|
| 236 |
+
"Á": 129,
|
| 237 |
+
"Â": 130,
|
| 238 |
+
"Ã": 131,
|
| 239 |
+
"Ä": 132,
|
| 240 |
+
"Å": 133,
|
| 241 |
+
"Æ": 134,
|
| 242 |
+
"Ç": 135,
|
| 243 |
+
"È": 136,
|
| 244 |
+
"É": 137,
|
| 245 |
+
"Ê": 138,
|
| 246 |
+
"Ë": 139,
|
| 247 |
+
"Ì": 140,
|
| 248 |
+
"Í": 141,
|
| 249 |
+
"Î": 142,
|
| 250 |
+
"Ï": 143,
|
| 251 |
+
"Ð": 144,
|
| 252 |
+
"Ñ": 145,
|
| 253 |
+
"Ò": 146,
|
| 254 |
+
"Ó": 147,
|
| 255 |
+
"Ô": 148,
|
| 256 |
+
"Õ": 149,
|
| 257 |
+
"Ö": 150,
|
| 258 |
+
"×": 151,
|
| 259 |
+
"Ø": 152,
|
| 260 |
+
"Ù": 153,
|
| 261 |
+
"Ú": 154,
|
| 262 |
+
"Û": 155,
|
| 263 |
+
"Ü": 156,
|
| 264 |
+
"Ý": 157,
|
| 265 |
+
"Þ": 158,
|
| 266 |
+
"ß": 159,
|
| 267 |
+
"à": 160,
|
| 268 |
+
"á": 161,
|
| 269 |
+
"â": 162,
|
| 270 |
+
"ã": 163,
|
| 271 |
+
"ä": 164,
|
| 272 |
+
"å": 165,
|
| 273 |
+
"æ": 166,
|
| 274 |
+
"ç": 167,
|
| 275 |
+
"è": 168,
|
| 276 |
+
"é": 169,
|
| 277 |
+
"ê": 170,
|
| 278 |
+
"ë": 171,
|
| 279 |
+
"ì": 172,
|
| 280 |
+
"í": 173,
|
| 281 |
+
"î": 174,
|
| 282 |
+
"ï": 175,
|
| 283 |
+
"ð": 176,
|
| 284 |
+
"ñ": 177,
|
| 285 |
+
"ò": 178,
|
| 286 |
+
"ó": 179,
|
| 287 |
+
"ô": 180,
|
| 288 |
+
"õ": 181,
|
| 289 |
+
"ö": 182,
|
| 290 |
+
"÷": 183,
|
| 291 |
+
"ø": 184,
|
| 292 |
+
"ù": 185,
|
| 293 |
+
"ú": 186,
|
| 294 |
+
"û": 187,
|
| 295 |
+
"ü": 188,
|
| 296 |
+
"ý": 189,
|
| 297 |
+
"þ": 190,
|
| 298 |
+
"ÿ": 191,
|
| 299 |
+
"Ā": 192,
|
| 300 |
+
"ā": 193,
|
| 301 |
+
"Ă": 194,
|
| 302 |
+
"ă": 195,
|
| 303 |
+
"Ą": 196,
|
| 304 |
+
"ą": 197,
|
| 305 |
+
"Ć": 198,
|
| 306 |
+
"ć": 199,
|
| 307 |
+
"Ĉ": 200,
|
| 308 |
+
"ĉ": 201,
|
| 309 |
+
"Ċ": 202,
|
| 310 |
+
"ċ": 203,
|
| 311 |
+
"Č": 204,
|
| 312 |
+
"č": 205,
|
| 313 |
+
"Ď": 206,
|
| 314 |
+
"ď": 207,
|
| 315 |
+
"Đ": 208,
|
| 316 |
+
"đ": 209,
|
| 317 |
+
"Ē": 210,
|
| 318 |
+
"ē": 211,
|
| 319 |
+
"Ĕ": 212,
|
| 320 |
+
"ĕ": 213,
|
| 321 |
+
"Ė": 214,
|
| 322 |
+
"ė": 215,
|
| 323 |
+
"Ę": 216,
|
| 324 |
+
"ę": 217,
|
| 325 |
+
"Ě": 218,
|
| 326 |
+
"ě": 219,
|
| 327 |
+
"Ĝ": 220,
|
| 328 |
+
"ĝ": 221,
|
| 329 |
+
"Ğ": 222,
|
| 330 |
+
"ğ": 223,
|
| 331 |
+
"Ġ": 224,
|
| 332 |
+
"ġ": 225,
|
| 333 |
+
"Ģ": 226,
|
| 334 |
+
"ģ": 227,
|
| 335 |
+
"Ĥ": 228,
|
| 336 |
+
"ĥ": 229,
|
| 337 |
+
"Ħ": 230,
|
| 338 |
+
"ħ": 231,
|
| 339 |
+
"Ĩ": 232,
|
| 340 |
+
"ĩ": 233,
|
| 341 |
+
"Ī": 234,
|
| 342 |
+
"ī": 235,
|
| 343 |
+
"Ĭ": 236,
|
| 344 |
+
"ĭ": 237,
|
| 345 |
+
"Į": 238,
|
| 346 |
+
"į": 239,
|
| 347 |
+
"İ": 240,
|
| 348 |
+
"ı": 241,
|
| 349 |
+
"IJ": 242,
|
| 350 |
+
"ij": 243,
|
| 351 |
+
"Ĵ": 244,
|
| 352 |
+
"ĵ": 245,
|
| 353 |
+
"Ķ": 246,
|
| 354 |
+
"ķ": 247,
|
| 355 |
+
"ĸ": 248,
|
| 356 |
+
"Ĺ": 249,
|
| 357 |
+
"ĺ": 250,
|
| 358 |
+
"Ļ": 251,
|
| 359 |
+
"ļ": 252,
|
| 360 |
+
"Ľ": 253,
|
| 361 |
+
"ľ": 254,
|
| 362 |
+
"Ŀ": 255,
|
| 363 |
+
"ŀ": 256,
|
| 364 |
+
"Ł": 257,
|
| 365 |
+
"ł": 258,
|
| 366 |
+
"Ń": 259,
|
| 367 |
+
"Ġt": 260,
|
| 368 |
+
"Ġa": 261,
|
| 369 |
+
"in": 262,
|
| 370 |
+
"he": 263,
|
| 371 |
+
"re": 264,
|
| 372 |
+
"on": 265,
|
| 373 |
+
"Ġthe": 266,
|
| 374 |
+
"er": 267,
|
| 375 |
+
"Ġs": 268,
|
| 376 |
+
"at": 269,
|
| 377 |
+
"Ġo": 270,
|
| 378 |
+
"en": 271,
|
| 379 |
+
"Ġc": 272,
|
| 380 |
+
"Ġw": 273,
|
| 381 |
+
"es": 274,
|
| 382 |
+
"nd": 275,
|
| 383 |
+
"it": 276,
|
| 384 |
+
"ing": 277,
|
| 385 |
+
"is": 278,
|
| 386 |
+
"or": 279,
|
| 387 |
+
"ou": 280,
|
| 388 |
+
"al": 281,
|
| 389 |
+
"Ġp": 282,
|
| 390 |
+
"ed": 283,
|
| 391 |
+
"Ġf": 284,
|
| 392 |
+
"an": 285,
|
| 393 |
+
"Ġb": 286,
|
| 394 |
+
"Ġin": 287,
|
| 395 |
+
"ar": 288,
|
| 396 |
+
"Ġof": 289,
|
| 397 |
+
"Ġm": 290,
|
| 398 |
+
"Ġand": 291,
|
| 399 |
+
"Ġto": 292,
|
| 400 |
+
"Ġd": 293,
|
| 401 |
+
"ion": 294,
|
| 402 |
+
"ic": 295,
|
| 403 |
+
"le": 296,
|
| 404 |
+
"om": 297,
|
| 405 |
+
"Ġh": 298,
|
| 406 |
+
"as": 299,
|
| 407 |
+
"Ġth": 300,
|
| 408 |
+
"ent": 301,
|
| 409 |
+
"Ġe": 302,
|
| 410 |
+
"Ġre": 303,
|
| 411 |
+
"ct": 304,
|
| 412 |
+
"il": 305,
|
| 413 |
+
"ro": 306,
|
| 414 |
+
"Ġl": 307,
|
| 415 |
+
"st": 308,
|
| 416 |
+
"ve": 309,
|
| 417 |
+
"Ġn": 310,
|
| 418 |
+
"ly": 311,
|
| 419 |
+
"et": 312,
|
| 420 |
+
"Ġy": 313,
|
| 421 |
+
"Ġg": 314,
|
| 422 |
+
"id": 315,
|
| 423 |
+
"im": 316,
|
| 424 |
+
"ĠT": 317,
|
| 425 |
+
"se": 318,
|
| 426 |
+
"ation": 319,
|
| 427 |
+
"Ġbe": 320,
|
| 428 |
+
"ol": 321,
|
| 429 |
+
"ce": 322,
|
| 430 |
+
"ur": 323,
|
| 431 |
+
"ut": 324,
|
| 432 |
+
"ow": 325,
|
| 433 |
+
"ra": 326,
|
| 434 |
+
"ot": 327,
|
| 435 |
+
"ig": 328,
|
| 436 |
+
"Ġyou": 329,
|
| 437 |
+
"Ġis": 330,
|
| 438 |
+
"Ġu": 331,
|
| 439 |
+
"ĠS": 332,
|
| 440 |
+
"ĠA": 333,
|
| 441 |
+
"ĠI": 334,
|
| 442 |
+
"Ġfor": 335,
|
| 443 |
+
"ch": 336,
|
| 444 |
+
"ver": 337,
|
| 445 |
+
"Ġon": 338,
|
| 446 |
+
"Ġst": 339,
|
| 447 |
+
"am": 340,
|
| 448 |
+
"ay": 341,
|
| 449 |
+
"ĠC": 342,
|
| 450 |
+
"Ġthat": 343,
|
| 451 |
+
"ir": 344,
|
| 452 |
+
"ith": 345,
|
| 453 |
+
"el": 346,
|
| 454 |
+
"Ġhe": 347,
|
| 455 |
+
"ul": 348,
|
| 456 |
+
"ad": 349,
|
| 457 |
+
"âĢ": 350,
|
| 458 |
+
"Ġcon": 351,
|
| 459 |
+
"Ġwith": 352,
|
| 460 |
+
"Ġas": 353,
|
| 461 |
+
"ter": 354,
|
| 462 |
+
"if": 355,
|
| 463 |
+
"Ġwh": 356,
|
| 464 |
+
"Ġan": 357,
|
| 465 |
+
"Ġit": 358,
|
| 466 |
+
"ĠM": 359,
|
| 467 |
+
"Ġor": 360,
|
| 468 |
+
"Ġpro": 361,
|
| 469 |
+
"Ġal": 362,
|
| 470 |
+
"her": 363,
|
| 471 |
+
"ers": 364,
|
| 472 |
+
"em": 365,
|
| 473 |
+
"od": 366,
|
| 474 |
+
"ess": 367,
|
| 475 |
+
"Ġex": 368,
|
| 476 |
+
"ate": 369,
|
| 477 |
+
"ĠB": 370,
|
| 478 |
+
"ag": 371,
|
| 479 |
+
"ist": 372,
|
| 480 |
+
"Ġcom": 373,
|
| 481 |
+
"ri": 374,
|
| 482 |
+
"ĠP": 375,
|
| 483 |
+
"us": 376,
|
| 484 |
+
"ill": 377,
|
| 485 |
+
"res": 378,
|
| 486 |
+
"pp": 379,
|
| 487 |
+
"ab": 380,
|
| 488 |
+
"ke": 381,
|
| 489 |
+
"th": 382,
|
| 490 |
+
"ĠH": 383
|
| 491 |
+
},
|
| 492 |
+
"merges": [
|
| 493 |
+
[
|
| 494 |
+
"Ġ",
|
| 495 |
+
"t"
|
| 496 |
+
],
|
| 497 |
+
[
|
| 498 |
+
"Ġ",
|
| 499 |
+
"a"
|
| 500 |
+
],
|
| 501 |
+
[
|
| 502 |
+
"i",
|
| 503 |
+
"n"
|
| 504 |
+
],
|
| 505 |
+
[
|
| 506 |
+
"h",
|
| 507 |
+
"e"
|
| 508 |
+
],
|
| 509 |
+
[
|
| 510 |
+
"r",
|
| 511 |
+
"e"
|
| 512 |
+
],
|
| 513 |
+
[
|
| 514 |
+
"o",
|
| 515 |
+
"n"
|
| 516 |
+
],
|
| 517 |
+
[
|
| 518 |
+
"Ġt",
|
| 519 |
+
"he"
|
| 520 |
+
],
|
| 521 |
+
[
|
| 522 |
+
"e",
|
| 523 |
+
"r"
|
| 524 |
+
],
|
| 525 |
+
[
|
| 526 |
+
"Ġ",
|
| 527 |
+
"s"
|
| 528 |
+
],
|
| 529 |
+
[
|
| 530 |
+
"a",
|
| 531 |
+
"t"
|
| 532 |
+
],
|
| 533 |
+
[
|
| 534 |
+
"Ġ",
|
| 535 |
+
"o"
|
| 536 |
+
],
|
| 537 |
+
[
|
| 538 |
+
"e",
|
| 539 |
+
"n"
|
| 540 |
+
],
|
| 541 |
+
[
|
| 542 |
+
"Ġ",
|
| 543 |
+
"c"
|
| 544 |
+
],
|
| 545 |
+
[
|
| 546 |
+
"Ġ",
|
| 547 |
+
"w"
|
| 548 |
+
],
|
| 549 |
+
[
|
| 550 |
+
"e",
|
| 551 |
+
"s"
|
| 552 |
+
],
|
| 553 |
+
[
|
| 554 |
+
"n",
|
| 555 |
+
"d"
|
| 556 |
+
],
|
| 557 |
+
[
|
| 558 |
+
"i",
|
| 559 |
+
"t"
|
| 560 |
+
],
|
| 561 |
+
[
|
| 562 |
+
"in",
|
| 563 |
+
"g"
|
| 564 |
+
],
|
| 565 |
+
[
|
| 566 |
+
"i",
|
| 567 |
+
"s"
|
| 568 |
+
],
|
| 569 |
+
[
|
| 570 |
+
"o",
|
| 571 |
+
"r"
|
| 572 |
+
],
|
| 573 |
+
[
|
| 574 |
+
"o",
|
| 575 |
+
"u"
|
| 576 |
+
],
|
| 577 |
+
[
|
| 578 |
+
"a",
|
| 579 |
+
"l"
|
| 580 |
+
],
|
| 581 |
+
[
|
| 582 |
+
"Ġ",
|
| 583 |
+
"p"
|
| 584 |
+
],
|
| 585 |
+
[
|
| 586 |
+
"e",
|
| 587 |
+
"d"
|
| 588 |
+
],
|
| 589 |
+
[
|
| 590 |
+
"Ġ",
|
| 591 |
+
"f"
|
| 592 |
+
],
|
| 593 |
+
[
|
| 594 |
+
"a",
|
| 595 |
+
"n"
|
| 596 |
+
],
|
| 597 |
+
[
|
| 598 |
+
"Ġ",
|
| 599 |
+
"b"
|
| 600 |
+
],
|
| 601 |
+
[
|
| 602 |
+
"Ġ",
|
| 603 |
+
"in"
|
| 604 |
+
],
|
| 605 |
+
[
|
| 606 |
+
"a",
|
| 607 |
+
"r"
|
| 608 |
+
],
|
| 609 |
+
[
|
| 610 |
+
"Ġo",
|
| 611 |
+
"f"
|
| 612 |
+
],
|
| 613 |
+
[
|
| 614 |
+
"Ġ",
|
| 615 |
+
"m"
|
| 616 |
+
],
|
| 617 |
+
[
|
| 618 |
+
"Ġa",
|
| 619 |
+
"nd"
|
| 620 |
+
],
|
| 621 |
+
[
|
| 622 |
+
"Ġt",
|
| 623 |
+
"o"
|
| 624 |
+
],
|
| 625 |
+
[
|
| 626 |
+
"Ġ",
|
| 627 |
+
"d"
|
| 628 |
+
],
|
| 629 |
+
[
|
| 630 |
+
"i",
|
| 631 |
+
"on"
|
| 632 |
+
],
|
| 633 |
+
[
|
| 634 |
+
"i",
|
| 635 |
+
"c"
|
| 636 |
+
],
|
| 637 |
+
[
|
| 638 |
+
"l",
|
| 639 |
+
"e"
|
| 640 |
+
],
|
| 641 |
+
[
|
| 642 |
+
"o",
|
| 643 |
+
"m"
|
| 644 |
+
],
|
| 645 |
+
[
|
| 646 |
+
"Ġ",
|
| 647 |
+
"h"
|
| 648 |
+
],
|
| 649 |
+
[
|
| 650 |
+
"a",
|
| 651 |
+
"s"
|
| 652 |
+
],
|
| 653 |
+
[
|
| 654 |
+
"Ġt",
|
| 655 |
+
"h"
|
| 656 |
+
],
|
| 657 |
+
[
|
| 658 |
+
"en",
|
| 659 |
+
"t"
|
| 660 |
+
],
|
| 661 |
+
[
|
| 662 |
+
"Ġ",
|
| 663 |
+
"e"
|
| 664 |
+
],
|
| 665 |
+
[
|
| 666 |
+
"Ġ",
|
| 667 |
+
"re"
|
| 668 |
+
],
|
| 669 |
+
[
|
| 670 |
+
"c",
|
| 671 |
+
"t"
|
| 672 |
+
],
|
| 673 |
+
[
|
| 674 |
+
"i",
|
| 675 |
+
"l"
|
| 676 |
+
],
|
| 677 |
+
[
|
| 678 |
+
"r",
|
| 679 |
+
"o"
|
| 680 |
+
],
|
| 681 |
+
[
|
| 682 |
+
"Ġ",
|
| 683 |
+
"l"
|
| 684 |
+
],
|
| 685 |
+
[
|
| 686 |
+
"s",
|
| 687 |
+
"t"
|
| 688 |
+
],
|
| 689 |
+
[
|
| 690 |
+
"v",
|
| 691 |
+
"e"
|
| 692 |
+
],
|
| 693 |
+
[
|
| 694 |
+
"Ġ",
|
| 695 |
+
"n"
|
| 696 |
+
],
|
| 697 |
+
[
|
| 698 |
+
"l",
|
| 699 |
+
"y"
|
| 700 |
+
],
|
| 701 |
+
[
|
| 702 |
+
"e",
|
| 703 |
+
"t"
|
| 704 |
+
],
|
| 705 |
+
[
|
| 706 |
+
"Ġ",
|
| 707 |
+
"y"
|
| 708 |
+
],
|
| 709 |
+
[
|
| 710 |
+
"Ġ",
|
| 711 |
+
"g"
|
| 712 |
+
],
|
| 713 |
+
[
|
| 714 |
+
"i",
|
| 715 |
+
"d"
|
| 716 |
+
],
|
| 717 |
+
[
|
| 718 |
+
"i",
|
| 719 |
+
"m"
|
| 720 |
+
],
|
| 721 |
+
[
|
| 722 |
+
"Ġ",
|
| 723 |
+
"T"
|
| 724 |
+
],
|
| 725 |
+
[
|
| 726 |
+
"s",
|
| 727 |
+
"e"
|
| 728 |
+
],
|
| 729 |
+
[
|
| 730 |
+
"at",
|
| 731 |
+
"ion"
|
| 732 |
+
],
|
| 733 |
+
[
|
| 734 |
+
"Ġb",
|
| 735 |
+
"e"
|
| 736 |
+
],
|
| 737 |
+
[
|
| 738 |
+
"o",
|
| 739 |
+
"l"
|
| 740 |
+
],
|
| 741 |
+
[
|
| 742 |
+
"c",
|
| 743 |
+
"e"
|
| 744 |
+
],
|
| 745 |
+
[
|
| 746 |
+
"u",
|
| 747 |
+
"r"
|
| 748 |
+
],
|
| 749 |
+
[
|
| 750 |
+
"u",
|
| 751 |
+
"t"
|
| 752 |
+
],
|
| 753 |
+
[
|
| 754 |
+
"o",
|
| 755 |
+
"w"
|
| 756 |
+
],
|
| 757 |
+
[
|
| 758 |
+
"r",
|
| 759 |
+
"a"
|
| 760 |
+
],
|
| 761 |
+
[
|
| 762 |
+
"o",
|
| 763 |
+
"t"
|
| 764 |
+
],
|
| 765 |
+
[
|
| 766 |
+
"i",
|
| 767 |
+
"g"
|
| 768 |
+
],
|
| 769 |
+
[
|
| 770 |
+
"Ġy",
|
| 771 |
+
"ou"
|
| 772 |
+
],
|
| 773 |
+
[
|
| 774 |
+
"Ġ",
|
| 775 |
+
"is"
|
| 776 |
+
],
|
| 777 |
+
[
|
| 778 |
+
"Ġ",
|
| 779 |
+
"u"
|
| 780 |
+
],
|
| 781 |
+
[
|
| 782 |
+
"Ġ",
|
| 783 |
+
"S"
|
| 784 |
+
],
|
| 785 |
+
[
|
| 786 |
+
"Ġ",
|
| 787 |
+
"A"
|
| 788 |
+
],
|
| 789 |
+
[
|
| 790 |
+
"Ġ",
|
| 791 |
+
"I"
|
| 792 |
+
],
|
| 793 |
+
[
|
| 794 |
+
"Ġf",
|
| 795 |
+
"or"
|
| 796 |
+
],
|
| 797 |
+
[
|
| 798 |
+
"c",
|
| 799 |
+
"h"
|
| 800 |
+
],
|
| 801 |
+
[
|
| 802 |
+
"v",
|
| 803 |
+
"er"
|
| 804 |
+
],
|
| 805 |
+
[
|
| 806 |
+
"Ġ",
|
| 807 |
+
"on"
|
| 808 |
+
],
|
| 809 |
+
[
|
| 810 |
+
"Ġs",
|
| 811 |
+
"t"
|
| 812 |
+
],
|
| 813 |
+
[
|
| 814 |
+
"a",
|
| 815 |
+
"m"
|
| 816 |
+
],
|
| 817 |
+
[
|
| 818 |
+
"a",
|
| 819 |
+
"y"
|
| 820 |
+
],
|
| 821 |
+
[
|
| 822 |
+
"Ġ",
|
| 823 |
+
"C"
|
| 824 |
+
],
|
| 825 |
+
[
|
| 826 |
+
"Ġth",
|
| 827 |
+
"at"
|
| 828 |
+
],
|
| 829 |
+
[
|
| 830 |
+
"i",
|
| 831 |
+
"r"
|
| 832 |
+
],
|
| 833 |
+
[
|
| 834 |
+
"it",
|
| 835 |
+
"h"
|
| 836 |
+
],
|
| 837 |
+
[
|
| 838 |
+
"e",
|
| 839 |
+
"l"
|
| 840 |
+
],
|
| 841 |
+
[
|
| 842 |
+
"Ġ",
|
| 843 |
+
"he"
|
| 844 |
+
],
|
| 845 |
+
[
|
| 846 |
+
"u",
|
| 847 |
+
"l"
|
| 848 |
+
],
|
| 849 |
+
[
|
| 850 |
+
"a",
|
| 851 |
+
"d"
|
| 852 |
+
],
|
| 853 |
+
[
|
| 854 |
+
"â",
|
| 855 |
+
"Ģ"
|
| 856 |
+
],
|
| 857 |
+
[
|
| 858 |
+
"Ġc",
|
| 859 |
+
"on"
|
| 860 |
+
],
|
| 861 |
+
[
|
| 862 |
+
"Ġw",
|
| 863 |
+
"ith"
|
| 864 |
+
],
|
| 865 |
+
[
|
| 866 |
+
"Ġa",
|
| 867 |
+
"s"
|
| 868 |
+
],
|
| 869 |
+
[
|
| 870 |
+
"t",
|
| 871 |
+
"er"
|
| 872 |
+
],
|
| 873 |
+
[
|
| 874 |
+
"i",
|
| 875 |
+
"f"
|
| 876 |
+
],
|
| 877 |
+
[
|
| 878 |
+
"Ġw",
|
| 879 |
+
"h"
|
| 880 |
+
],
|
| 881 |
+
[
|
| 882 |
+
"Ġa",
|
| 883 |
+
"n"
|
| 884 |
+
],
|
| 885 |
+
[
|
| 886 |
+
"Ġ",
|
| 887 |
+
"it"
|
| 888 |
+
],
|
| 889 |
+
[
|
| 890 |
+
"Ġ",
|
| 891 |
+
"M"
|
| 892 |
+
],
|
| 893 |
+
[
|
| 894 |
+
"Ġo",
|
| 895 |
+
"r"
|
| 896 |
+
],
|
| 897 |
+
[
|
| 898 |
+
"Ġp",
|
| 899 |
+
"ro"
|
| 900 |
+
],
|
| 901 |
+
[
|
| 902 |
+
"Ġa",
|
| 903 |
+
"l"
|
| 904 |
+
],
|
| 905 |
+
[
|
| 906 |
+
"he",
|
| 907 |
+
"r"
|
| 908 |
+
],
|
| 909 |
+
[
|
| 910 |
+
"er",
|
| 911 |
+
"s"
|
| 912 |
+
],
|
| 913 |
+
[
|
| 914 |
+
"e",
|
| 915 |
+
"m"
|
| 916 |
+
],
|
| 917 |
+
[
|
| 918 |
+
"o",
|
| 919 |
+
"d"
|
| 920 |
+
],
|
| 921 |
+
[
|
| 922 |
+
"es",
|
| 923 |
+
"s"
|
| 924 |
+
],
|
| 925 |
+
[
|
| 926 |
+
"Ġe",
|
| 927 |
+
"x"
|
| 928 |
+
],
|
| 929 |
+
[
|
| 930 |
+
"at",
|
| 931 |
+
"e"
|
| 932 |
+
],
|
| 933 |
+
[
|
| 934 |
+
"Ġ",
|
| 935 |
+
"B"
|
| 936 |
+
],
|
| 937 |
+
[
|
| 938 |
+
"a",
|
| 939 |
+
"g"
|
| 940 |
+
],
|
| 941 |
+
[
|
| 942 |
+
"is",
|
| 943 |
+
"t"
|
| 944 |
+
],
|
| 945 |
+
[
|
| 946 |
+
"Ġc",
|
| 947 |
+
"om"
|
| 948 |
+
],
|
| 949 |
+
[
|
| 950 |
+
"r",
|
| 951 |
+
"i"
|
| 952 |
+
],
|
| 953 |
+
[
|
| 954 |
+
"Ġ",
|
| 955 |
+
"P"
|
| 956 |
+
],
|
| 957 |
+
[
|
| 958 |
+
"u",
|
| 959 |
+
"s"
|
| 960 |
+
],
|
| 961 |
+
[
|
| 962 |
+
"il",
|
| 963 |
+
"l"
|
| 964 |
+
],
|
| 965 |
+
[
|
| 966 |
+
"re",
|
| 967 |
+
"s"
|
| 968 |
+
],
|
| 969 |
+
[
|
| 970 |
+
"p",
|
| 971 |
+
"p"
|
| 972 |
+
],
|
| 973 |
+
[
|
| 974 |
+
"a",
|
| 975 |
+
"b"
|
| 976 |
+
],
|
| 977 |
+
[
|
| 978 |
+
"k",
|
| 979 |
+
"e"
|
| 980 |
+
],
|
| 981 |
+
[
|
| 982 |
+
"t",
|
| 983 |
+
"h"
|
| 984 |
+
],
|
| 985 |
+
[
|
| 986 |
+
"Ġ",
|
| 987 |
+
"H"
|
| 988 |
+
]
|
| 989 |
+
]
|
| 990 |
+
}
|
| 991 |
+
}
|
tokenizer_config.json
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"backend": "tokenizers",
|
| 3 |
+
"bos_token": "<|bos|>",
|
| 4 |
+
"clean_up_tokenization_spaces": false,
|
| 5 |
+
"eos_token": "<|eos|>",
|
| 6 |
+
"model_max_length": 4096,
|
| 7 |
+
"pad_token": "<|pad|>",
|
| 8 |
+
"tokenizer_class": "TokenizersBackend",
|
| 9 |
+
"unk_token": "<|unk|>"
|
| 10 |
+
}
|
tokenizer_training_manifest.json
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"format": "bananamind2_pico_tokenizer_v1",
|
| 3 |
+
"stage": "tokenizer_complete",
|
| 4 |
+
"vocab_size": 384,
|
| 5 |
+
"model_max_length": 8192,
|
| 6 |
+
"target_gib": 1.0,
|
| 7 |
+
"sources": [
|
| 8 |
+
{
|
| 9 |
+
"name": "fineweb_hq",
|
| 10 |
+
"dataset_id": "epfml/FineWeb-HQ",
|
| 11 |
+
"config": null,
|
| 12 |
+
"text_field": "text",
|
| 13 |
+
"byte_share": 0.75,
|
| 14 |
+
"revision": "e58199cdd52438d94405df1a4d8630cc5f13bf84",
|
| 15 |
+
"target_bytes": 805306368,
|
| 16 |
+
"consumed_bytes": 805307468
|
| 17 |
+
},
|
| 18 |
+
{
|
| 19 |
+
"name": "cosmopedia_v2",
|
| 20 |
+
"dataset_id": "HuggingFaceTB/smollm-corpus",
|
| 21 |
+
"config": "cosmopedia-v2",
|
| 22 |
+
"text_field": "text",
|
| 23 |
+
"byte_share": 0.25,
|
| 24 |
+
"revision": "3ba9d605774198c5868892d7a8deda78031a781f",
|
| 25 |
+
"target_bytes": 268435456,
|
| 26 |
+
"consumed_bytes": 268438475
|
| 27 |
+
}
|
| 28 |
+
]
|
| 29 |
+
}
|
training_metrics.jsonl
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|