|
Download README.md from kaafivikrant/Second5M: direct link, hf CLI and curl.
- Browser
- Download file 4.94 kB
-
https://huggingface.co/kaafivikrant/Second5M/resolve/main/README.md
- Command line
-
hf download hf://kaafivikrant/Second5M/README.md
-
curl -L -o README.md https://huggingface.co/kaafivikrant/Second5M/resolve/main/README.md
4.94 kB
| language: en | |
| pipeline_tag: text-generation | |
| library_name: pytorch | |
| tags: | |
| - language-model | |
| - transformer | |
| - decoder-only | |
| - custom-architecture | |
| - educational | |
| - from-scratch | |
| - conversational | |
| datasets: | |
| - Salesforce/wikitext | |
| - HuggingFaceTB/smol-smoltalk | |
| - Estwld/empathetic_dialogues_llm | |
| # Second5M β Decoder-Only Transformer Language Model | |
| Second5M is an experimental 4,943,040-parameter decoder-only language model built from scratch in PyTorch. It was pretrained on WikiText-103 and then fine-tuned on conversational data. This is an educational research project with limited conversational ability; it frequently gives incoherent or unrelated responses. | |
| ## Model Details | |
| | Property | Value | | |
| | --- | --- | | |
| | Architecture | Custom decoder-only Transformer, pre-normalization | | |
| | Total trainable parameters | 4,943,040, including tied embeddings | | |
| | Layers | 8 | | |
| | Hidden dimension | 192 | | |
| | Attention | 6 query heads, 2 key/value heads | | |
| | FFN dimension | 560 (SwiGLU) | | |
| | Context window | 512 tokens | | |
| | Tokenizer | Custom byte-level BPE, vocabulary 8,192 | | |
| | Position encoding | Rotary position embeddings (RoPE) | | |
| | Normalization | RMSNorm | | |
| | Weight tying | Token embeddings and output head share weights | | |
| ## Quick Start | |
| Requirements: `pip install torch tokenizers huggingface_hub` | |
| ```python | |
| import sys | |
| import torch | |
| from huggingface_hub import snapshot_download | |
| from tokenizers import Tokenizer | |
| path = snapshot_download("kaafivikrant/Second5M") | |
| sys.path.insert(0, path) | |
| from model import ModelConfig, TinyChatLM | |
| import json | |
| with open(f"{path}/config.json") as f: | |
| config = json.load(f) | |
| keys = ModelConfig.__dataclass_fields__.keys() | |
| model = TinyChatLM(ModelConfig(**{k: config[k] for k in keys})) | |
| model.load_state_dict(torch.load(f"{path}/pytorch_model.pt", map_location="cpu", weights_only=True)) | |
| model.eval() | |
| tokenizer = Tokenizer.from_file(f"{path}/tokenizer.json") | |
| prompt = "Hello! How are you?" | |
| ids = [tokenizer.token_to_id("<|bos|>"), tokenizer.token_to_id("<|user|>")] | |
| ids += tokenizer.encode(prompt).ids | |
| ids += [tokenizer.token_to_id("<|eos|>"), tokenizer.token_to_id("<|assistant|>")] | |
| output = model.generate(torch.tensor([ids]), max_new_tokens=80, temperature=0.7, | |
| top_k=40, eos_id=tokenizer.token_to_id("<|eos|>")) | |
| print(tokenizer.decode(output[0, len(ids):].tolist(), skip_special_tokens=True)) | |
| ``` | |
| The supplied model uses custom PyTorch code; it is not a standard Transformers `AutoModel` architecture. Download the Python code only from a source you trust. | |
| ## Architecture | |
| ```text | |
| Tokens β tied embeddings β 8 decoder blocks β RMSNorm β tied output head β logits | |
| Each block: RMSNorm β causal grouped-query attention with RoPE β residual | |
| RMSNorm β SwiGLU feed-forward β residual | |
| ``` | |
| ## Training Details | |
| - Pretraining: WikiText-103 raw training data, custom tokenizer, 20,000 steps, 655,360,000 sampled tokens, NVIDIA T4. Last recorded validation loss: 3.5913. | |
| - First supervised fine-tuning: up to 50,000 eligible Smol-Smoltalk conversations; 3,000 steps. Long examples in this stage were truncated from the left, sometimes removing the user prompt. | |
| - Final supervised fine-tuning: 19,531 prepared training conversations from Empathetic Dialogues, initialized from the preceding chat checkpoint; 3,000 steps. The saved checkpoint records validation loss 3.0663 on that dataset. | |
| - The final supervised fine-tuning used assistant-turn loss and retained the user request for long examples. Training used AdamW and a cosine learning-rate schedule. | |
| - Losses from different stages use different data and should not be compared directly. No independent benchmark establishes improved chat quality. | |
| ## Generation Parameters | |
| `generate()` accepts `max_new_tokens`, `temperature`, `top_k`, and `eos_id`. | |
| ## Limitations | |
| - Responses to basic greetings have been observed to be incoherent or unrelated. | |
| - This model has limited knowledge, reasoning, context, and instruction-following ability. | |
| - It can make factual errors and produce repetitive, inappropriate, or misleading output. | |
| - It is not suitable for production, high-stakes decisions, or emotional-support use. | |
| ## Files | |
| | File | Description | | |
| | --- | --- | | |
| | `model.py` | Standalone model definition | | |
| | `pytorch_model.pt` | Model weights only | | |
| | `config.json` | Model configuration and final checkpoint metadata | | |
| | `tokenizer.json` | Byte-level BPE tokenizer | | |
| ## Data and License Information | |
| Pretraining used [WikiText](https://huggingface.co/datasets/Salesforce/wikitext), whose dataset card lists CC BY-SA 3.0 and GFDL. Fine-tuning used [Smol-Smoltalk](https://huggingface.co/datasets/HuggingFaceTB/smol-smoltalk) and [Empathetic Dialogues for LLM](https://huggingface.co/datasets/Estwld/empathetic_dialogues_llm), whose repository cards list Apache 2.0. Consult the original datasets and their terms before redistributing or using this model. No model license is asserted here. | |