Text Generation
Transformers
Safetensors
English
gpt2
causal-lm
nanogpt
bpe
educational
base-model
Eval Results (legacy)
text-generation-inference
Instructions to use SlayerLab/pollock-mini-lm-125m with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use SlayerLab/pollock-mini-lm-125m with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="SlayerLab/pollock-mini-lm-125m")# Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("SlayerLab/pollock-mini-lm-125m") model = AutoModelForCausalLM.from_pretrained("SlayerLab/pollock-mini-lm-125m", device_map="auto") - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use SlayerLab/pollock-mini-lm-125m with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "SlayerLab/pollock-mini-lm-125m" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "SlayerLab/pollock-mini-lm-125m", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }'Use Docker
docker model run hf.co/SlayerLab/pollock-mini-lm-125m
- SGLang
How to use SlayerLab/pollock-mini-lm-125m 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 "SlayerLab/pollock-mini-lm-125m" \ --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": "SlayerLab/pollock-mini-lm-125m", "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 "SlayerLab/pollock-mini-lm-125m" \ --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": "SlayerLab/pollock-mini-lm-125m", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }' - Docker Model Runner
How to use SlayerLab/pollock-mini-lm-125m with Docker Model Runner:
docker model run hf.co/SlayerLab/pollock-mini-lm-125m
Release Pollock 1.0 (r002)
Browse files- CHANGELOG.md +21 -0
- README.md +126 -157
- benchmarks/english.json +0 -0
- config.json +5 -4
- generation_config.json +5 -4
- logs/benchmark-english.log +0 -0
- logs/training.log +0 -0
- model.safetensors +2 -2
- release_manifest.json +84 -42
- tokenizer_config.json +1 -1
- training-history/r001.md +99 -0
- training-history/r002.md +106 -0
CHANGELOG.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Changelog
|
| 2 |
+
|
| 3 |
+
Revision numbers identify published model states independently of release names.
|
| 4 |
+
|
| 5 |
+
## r002 — Pollock 1.0
|
| 6 |
+
|
| 7 |
+
- Expanded the architecture from 12/12/768 to 12/14/896 while remaining below 128M total parameters.
|
| 8 |
+
- Reduced context from 2,048 to 1,024 tokens and increased the effective batch from 262,144 to 491,520 tokens.
|
| 9 |
+
- Changed the learning-rate range from 6e-4→6e-5 to 3e-4→3e-5 and warmup from 500 to 440 iterations.
|
| 10 |
+
- Trained with BF16 on 2× RTX 4090 instead of 1× RTX 5090.
|
| 11 |
+
- Introduced sampled training validation and a seven-task English zero-shot benchmark suite.
|
| 12 |
+
|
| 13 |
+
Full record: [`training-history/r002.md`](./training-history/r002.md)
|
| 14 |
+
|
| 15 |
+
## r001 — experimental predecessor
|
| 16 |
+
|
| 17 |
+
- Initial experimental release with a 12/12/768 architecture, 2,048-token context, and 95.96M nanoGPT-reported parameters.
|
| 18 |
+
- Trained for four dataset passes and selected by deterministic full-validation reevaluation of retained checkpoints.
|
| 19 |
+
- No downstream benchmark suite was run.
|
| 20 |
+
|
| 21 |
+
Full record and generation samples: [`training-history/r001.md`](./training-history/r001.md)
|
README.md
CHANGED
|
@@ -1,99 +1,107 @@
|
|
| 1 |
---
|
| 2 |
-
language:
|
| 3 |
-
- en
|
| 4 |
library_name: transformers
|
| 5 |
pipeline_tag: text-generation
|
| 6 |
license: other
|
| 7 |
license_name: mixed-upstream-dataset-terms
|
| 8 |
license_link: https://huggingface.co/SlayerLab/pollock-mini-lm-125m/blob/main/LICENSE.md
|
| 9 |
-
datasets:
|
| 10 |
-
|
| 11 |
-
tags:
|
| 12 |
-
- causal-lm
|
| 13 |
-
- gpt2
|
| 14 |
-
- nanogpt
|
| 15 |
-
- bpe
|
| 16 |
-
- educational
|
| 17 |
model-index:
|
| 18 |
-
- name:
|
| 19 |
results:
|
| 20 |
-
- task:
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 32 |
---
|
| 33 |
|
| 34 |
-
#
|
| 35 |
|
| 36 |
-
: mieszance 15 anglojęzycznych źródeł dobranej subiektywnie na zasadzie „common sense”, a nie poprzez naukową optymalizację proporcji.
|
| 65 |
-
|
| 66 |
-
- około 2,5 mld tokenów oszacowanych przed finalną tokenizacją;
|
| 67 |
-
- 2 703 768 815 tokenów BPE w zbiorze treningowym;
|
| 68 |
-
- 5 267 742 tokeny BPE w zbiorze walidacyjnym;
|
| 69 |
-
- deduplikacja dokładna i przybliżona, filtrowanie języka oraz decontaminacja benchmarków zostały wykonane na etapie przygotowania datasetu.
|
| 70 |
|
| 71 |
-
|
| 72 |
|
| 73 |
-
|
| 74 |
|
| 75 |
| Parametr | Wartość |
|
| 76 |
|---|---:|
|
| 77 |
-
|
|
| 78 |
-
|
|
| 79 |
-
|
|
| 80 |
-
| Sekwencja / micro-batch
|
|
|
|
|
|
|
| 81 |
| Optymalizator | fused AdamW, betas 0.9/0.95 |
|
| 82 |
-
| Learning rate |
|
| 83 |
-
| Warmup / weight decay / grad clip |
|
| 84 |
| Precyzja | BF16 |
|
| 85 |
-
| Sprzęt |
|
| 86 |
| Framework | PyTorch 2.8.0+cu128, nanoGPT commit `3adf61e` |
|
| 87 |
|
| 88 |
### Ewaluacja
|
| 89 |
|
| 90 |
-
|
| 91 |
|
| 92 |
-
|
| 93 |
-
|---|---:|---:|---:|
|
| 94 |
-
| Minimal EN validation | 5 267 456 | 3.40875361 | 30.227545 |
|
| 95 |
|
| 96 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 97 |
|
| 98 |
### Użycie z Transformers
|
| 99 |
|
|
@@ -106,141 +114,102 @@ model = AutoModelForCausalLM.from_pretrained(model_id)
|
|
| 106 |
|
| 107 |
inputs = tokenizer("Once upon a time", return_tensors="pt")
|
| 108 |
output = model.generate(
|
| 109 |
-
**inputs,
|
| 110 |
-
max_new_tokens=100,
|
| 111 |
-
do_sample=True,
|
| 112 |
-
temperature=0.7,
|
| 113 |
-
top_k=50,
|
| 114 |
)
|
| 115 |
print(tokenizer.decode(output[0], skip_special_tokens=True))
|
| 116 |
```
|
| 117 |
|
| 118 |
-
Model
|
| 119 |
-
|
| 120 |
-
### Przykładowe generacje
|
| 121 |
-
|
| 122 |
-
Poniższe próbki wygenerowano bez ręcznej selekcji wyników. Ustawienia: seed 1337 resetowany dla każdego promptu, temperature 0.7, top-k 50, maksymalnie 100 nowych tokenów. Prompt jest częścią pokazanego wyniku.
|
| 123 |
-
|
| 124 |
-
#### Wiedza ogólna / General knowledge
|
| 125 |
-
|
| 126 |
-
Prompt:
|
| 127 |
-
|
| 128 |
-
```text
|
| 129 |
-
The capital of France is
|
| 130 |
-
```
|
| 131 |
-
|
| 132 |
-
Wynik / Output:
|
| 133 |
-
|
| 134 |
-
```text
|
| 135 |
-
The capital of France is a first of the most important element in the construction of the Socket.
|
| 136 |
-
|
| 137 |
-
Most of the socket is not a type of sandstone but it is generally a rocket.
|
| 138 |
-
|
| 139 |
-
As a result, there is also an exception of the rocket site. The socket is called a rocket.
|
| 140 |
-
|
| 141 |
-
The rocket is the only rocket.
|
| 142 |
-
The rocket is the highest rocket.
|
| 143 |
-
|
| 144 |
-
The rocket is the highest rocket.
|
| 145 |
-
|
| 146 |
-
The rocket
|
| 147 |
-
```
|
| 148 |
-
|
| 149 |
-
#### Proste wyjaśnienie / Explanation
|
| 150 |
-
|
| 151 |
-
Prompt:
|
| 152 |
-
|
| 153 |
-
```text
|
| 154 |
-
Photosynthesis is the process by which
|
| 155 |
-
```
|
| 156 |
-
|
| 157 |
-
Wynik / Output:
|
| 158 |
-
|
| 159 |
-
```text
|
| 160 |
-
Photosynthesis is the process by which the first two events are found. A key option is to do a function in some cases, so it is called the first two terms. This is what I want to think. The first one is to multiply the number by the number of digits. (The second one is to multiply the number by the first two terms. The first two terms are divided by the second one, so that is the first four terms. The third one is to multiply the number by the number of digits. The third
|
| 161 |
-
```
|
| 162 |
-
|
| 163 |
-
#### Narracja / Story
|
| 164 |
-
|
| 165 |
-
Prompt:
|
| 166 |
-
|
| 167 |
-
```text
|
| 168 |
-
In a distant future, humanity discovered
|
| 169 |
-
```
|
| 170 |
-
|
| 171 |
-
Wynik / Output:
|
| 172 |
-
|
| 173 |
-
```text
|
| 174 |
-
In a distant future, humanity discovered to change, as well as the "coneurship and a continuance of the body.
|
| 175 |
-
This is not a matter of the general sense, but a lot of things we call us to the body. If we feel the body is the body’s internal structure, we’re going to change the way. The body is the body’s potential structure, meaning that it is used for a body to balance and develop a sensory to control each other.
|
| 176 |
-
What is the
|
| 177 |
-
```
|
| 178 |
-
|
| 179 |
-
#### Kod / Code
|
| 180 |
-
|
| 181 |
-
Prompt:
|
| 182 |
-
|
| 183 |
-
```text
|
| 184 |
-
def fibonacci(n):
|
| 185 |
-
```
|
| 186 |
-
|
| 187 |
-
Wynik / Output:
|
| 188 |
-
|
| 189 |
-
```text
|
| 190 |
-
def fibonacci(n):)) = (n - 1) + (n - 1) + ( n - 1) + ( n - 2) + ( n - 1) + ( n - 1) + ( n - 1) + ( n - 1) + ( n - 1) + ( n - 1) + ( n - 1) + ( n - 1) + ( n - 1) + ( n - 1) + ( n - 1) + ( n - 1) + ( n
|
| 191 |
-
```
|
| 192 |
|
| 193 |
### Ograniczenia i odpowiedzialne użycie
|
| 194 |
|
| 195 |
-
- Jest to surowy model bazowy bez instruction tuningu, RLHF ani alignmentu.
|
| 196 |
-
- Może halucynować
|
| 197 |
-
-
|
| 198 |
-
-
|
| 199 |
-
- Nie należy używać
|
| 200 |
-
- Użytkownik odpowiada za ocenę
|
| 201 |
|
| 202 |
## English
|
| 203 |
|
| 204 |
### Overview
|
| 205 |
|
| 206 |
-
`
|
| 207 |
-
|
| 208 |
-
The model's name loosely refers to Jackson Pollock's painterly gesture and to the idea of a controlled experiment with chance. nanoGPT serves as a canvas on which different data, configurations, and training decisions create distinct patterns of model behavior. What matters is not only the final result, but also observing the process and the influence of each component of the experiment.
|
| 209 |
|
| 210 |
-
The
|
| 211 |
|
| 212 |
### Architecture and tokenizer
|
| 213 |
|
| 214 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 215 |
|
| 216 |
### Data and training
|
| 217 |
|
| 218 |
-
The model was trained
|
| 219 |
|
| 220 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 221 |
|
| 222 |
### Evaluation
|
| 223 |
|
| 224 |
-
|
| 225 |
|
| 226 |
-
|
| 227 |
|
| 228 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 229 |
|
| 230 |
-
|
|
|
|
|
|
|
| 231 |
|
| 232 |
-
|
| 233 |
|
| 234 |
### Limitations and responsible use
|
| 235 |
|
| 236 |
-
This is
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 237 |
|
| 238 |
## Licencja / License
|
| 239 |
|
| 240 |
-
Kod nanoGPT jest
|
| 241 |
|
| 242 |
-
nanoGPT code is
|
| 243 |
|
| 244 |
## Pochodzenie / Attribution
|
| 245 |
|
| 246 |
-
Model i dataset: Dawid Majewski / SlayerLab.
|
|
|
|
| 1 |
---
|
| 2 |
+
language: [en]
|
|
|
|
| 3 |
library_name: transformers
|
| 4 |
pipeline_tag: text-generation
|
| 5 |
license: other
|
| 6 |
license_name: mixed-upstream-dataset-terms
|
| 7 |
license_link: https://huggingface.co/SlayerLab/pollock-mini-lm-125m/blob/main/LICENSE.md
|
| 8 |
+
datasets: [SlayerLab/minimal-en-corpus-2.5b]
|
| 9 |
+
tags: [causal-lm, gpt2, nanogpt, bpe, educational, base-model]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 10 |
model-index:
|
| 11 |
+
- name: Pollock 1.0
|
| 12 |
results:
|
| 13 |
+
- task: {type: text-generation, name: Language modeling}
|
| 14 |
+
dataset: {type: SlayerLab/minimal-en-corpus-2.5b, name: Minimal EN validation (sampled), split: validation}
|
| 15 |
+
metrics: [{type: loss, value: 2.577547, name: Final sampled validation loss}]
|
| 16 |
+
- task: {type: text-generation, name: Zero-shot evaluation}
|
| 17 |
+
dataset: {type: blimp, name: BLiMP, split: train}
|
| 18 |
+
metrics: [{type: acc, value: 0.7669701493}]
|
| 19 |
+
- task: {type: text-generation, name: Zero-shot evaluation}
|
| 20 |
+
dataset: {type: EleutherAI/lambada_openai, name: LAMBADA OpenAI, split: test}
|
| 21 |
+
metrics: [{type: acc, value: 0.2780904328}, {type: perplexity, value: 53.66752251}]
|
| 22 |
+
- task: {type: text-generation, name: Zero-shot evaluation}
|
| 23 |
+
dataset: {type: hellaswag, name: HellaSwag, split: validation}
|
| 24 |
+
metrics: [{type: acc_norm, value: 0.2987452699}]
|
| 25 |
+
- task: {type: text-generation, name: Zero-shot evaluation}
|
| 26 |
+
dataset: {type: piqa, name: PIQA, split: validation}
|
| 27 |
+
metrics: [{type: acc_norm, value: 0.6033732318}]
|
| 28 |
+
- task: {type: text-generation, name: Zero-shot evaluation}
|
| 29 |
+
dataset: {type: sciq, name: SciQ, split: test}
|
| 30 |
+
metrics: [{type: acc_norm, value: 0.658}]
|
| 31 |
+
- task: {type: text-generation, name: Zero-shot evaluation}
|
| 32 |
+
dataset: {type: allenai/ai2_arc, config: ARC-Easy, name: ARC-Easy, split: test}
|
| 33 |
+
metrics: [{type: acc_norm, value: 0.422979798}]
|
| 34 |
+
- task: {type: text-generation, name: Zero-shot evaluation}
|
| 35 |
+
dataset: {type: allenai/ai2_arc, config: ARC-Challenge, name: ARC-Challenge, split: test}
|
| 36 |
+
metrics: [{type: acc_norm, value: 0.2414675768}]
|
| 37 |
---
|
| 38 |
|
| 39 |
+
# Pollock 1.0 — r002
|
| 40 |
|
| 41 |
+

|
| 42 |
|
| 43 |
+
> **Wydanie eksperymentalne / Experimental release.** Model nie jest przeznaczony do zastosowań produkcyjnych ani wysokiego ryzyka. Rozmiar może różnić się między rewizjami, ale cały model zawsze pozostaje poniżej 128M parametrów. / The model is not intended for production or high-risk use. Its size may vary between revisions, but the complete model always remains below 128M parameters.
|
| 44 |
|
| 45 |
## Polski
|
| 46 |
|
| 47 |
### Opis
|
| 48 |
|
| 49 |
+
Pollock 1.0 (`r002`) to niewielki, anglojęzyczny model bazowy typu decoder-only, wytrenowany od zera jako czytelny eksperyment edukacyjny. Implementacja bazuje na [nanoGPT](https://github.com/karpathy/nanoGPT) i własnym tokenizerze byte-level BPE. Jest to model do uzupełniania tekstu, nie asystent konwersacyjny.
|
| 50 |
|
| 51 |
+
Nazwa luźno nawiązuje do gestu malarskiego Jacksona Pollocka: nanoGPT jest płótnem, na którym dane, konfiguracja i decyzje treningowe tworzą różne wzorce zachowania. Pełne dane techniczne tej wersji znajdują się w [`training-history/r002.md`](./training-history/r002.md), a różnice między wydaniami w [`CHANGELOG.md`](./CHANGELOG.md).
|
|
|
|
|
|
|
| 52 |
|
| 53 |
### Architektura i tokenizer
|
| 54 |
|
| 55 |
| Właściwość | Wartość |
|
| 56 |
|---|---:|
|
| 57 |
+
| Rewizja / wydanie | r002 / Pollock 1.0 |
|
| 58 |
+
| Typ | decoder-only Transformer w stylu GPT-2 |
|
| 59 |
+
| Warstwy / głowy / embedding | 12 / 14 / 896 |
|
| 60 |
+
| Maksymalny kontekst | 1024 tokeny |
|
| 61 |
| Słownik | 12 288 tokenów |
|
| 62 |
+
| Parametry nanoGPT | 126 637 952 |
|
| 63 |
+
| Łączne unikalne parametry trenowalne | 127 555 456 |
|
| 64 |
| Tokenizer | byte-level BPE, pretokenizacja w stylu GPT-2 |
|
| 65 |
| Tokeny specjalne | <code><|endoftext|></code>, <code><|im_start|></code>, <code><|im_end|></code> |
|
| 66 |
|
| 67 |
+
Artefakt Transformers ma 127 674 624 parametrów, w tym 119 168 zerowych parametrów bias dla zgodności z `GPT2LMHeadModel`. Natywny model był trenowany z `bias=False`.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 68 |
|
| 69 |
+
### Dane i trening
|
| 70 |
|
| 71 |
+
Model wytrenowano na [`SlayerLab/minimal-en-corpus-2.5b`](https://huggingface.co/datasets/SlayerLab/minimal-en-corpus-2.5b), subiektywnie dobranej mieszance 15 anglojęzycznych źródeł. Przygotowanie obejmowało deduplikację dokładną i przybliżoną, filtrowanie języka oraz decontaminację benchmarków.
|
| 72 |
|
| 73 |
| Parametr | Wartość |
|
| 74 |
|---|---:|
|
| 75 |
+
| Tokeny treningowe / walidacyjne | 2 703 768 815 / 5 267 742 |
|
| 76 |
+
| Finalny checkpoint | iteracja 22 004 |
|
| 77 |
+
| Przetworzone tokeny | 10 815 406 080 (około 4 epoki) |
|
| 78 |
+
| Sekwencja / micro-batch na GPU | 1024 / 12 |
|
| 79 |
+
| Akumulacja globalna / na GPU | 40 / 20 micro-stepów |
|
| 80 |
+
| Effective batch | 491 520 tokenów |
|
| 81 |
| Optymalizator | fused AdamW, betas 0.9/0.95 |
|
| 82 |
+
| Learning rate | 3e-4 → 3e-5, cosine decay |
|
| 83 |
+
| Warmup / weight decay / grad clip | 440 / 0.1 / 1.0 |
|
| 84 |
| Precyzja | BF16 |
|
| 85 |
+
| Sprzęt | 2× NVIDIA GeForce RTX 4090 24 GB |
|
| 86 |
| Framework | PyTorch 2.8.0+cu128, nanoGPT commit `3adf61e` |
|
| 87 |
|
| 88 |
### Ewaluacja
|
| 89 |
|
| 90 |
+
Loss treningowy szacowano na 100 losowo próbkowanych batchach na split. Finalny checkpoint uzyskał validation loss **2.577547**; najlepszy próbkowany wynik to **2.5600** w kroku 20 000. Nie należy porównywać tych wartości bezpośrednio z pełną, deterministyczną walidacją r001.
|
| 91 |
|
| 92 |
+
Benchmarki wykonano zero-shot na pełnych splitach przy użyciu `lm-evaluation-harness` 0.4.12, batch size 8 i BF16.
|
|
|
|
|
|
|
| 93 |
|
| 94 |
+
| Benchmark | Główna metryka | Wynik | Próbki |
|
| 95 |
+
|---|---|---:|---:|
|
| 96 |
+
| BLiMP | accuracy | 0.766970 | 67 000 |
|
| 97 |
+
| LAMBADA OpenAI | accuracy | 0.278090 | 5 153 |
|
| 98 |
+
| HellaSwag | normalized accuracy | 0.298745 | 10 042 |
|
| 99 |
+
| PIQA | normalized accuracy | 0.603373 | 1 838 |
|
| 100 |
+
| SciQ | normalized accuracy | 0.658000 | 1 000 |
|
| 101 |
+
| ARC-Easy | normalized accuracy | 0.422980 | 2 376 |
|
| 102 |
+
| ARC-Challenge | normalized accuracy | 0.241468 | 1 172 |
|
| 103 |
+
|
| 104 |
+
LAMBADA osiągnęła perplexity 53.667523. Pełne metryki i protokół zapisano w historii r002.
|
| 105 |
|
| 106 |
### Użycie z Transformers
|
| 107 |
|
|
|
|
| 114 |
|
| 115 |
inputs = tokenizer("Once upon a time", return_tensors="pt")
|
| 116 |
output = model.generate(
|
| 117 |
+
**inputs, max_new_tokens=100, do_sample=True, temperature=0.7, top_k=50
|
|
|
|
|
|
|
|
|
|
|
|
|
| 118 |
)
|
| 119 |
print(tokenizer.decode(output[0], skip_special_tokens=True))
|
| 120 |
```
|
| 121 |
|
| 122 |
+
Model używa standardowego `GPT2LMHeadModel`; `trust_remote_code=True` nie jest potrzebne. Dla r002 nie opublikowano jeszcze próbek generacji. Historyczne próbki są przypisane do poprzednich wag w historii r001.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 123 |
|
| 124 |
### Ograniczenia i odpowiedzialne użycie
|
| 125 |
|
| 126 |
+
- Jest to surowy model bazowy bez instruction tuningu, RLHF ani alignmentu.
|
| 127 |
+
- Może halucynować oraz generować treści toksyczne, stronnicze, niebezpieczne lub podobne do danych treningowych.
|
| 128 |
+
- Mały rozmiar ogranicza wiedzę, rozumowanie, spójność długiego tekstu i jakość kodu.
|
| 129 |
+
- Model trenowano i oceniano głównie po angielsku.
|
| 130 |
+
- Nie należy używać go do porad medycznych, prawnych i finansowych, decyzji o ludziach ani zastosowań wysokiego ryzyka.
|
| 131 |
+
- Użytkownik odpowiada za ocenę warunków źródeł danych dla swojego zastosowania.
|
| 132 |
|
| 133 |
## English
|
| 134 |
|
| 135 |
### Overview
|
| 136 |
|
| 137 |
+
Pollock 1.0 (`r002`) is a small English decoder-only base language model trained from scratch as a readable educational experiment. It is based on [nanoGPT](https://github.com/karpathy/nanoGPT) and a custom byte-level BPE tokenizer. It is a completion model, not a conversational assistant.
|
|
|
|
|
|
|
| 138 |
|
| 139 |
+
The name loosely refers to Jackson Pollock's painterly gesture: nanoGPT is the canvas on which data, configuration, and training decisions create different behavioral patterns. See [`training-history/r002.md`](./training-history/r002.md) for the complete technical record and [`CHANGELOG.md`](./CHANGELOG.md) for release-to-release changes.
|
| 140 |
|
| 141 |
### Architecture and tokenizer
|
| 142 |
|
| 143 |
+
| Property | Value |
|
| 144 |
+
|---|---:|
|
| 145 |
+
| Revision / release | r002 / Pollock 1.0 |
|
| 146 |
+
| Type | GPT-2-style decoder-only Transformer |
|
| 147 |
+
| Layers / heads / width | 12 / 14 / 896 |
|
| 148 |
+
| Maximum context | 1,024 tokens |
|
| 149 |
+
| Vocabulary | 12,288 tokens |
|
| 150 |
+
| nanoGPT parameters | 126,637,952 |
|
| 151 |
+
| Total unique trainable parameters | 127,555,456 |
|
| 152 |
+
| Tokenizer | byte-level BPE, GPT-2-style pretokenization |
|
| 153 |
+
| Special tokens | `<|endoftext|>`, `<|im_start|>`, `<|im_end|>` |
|
| 154 |
+
|
| 155 |
+
The Transformers artifact has 127,674,624 parameters, including 119,168 zero-valued compatibility bias parameters required by `GPT2LMHeadModel`. The native model was trained with `bias=False`.
|
| 156 |
|
| 157 |
### Data and training
|
| 158 |
|
| 159 |
+
The model was trained on [`SlayerLab/minimal-en-corpus-2.5b`](https://huggingface.co/datasets/SlayerLab/minimal-en-corpus-2.5b), a subjectively selected mixture of 15 English-language sources. Preparation included exact and approximate deduplication, language filtering, and benchmark decontamination.
|
| 160 |
|
| 161 |
+
| Setting | Value |
|
| 162 |
+
|---|---:|
|
| 163 |
+
| Training / validation tokens | 2,703,768,815 / 5,267,742 |
|
| 164 |
+
| Final checkpoint | iteration 22,004 |
|
| 165 |
+
| Token presentations | 10,815,406,080 (approximately 4 epochs) |
|
| 166 |
+
| Sequence / micro-batch per GPU | 1,024 / 12 |
|
| 167 |
+
| Global / per-GPU accumulation | 40 / 20 micro-steps |
|
| 168 |
+
| Effective batch | 491,520 tokens |
|
| 169 |
+
| Optimizer | fused AdamW, betas 0.9/0.95 |
|
| 170 |
+
| Learning rate | 3e-4 → 3e-5, cosine decay |
|
| 171 |
+
| Warmup / weight decay / grad clip | 440 / 0.1 / 1.0 |
|
| 172 |
+
| Precision | BF16 |
|
| 173 |
+
| Hardware | 2× NVIDIA GeForce RTX 4090 24 GB |
|
| 174 |
+
| Framework | PyTorch 2.8.0+cu128, nanoGPT commit `3adf61e` |
|
| 175 |
|
| 176 |
### Evaluation
|
| 177 |
|
| 178 |
+
Training-time loss was estimated from 100 randomly sampled batches per split. The final checkpoint achieved validation loss **2.577547**; the best sampled result was **2.5600** at step 20,000. These values are not directly comparable with r001's full deterministic validation.
|
| 179 |
|
| 180 |
+
Benchmarks used complete splits with `lm-evaluation-harness` 0.4.12, zero-shot evaluation, batch size 8, and BF16.
|
| 181 |
|
| 182 |
+
| Benchmark | Primary metric | Score | Samples |
|
| 183 |
+
|---|---|---:|---:|
|
| 184 |
+
| BLiMP | accuracy | 0.766970 | 67,000 |
|
| 185 |
+
| LAMBADA OpenAI | accuracy | 0.278090 | 5,153 |
|
| 186 |
+
| HellaSwag | normalized accuracy | 0.298745 | 10,042 |
|
| 187 |
+
| PIQA | normalized accuracy | 0.603373 | 1,838 |
|
| 188 |
+
| SciQ | normalized accuracy | 0.658000 | 1,000 |
|
| 189 |
+
| ARC-Easy | normalized accuracy | 0.422980 | 2,376 |
|
| 190 |
+
| ARC-Challenge | normalized accuracy | 0.241468 | 1,172 |
|
| 191 |
|
| 192 |
+
LAMBADA perplexity was 53.667523. Full metrics and protocol details are recorded in the r002 history.
|
| 193 |
+
|
| 194 |
+
### Usage
|
| 195 |
|
| 196 |
+
Use the Transformers example in the Polish section. The artifact uses standard `GPT2LMHeadModel`; `trust_remote_code=True` is unnecessary. No r002 generation samples have been published yet. Historical samples are explicitly attached to the predecessor weights in the r001 history.
|
| 197 |
|
| 198 |
### Limitations and responsible use
|
| 199 |
|
| 200 |
+
- This is a raw base model without instruction tuning, RLHF, or safety alignment.
|
| 201 |
+
- It may hallucinate and generate toxic, biased, unsafe, or training-like text.
|
| 202 |
+
- Its small size limits knowledge, reasoning, long-form coherence, and code quality.
|
| 203 |
+
- It was trained and evaluated primarily in English.
|
| 204 |
+
- Do not use it for medical, legal, financial, high-impact, or production decisions without independent safeguards.
|
| 205 |
+
- Users must evaluate upstream dataset terms for their intended use.
|
| 206 |
|
| 207 |
## Licencja / License
|
| 208 |
|
| 209 |
+
Kod nanoGPT jest na licencji MIT. Korpus łączy źródła o różnych warunkach i nie ma jednej wspólnej licencji, dlatego model oznaczono jako `license: other`. Szczegóły: [`LICENSE.md`](./LICENSE.md) i karta datasetu.
|
| 210 |
|
| 211 |
+
nanoGPT code is MIT-licensed. The corpus combines sources governed by different terms and has no single common license, so the model is marked `license: other`. See [`LICENSE.md`](./LICENSE.md) and the dataset card.
|
| 212 |
|
| 213 |
## Pochodzenie / Attribution
|
| 214 |
|
| 215 |
+
Model i dataset / Model and dataset: Dawid Majewski / SlayerLab. Trening bazuje na / Training is based on [karpathy/nanoGPT](https://github.com/karpathy/nanoGPT).
|
benchmarks/english.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
config.json
CHANGED
|
@@ -12,12 +12,13 @@
|
|
| 12 |
"initializer_range": 0.02,
|
| 13 |
"layer_norm_epsilon": 1e-05,
|
| 14 |
"model_type": "gpt2",
|
| 15 |
-
"
|
| 16 |
-
"
|
| 17 |
-
"
|
|
|
|
| 18 |
"n_inner": null,
|
| 19 |
"n_layer": 12,
|
| 20 |
-
"n_positions":
|
| 21 |
"pad_token_id": 12285,
|
| 22 |
"reorder_and_upcast_attn": false,
|
| 23 |
"resid_pdrop": 0.0,
|
|
|
|
| 12 |
"initializer_range": 0.02,
|
| 13 |
"layer_norm_epsilon": 1e-05,
|
| 14 |
"model_type": "gpt2",
|
| 15 |
+
"model_version": "1.0",
|
| 16 |
+
"n_ctx": 1024,
|
| 17 |
+
"n_embd": 896,
|
| 18 |
+
"n_head": 14,
|
| 19 |
"n_inner": null,
|
| 20 |
"n_layer": 12,
|
| 21 |
+
"n_positions": 1024,
|
| 22 |
"pad_token_id": 12285,
|
| 23 |
"reorder_and_upcast_attn": false,
|
| 24 |
"resid_pdrop": 0.0,
|
generation_config.json
CHANGED
|
@@ -1,9 +1,10 @@
|
|
| 1 |
{
|
|
|
|
| 2 |
"bos_token_id": 12285,
|
| 3 |
-
"do_sample": true,
|
| 4 |
"eos_token_id": 12285,
|
|
|
|
|
|
|
| 5 |
"pad_token_id": 12285,
|
| 6 |
-
"
|
| 7 |
-
"
|
| 8 |
-
"transformers_version": "5.15.1"
|
| 9 |
}
|
|
|
|
| 1 |
{
|
| 2 |
+
"_from_model_config": true,
|
| 3 |
"bos_token_id": 12285,
|
|
|
|
| 4 |
"eos_token_id": 12285,
|
| 5 |
+
"output_attentions": false,
|
| 6 |
+
"output_hidden_states": false,
|
| 7 |
"pad_token_id": 12285,
|
| 8 |
+
"transformers_version": "5.15.1",
|
| 9 |
+
"use_cache": true
|
|
|
|
| 10 |
}
|
logs/benchmark-english.log
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
logs/training.log
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
model.safetensors
CHANGED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
-
size
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:2aada5b26abe9ce3b70af393d77be4ed1a799a7205b9c0dd5cfaff8bcaabce68
|
| 3 |
+
size 510713512
|
release_manifest.json
CHANGED
|
@@ -1,49 +1,91 @@
|
|
| 1 |
{
|
| 2 |
-
"schema_version":
|
|
|
|
|
|
|
|
|
|
| 3 |
"model_id": "SlayerLab/pollock-mini-lm-125m",
|
| 4 |
"source_checkpoint": {
|
| 5 |
-
"
|
| 6 |
-
"sha256": "
|
| 7 |
-
"iteration":
|
| 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 |
}
|
|
|
|
| 1 |
{
|
| 2 |
+
"schema_version": 2,
|
| 3 |
+
"revision": 2,
|
| 4 |
+
"revision_id": "r002",
|
| 5 |
+
"release": "Pollock 1.0",
|
| 6 |
"model_id": "SlayerLab/pollock-mini-lm-125m",
|
| 7 |
"source_checkpoint": {
|
| 8 |
+
"path_in_training_workspace": "runs/minimal-en-125m-4ep/ckpt.pt",
|
| 9 |
+
"sha256": "026f54a390036b35792aa8fb131c8b0d394efb6d933753fb0e1257e55a67374b",
|
| 10 |
+
"iteration": 22004,
|
| 11 |
+
"tokens_seen": 10815406080,
|
| 12 |
+
"native_nanogpt_parameters": 126637952,
|
| 13 |
+
"native_unique_trainable_parameters": 127555456
|
| 14 |
},
|
| 15 |
+
"architecture": {
|
| 16 |
+
"n_layer": 12,
|
| 17 |
+
"n_head": 14,
|
| 18 |
+
"n_embd": 896,
|
| 19 |
+
"block_size": 1024,
|
| 20 |
+
"vocab_size": 12288,
|
| 21 |
+
"dropout": 0.0,
|
| 22 |
+
"bias": false,
|
| 23 |
+
"tied_word_embeddings": true
|
| 24 |
+
},
|
| 25 |
+
"training": {
|
| 26 |
+
"dataset": "SlayerLab/minimal-en-corpus-2.5b",
|
| 27 |
+
"init_from": "scratch",
|
| 28 |
+
"micro_batch_per_gpu": 12,
|
| 29 |
+
"gradient_accumulation_global": 40,
|
| 30 |
+
"ddp_world_size": 2,
|
| 31 |
+
"effective_batch_tokens": 491520,
|
| 32 |
+
"optimizer": "fused AdamW",
|
| 33 |
+
"learning_rate": 0.0003,
|
| 34 |
+
"min_learning_rate": 0.00003,
|
| 35 |
+
"schedule": "cosine",
|
| 36 |
+
"warmup_iters": 440,
|
| 37 |
+
"lr_decay_iters": 22003,
|
| 38 |
+
"beta1": 0.9,
|
| 39 |
+
"beta2": 0.95,
|
| 40 |
+
"weight_decay": 0.1,
|
| 41 |
+
"grad_clip": 1.0,
|
| 42 |
+
"precision": "bfloat16",
|
| 43 |
+
"compile": true,
|
| 44 |
+
"backend": "nccl",
|
| 45 |
+
"seed": 1337,
|
| 46 |
+
"hardware": "2x NVIDIA GeForce RTX 4090 24 GB",
|
| 47 |
+
"nanogpt_commit": "3adf61e"
|
| 48 |
+
},
|
| 49 |
+
"evaluation": {
|
| 50 |
+
"final_sampled_validation_loss": 2.577547,
|
| 51 |
+
"best_sampled_validation_loss": 2.56,
|
| 52 |
+
"best_sampled_validation_step": 20000,
|
| 53 |
+
"training_eval_batches": 100,
|
| 54 |
+
"benchmark_harness": "lm-evaluation-harness 0.4.12",
|
| 55 |
+
"benchmark_num_fewshot": 0,
|
| 56 |
+
"benchmark_batch_size": 8,
|
| 57 |
+
"benchmarks": {
|
| 58 |
+
"blimp": {"acc": 0.7669701492537313, "samples": 67000},
|
| 59 |
+
"lambada_openai": {"acc": 0.2780904327576169, "perplexity": 53.66752251060021, "samples": 5153},
|
| 60 |
+
"hellaswag": {"acc_norm": 0.29874526986656047, "acc": 0.2818163712407887, "samples": 10042},
|
| 61 |
+
"piqa": {"acc_norm": 0.6033732317736671, "acc": 0.6137105549510338, "samples": 1838},
|
| 62 |
+
"sciq": {"acc_norm": 0.658, "acc": 0.737, "samples": 1000},
|
| 63 |
+
"arc_easy": {"acc_norm": 0.42297979797979796, "acc": 0.4659090909090909, "samples": 2376},
|
| 64 |
+
"arc_challenge": {"acc_norm": 0.24146757679180889, "acc": 0.20819112627986347, "samples": 1172}
|
| 65 |
}
|
| 66 |
+
},
|
| 67 |
+
"conversion": {
|
| 68 |
+
"target_class": "GPT2LMHeadModel",
|
| 69 |
+
"transformers_version": "5.15.1",
|
| 70 |
+
"unique_serialized_parameters": 127674624,
|
| 71 |
+
"compatibility_zero_bias_parameters": 119168,
|
| 72 |
+
"validation_probe_shape": [2, 64],
|
| 73 |
+
"max_absolute_logit_error": 0.0
|
| 74 |
+
},
|
| 75 |
+
"artifacts": {
|
| 76 |
+
"README.md": {"sha256": "789645020a3864ad81e8a5271118aeed322c9a56039209e715689866d781342f"},
|
| 77 |
+
"CHANGELOG.md": {"sha256": "379bf0c49f8a8c4a2d40e3ae1775876c37de2e6dac8125385be77742c96529d0"},
|
| 78 |
+
"training-history/r001.md": {"sha256": "5e3cb7664fa09902369bb650d1f94cc63b1f0bd1c8a7ffea5c1e6c16c8c4c5df"},
|
| 79 |
+
"training-history/r002.md": {"sha256": "bf4364b27d966fe32676d75c269dfd1e53a4939246a0888c0cce7cd63641952d"},
|
| 80 |
+
"benchmarks/english.json": {"sha256": "eff82f7d45c82d715c536ac728787ea1eee42515501d4a0544934badab69ce2d"},
|
| 81 |
+
"LICENSE.md": {"sha256": "46cbe928ed0aa24875f02f774313b27ec9d8abdf41f0c9ef67e0adb4e0614de4"},
|
| 82 |
+
"config.json": {"sha256": "0ad9e47efb8d2ddf4666f016a286604365faa4ff6ece9654718c3e4daa43c41e"},
|
| 83 |
+
"generation_config.json": {"sha256": "435beb27be51f0ed054f4a011e5109d125cdadc118b8799b18b155cc798d94d2"},
|
| 84 |
+
"model.safetensors": {"sha256": "2aada5b26abe9ce3b70af393d77be4ed1a799a7205b9c0dd5cfaff8bcaabce68"},
|
| 85 |
+
"special_tokens_map.json": {"sha256": "8b2257a17ea997bb038f43b133aefec82344ad2b8abc2b8a02a6c0a994ed624e"},
|
| 86 |
+
"tokenizer.json": {"sha256": "6cda4e5ec8293f3b821e02253f9c0e88e43ad4f7c6e1324763e1fb91749fef51"},
|
| 87 |
+
"tokenizer_config.json": {"sha256": "4cdabe37dbdc1adfcc017ee9a1f86ab89bdf184827d2d9f05181cae0f8af19bf"},
|
| 88 |
+
"logs/training.log": {"sha256": "ff856088bdf504759600553a4e9ad5a23f965d54646838adcf0599bb1621d6e1"},
|
| 89 |
+
"logs/benchmark-english.log": {"sha256": "f81ad6c915ae49a0d49f61c15ea86a265c31364e5418150c35aa416d4809e22a"}
|
| 90 |
}
|
| 91 |
}
|
tokenizer_config.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
| 6 |
"<|im_start|>",
|
| 7 |
"<|im_end|>"
|
| 8 |
],
|
| 9 |
-
"model_max_length":
|
| 10 |
"pad_token": "<|endoftext|>",
|
| 11 |
"tokenizer_class": "TokenizersBackend"
|
| 12 |
}
|
|
|
|
| 6 |
"<|im_start|>",
|
| 7 |
"<|im_end|>"
|
| 8 |
],
|
| 9 |
+
"model_max_length": 1024,
|
| 10 |
"pad_token": "<|endoftext|>",
|
| 11 |
"tokenizer_class": "TokenizersBackend"
|
| 12 |
}
|
training-history/r001.md
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# r001 — experimental predecessor training record
|
| 2 |
+
|
| 3 |
+
## Identity
|
| 4 |
+
|
| 5 |
+
`r001` is the first published experimental predecessor of Pollock 1.0. All values and samples in this file describe the r001 weights, not the current r002 weights.
|
| 6 |
+
|
| 7 |
+
## Architecture and tokenizer
|
| 8 |
+
|
| 9 |
+
| Setting | Value |
|
| 10 |
+
|---|---:|
|
| 11 |
+
| Model type | GPT-2-style decoder-only Transformer |
|
| 12 |
+
| Layers / heads / width | 12 / 12 / 768 |
|
| 13 |
+
| nanoGPT reported parameters | approximately 95.96M |
|
| 14 |
+
| Context length | 2,048 tokens |
|
| 15 |
+
| Vocabulary | 12,288 tokens |
|
| 16 |
+
| Tokenizer | custom byte-level BPE with GPT-2-style pretokenization |
|
| 17 |
+
| Special tokens | `<|endoftext|>`, `<|im_start|>`, `<|im_end|>` |
|
| 18 |
+
|
| 19 |
+
## Data and training
|
| 20 |
+
|
| 21 |
+
The model used [Minimal EN Corpus 2.5B](https://huggingface.co/datasets/SlayerLab/minimal-en-corpus-2.5b), the same 15-source English mixture documented by the dataset card. The train split contained 2,703,768,815 final BPE tokens and the validation split 5,267,742 tokens.
|
| 22 |
+
|
| 23 |
+
| Setting | Value |
|
| 24 |
+
|---|---:|
|
| 25 |
+
| Optimizer steps | 41,257 |
|
| 26 |
+
| Token presentations | 10,815,275,008 (4 passes) |
|
| 27 |
+
| Sequence / micro-batch / accumulation | 2,048 / 32 / 4 |
|
| 28 |
+
| Effective batch | 262,144 tokens |
|
| 29 |
+
| Optimizer | fused AdamW |
|
| 30 |
+
| Adam betas | 0.9 / 0.95 |
|
| 31 |
+
| Maximum / minimum LR | 6e-4 / 6e-5 |
|
| 32 |
+
| Schedule / warmup | cosine / 500 iterations |
|
| 33 |
+
| Weight decay / grad clip | 0.1 / 1.0 |
|
| 34 |
+
| Precision | BF16 |
|
| 35 |
+
| Hardware | 1× NVIDIA GeForce RTX 5090 32 GB |
|
| 36 |
+
| PyTorch / nanoGPT commit | 2.8.0+cu128 / `3adf61e` |
|
| 37 |
+
|
| 38 |
+
## Evaluation
|
| 39 |
+
|
| 40 |
+
The release checkpoint was selected after deterministically reevaluating every retained checkpoint over the full validation binary. A historical bug affected the training-time `best_val_loss` bookkeeping, so selection did not rely on the `checkpoint_best_val.pt` filename.
|
| 41 |
+
|
| 42 |
+
| Dataset | Evaluated tokens | Windows | Loss | Perplexity |
|
| 43 |
+
|---|---:|---:|---:|---:|
|
| 44 |
+
| Minimal EN validation | 5,267,456 | 2,572 non-overlapping × 2,048 | 3.40875361 | 30.227545 |
|
| 45 |
+
|
| 46 |
+
Evaluation used BF16. No downstream benchmark suite was run for r001. Its validation result is not directly comparable with r002's randomly sampled 100-batch training validation.
|
| 47 |
+
|
| 48 |
+
## Historical generation samples
|
| 49 |
+
|
| 50 |
+
These four samples were produced by the **r001 predecessor weights** without cherry-picking. Seed 1337 was reset for each prompt; temperature was 0.7, top-k was 50, and generation was limited to 100 new tokens. Each prompt is included in its output.
|
| 51 |
+
|
| 52 |
+
### General knowledge
|
| 53 |
+
|
| 54 |
+
Prompt: `The capital of France is`
|
| 55 |
+
|
| 56 |
+
```text
|
| 57 |
+
The capital of France is a first of the most important element in the construction of the Socket.
|
| 58 |
+
|
| 59 |
+
Most of the socket is not a type of sandstone but it is generally a rocket.
|
| 60 |
+
|
| 61 |
+
As a result, there is also an exception of the rocket site. The socket is called a rocket.
|
| 62 |
+
|
| 63 |
+
The rocket is the only rocket.
|
| 64 |
+
The rocket is the highest rocket.
|
| 65 |
+
|
| 66 |
+
The rocket is the highest rocket.
|
| 67 |
+
|
| 68 |
+
The rocket
|
| 69 |
+
```
|
| 70 |
+
|
| 71 |
+
### Explanation
|
| 72 |
+
|
| 73 |
+
Prompt: `Photosynthesis is the process by which`
|
| 74 |
+
|
| 75 |
+
```text
|
| 76 |
+
Photosynthesis is the process by which the first two events are found. A key option is to do a function in some cases, so it is called the first two terms. This is what I want to think. The first one is to multiply the number by the number of digits. (The second one is to multiply the number by the first two terms. The first two terms are divided by the second one, so that is the first four terms. The third one is to multiply the number by the number of digits. The third
|
| 77 |
+
```
|
| 78 |
+
|
| 79 |
+
### Story
|
| 80 |
+
|
| 81 |
+
Prompt: `In a distant future, humanity discovered`
|
| 82 |
+
|
| 83 |
+
```text
|
| 84 |
+
In a distant future, humanity discovered to change, as well as the "coneurship and a continuance of the body.
|
| 85 |
+
This is not a matter of the general sense, but a lot of things we call us to the body. If we feel the body is the body’s internal structure, we’re going to change the way. The body is the body’s potential structure, meaning that it is used for a body to balance and develop a sensory to control each other.
|
| 86 |
+
What is the
|
| 87 |
+
```
|
| 88 |
+
|
| 89 |
+
### Code
|
| 90 |
+
|
| 91 |
+
Prompt: `def fibonacci(n):`
|
| 92 |
+
|
| 93 |
+
```text
|
| 94 |
+
def fibonacci(n):)) = (n - 1) + (n - 1) + ( n - 1) + ( n - 2) + ( n - 1) + ( n - 1) + ( n - 1) + ( n - 1) + ( n - 1) + ( n - 1) + ( n - 1) + ( n - 1) + ( n - 1) + ( n - 1) + ( n - 1) + ( n - 1) + ( n
|
| 95 |
+
```
|
| 96 |
+
|
| 97 |
+
## Limitations
|
| 98 |
+
|
| 99 |
+
r001 is an unaligned English base model with limited knowledge, reasoning, long-form coherence, and code quality. It may hallucinate or produce unsafe, biased, toxic, or training-like content. It is not intended for high-risk or production use. Dataset sources have different upstream terms; see the dataset card and [`../LICENSE.md`](../LICENSE.md).
|
training-history/r002.md
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# r002 — Pollock 1.0 training record
|
| 2 |
+
|
| 3 |
+
## Identity and provenance
|
| 4 |
+
|
| 5 |
+
| Field | Value |
|
| 6 |
+
|---|---|
|
| 7 |
+
| Revision / release | `r002` / Pollock 1.0 |
|
| 8 |
+
| Model ID | `SlayerLab/pollock-mini-lm-125m` |
|
| 9 |
+
| Source checkpoint | `runs/minimal-en-125m-4ep/ckpt.pt` |
|
| 10 |
+
| Checkpoint iteration / SHA-256 | 22,004 / `026f54a390036b35792aa8fb131c8b0d394efb6d933753fb0e1257e55a67374b` |
|
| 11 |
+
| nanoGPT commit | `3adf61e` |
|
| 12 |
+
| W&B run | [`hlbpqpoe`](https://wandb.ai/dawidmajewski-ezotic/minimal-en/runs/hlbpqpoe) |
|
| 13 |
+
|
| 14 |
+
Iteration 22,004 is one greater than configured `max_iters=22003` because of nanoGPT's inclusive loop/checkpoint behavior.
|
| 15 |
+
|
| 16 |
+
## Architecture and parameter accounting
|
| 17 |
+
|
| 18 |
+
| Setting | Value |
|
| 19 |
+
|---|---:|
|
| 20 |
+
| Type | GPT-2-style decoder-only Transformer |
|
| 21 |
+
| Layers / heads / width | 12 / 14 / 896 |
|
| 22 |
+
| Head dimension / MLP width | 64 / 3,584 |
|
| 23 |
+
| Context / vocabulary | 1,024 / 12,288 |
|
| 24 |
+
| Activation / dropout / bias | GELU / 0.0 / false |
|
| 25 |
+
| Position representation | learned absolute embeddings |
|
| 26 |
+
| Input/output token weights | tied |
|
| 27 |
+
| Transformer excluding embeddings | 115,627,904 |
|
| 28 |
+
| Tied token embedding/output matrix | 11,010,048 |
|
| 29 |
+
| nanoGPT reported count | 126,637,952 |
|
| 30 |
+
| Learned position embedding | 917,504 |
|
| 31 |
+
| Native unique trainable total | 127,555,456 |
|
| 32 |
+
| Transformers serialized total | 127,674,624 |
|
| 33 |
+
| Zero-valued compatibility bias parameters | 119,168 |
|
| 34 |
+
|
| 35 |
+
Conversion to `GPT2LMHeadModel` produced a maximum absolute logit difference of 0 on a deterministic 2×64-token probe.
|
| 36 |
+
|
| 37 |
+
## Tokenizer and dataset
|
| 38 |
+
|
| 39 |
+
The custom tokenizer is byte-level BPE with GPT-2-style pretokenization, 12,288 vocabulary entries, and 12,029 merges. `<|endoftext|>` (12285) is EOD/BOS/EOS/padding; `<|im_start|>` (12286) and `<|im_end|>` (12287) are additional special tokens. No chat template is defined. Tokenizer SHA-256: `6cda4e5ec8293f3b821e02253f9c0e88e43ad4f7c6e1324763e1fb91749fef51`.
|
| 40 |
+
|
| 41 |
+
Training used [Minimal EN Corpus 2.5B](https://huggingface.co/datasets/SlayerLab/minimal-en-corpus-2.5b), a subjectively selected mixture of 15 English sources with exact and approximate deduplication, language filtering, and benchmark decontamination.
|
| 42 |
+
|
| 43 |
+
| Split | Documents | BPE tokens | Binary SHA-256 |
|
| 44 |
+
|---|---:|---:|---|
|
| 45 |
+
| Train | 2,044,652 | 2,703,768,815 | `5396834c25664080c14793a4880f86b86ae94074a6036f8f54a58686b02d30dc` |
|
| 46 |
+
| Validation | 4,469 | 5,267,742 | `bf07bd1fb1f956a92ee7788f2a8110e1837f5b880ce432f6cd2a22d05f8ac135` |
|
| 47 |
+
|
| 48 |
+
## Complete training configuration
|
| 49 |
+
|
| 50 |
+
| Setting | Value |
|
| 51 |
+
|---|---:|
|
| 52 |
+
| Initialization | scratch |
|
| 53 |
+
| Final checkpoint iteration | 22,004 |
|
| 54 |
+
| Sequence / micro-batch per GPU | 1,024 / 12 |
|
| 55 |
+
| Global / per-GPU accumulation | 40 / 20 micro-steps |
|
| 56 |
+
| DDP world size / effective batch | 2 / 491,520 tokens |
|
| 57 |
+
| Token presentations / passes | 10,815,406,080 / approximately 4.0 |
|
| 58 |
+
| Optimizer / betas | fused AdamW / 0.9, 0.95 |
|
| 59 |
+
| Maximum / minimum LR | 3e-4 / 3e-5 |
|
| 60 |
+
| Schedule / warmup / decay | cosine / 440 / 22,003 iterations |
|
| 61 |
+
| Weight decay / grad clip | 0.1 / 1.0 |
|
| 62 |
+
| Evaluation interval / batches | 1,000 / 100 per split |
|
| 63 |
+
| Precision / compilation / backend | BF16 / `torch.compile` / NCCL |
|
| 64 |
+
| Seed | 1337 plus DDP-rank offset |
|
| 65 |
+
| Hardware | 2× NVIDIA GeForce RTX 4090 24 GB |
|
| 66 |
+
| PyTorch / runtime | 2.8.0+cu128 / approximately 12 h 41 min |
|
| 67 |
+
|
| 68 |
+
## Training-time validation
|
| 69 |
+
|
| 70 |
+
Loss estimates used 100 randomly sampled batches and are not a deterministic full-validation pass.
|
| 71 |
+
|
| 72 |
+
| Step | Train loss | Validation loss |
|
| 73 |
+
|---:|---:|---:|
|
| 74 |
+
| 0 | 9.5797 | 9.5732 |
|
| 75 |
+
| 1,000 | 3.4769 | 3.5219 |
|
| 76 |
+
| 2,000 | 3.0943 | 3.1266 |
|
| 77 |
+
| 5,000 | 2.8030 | 2.8569 |
|
| 78 |
+
| 10,000 | 2.6098 | 2.6928 |
|
| 79 |
+
| 15,000 | 2.5469 | 2.6056 |
|
| 80 |
+
| 18,000 | 2.5104 | 2.5790 |
|
| 81 |
+
| 19,000 | 2.4960 | 2.5795 |
|
| 82 |
+
| 20,000 | 2.4705 | **2.5600** |
|
| 83 |
+
| 21,000 | 2.4877 | 2.5653 |
|
| 84 |
+
| 22,000 | **2.4545** | 2.5775 |
|
| 85 |
+
|
| 86 |
+
The released weights are the final checkpoint. The increase after step 20,000 is within a noisy sampled protocol and is not definitive evidence of overfitting.
|
| 87 |
+
|
| 88 |
+
## English zero-shot benchmarks
|
| 89 |
+
|
| 90 |
+
All tasks used complete splits with `lm-evaluation-harness` 0.4.12, zero few-shot examples, batch size 8, BF16, 1,024 maximum context, and no sample limit. Random/NumPy/PyTorch/few-shot seeds were 0/1234/1234/1234. No requests were truncated.
|
| 91 |
+
|
| 92 |
+
| Benchmark | Primary | Additional | Samples |
|
| 93 |
+
|---|---:|---:|---:|
|
| 94 |
+
| BLiMP | acc 0.7669701493 | — | 67,000 |
|
| 95 |
+
| LAMBADA OpenAI | acc 0.2780904328 | perplexity 53.6675225106 | 5,153 |
|
| 96 |
+
| HellaSwag | acc_norm 0.2987452699 | acc 0.2818163712 | 10,042 |
|
| 97 |
+
| PIQA | acc_norm 0.6033732318 | acc 0.6137105550 | 1,838 |
|
| 98 |
+
| SciQ | acc_norm 0.6580000000 | acc 0.7370000000 | 1,000 |
|
| 99 |
+
| ARC-Easy | acc_norm 0.4229797980 | acc 0.4659090909 | 2,376 |
|
| 100 |
+
| ARC-Challenge | acc_norm 0.2414675768 | acc 0.2081911263 | 1,172 |
|
| 101 |
+
|
| 102 |
+
Raw logs: [`../logs/training.log`](../logs/training.log) and [`../logs/benchmark-english.log`](../logs/benchmark-english.log). Structured results: [`../benchmarks/english.json`](../benchmarks/english.json). Release metadata: [`../release_manifest.json`](../release_manifest.json).
|
| 103 |
+
|
| 104 |
+
## Licensing and limitations
|
| 105 |
+
|
| 106 |
+
This is an English, unaligned base model, not an instruction-following assistant. It may hallucinate, generate harmful or biased content, and reproduce training patterns. It is unsuitable for high-risk or production decisions without independent safeguards. The dataset combines sources with different terms; see [`../LICENSE.md`](../LICENSE.md) and the dataset card.
|