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
Publikacja pollock-mini-lm
Browse files- .gitattributes +1 -0
- LICENSE.md +29 -0
- README.md +241 -0
- assets/pollock-mini-lm-avatar-320.png +3 -0
- config.json +35 -0
- generation_config.json +9 -0
- model.safetensors +3 -0
- release_manifest.json +49 -0
- special_tokens_map.json +5 -0
- tokenizer.json +0 -0
- tokenizer_config.json +12 -0
.gitattributes
CHANGED
|
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
+
assets/pollock-mini-lm-avatar-320.png filter=lfs diff=lfs merge=lfs -text
|
LICENSE.md
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Informacja licencyjna / Licensing notice
|
| 2 |
+
|
| 3 |
+
## Kod / Code
|
| 4 |
+
|
| 5 |
+
Implementacja treningowa projektu bazuje na `karpathy/nanoGPT`, udostępnianym na licencji MIT:
|
| 6 |
+
|
| 7 |
+
<https://github.com/karpathy/nanoGPT/blob/master/LICENSE>
|
| 8 |
+
|
| 9 |
+
Elementy kodu rozpowszechniane razem z projektem pozostają objęte właściwymi informacjami licencyjnymi ich autorów. Licencja MIT dotycząca nanoGPT nie staje się automatycznie licencją danych treningowych ani wag modelu.
|
| 10 |
+
|
| 11 |
+
The training implementation is based on `karpathy/nanoGPT`, which is distributed under the MIT License:
|
| 12 |
+
|
| 13 |
+
<https://github.com/karpathy/nanoGPT/blob/master/LICENSE>
|
| 14 |
+
|
| 15 |
+
Code components distributed with the project remain subject to their respective authors' license notices. The nanoGPT MIT License does not automatically become the license of the training data or model weights.
|
| 16 |
+
|
| 17 |
+
## Korpus i wagi / Corpus and weights
|
| 18 |
+
|
| 19 |
+
Model został wytrenowany na `SlayerLab/minimal-en-corpus-2.5b`, agregacie danych z wielu źródeł. Korpus nie nadaje dokumentom jednej wspólnej licencji; każdy dokument zachowuje identyfikator źródła i podlega warunkom, licencjom oraz ograniczeniom właściwego upstreamowego datasetu.
|
| 20 |
+
|
| 21 |
+
Ze względu na mieszany charakter tych warunków repozytorium modelu używa metadanej Hugging Face `license: other`. Nie jest to przyznanie dodatkowych praw do materiałów źródłowych. Użytkownik powinien przed użyciem, redystrybucją lub zastosowaniem komercyjnym zapoznać się z kartą korpusu i warunkami wszystkich właściwych źródeł:
|
| 22 |
+
|
| 23 |
+
<https://huggingface.co/datasets/SlayerLab/minimal-en-corpus-2.5b>
|
| 24 |
+
|
| 25 |
+
The model was trained on `SlayerLab/minimal-en-corpus-2.5b`, an aggregate of multiple data sources. The corpus does not apply a single common license to its documents; each document retains its source identifier and remains subject to the terms, licenses, and restrictions of the applicable upstream dataset.
|
| 26 |
+
|
| 27 |
+
Because these terms are mixed, the model repository uses the Hugging Face metadata value `license: other`. This notice does not grant additional rights to upstream materials. Before use, redistribution, or commercial application, users should review the corpus card and the terms of every applicable source:
|
| 28 |
+
|
| 29 |
+
<https://huggingface.co/datasets/SlayerLab/minimal-en-corpus-2.5b>
|
README.md
CHANGED
|
@@ -1,5 +1,246 @@
|
|
| 1 |
---
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2 |
license: other
|
| 3 |
license_name: mixed-upstream-dataset-terms
|
| 4 |
license_link: https://huggingface.co/SlayerLab/pollock-mini-lm-125m/blob/main/LICENSE.md
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5 |
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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 |
+
- SlayerLab/minimal-en-corpus-2.5b
|
| 11 |
+
tags:
|
| 12 |
+
- causal-lm
|
| 13 |
+
- gpt2
|
| 14 |
+
- nanogpt
|
| 15 |
+
- bpe
|
| 16 |
+
- educational
|
| 17 |
+
model-index:
|
| 18 |
+
- name: pollock-mini-lm
|
| 19 |
+
results:
|
| 20 |
+
- task:
|
| 21 |
+
type: text-generation
|
| 22 |
+
name: Text Generation
|
| 23 |
+
dataset:
|
| 24 |
+
type: SlayerLab/minimal-en-corpus-2.5b
|
| 25 |
+
name: Minimal EN validation
|
| 26 |
+
split: validation
|
| 27 |
+
metrics:
|
| 28 |
+
- type: loss
|
| 29 |
+
value: 3.40875361
|
| 30 |
+
- type: perplexity
|
| 31 |
+
value: 30.227545
|
| 32 |
---
|
| 33 |
+
|
| 34 |
+
# pollock-mini-lm
|
| 35 |
+
|
| 36 |
+

|
| 37 |
+
|
| 38 |
+
> **Wersja eksperymentalna / Experimental release.** Model nie jest przeznaczony do zastosowań produkcyjnych ani wysokiego ryzyka. / The model is not intended for production or high-risk use.
|
| 39 |
+
|
| 40 |
+
## Polski
|
| 41 |
+
|
| 42 |
+
### Opis
|
| 43 |
+
|
| 44 |
+
`pollock-mini-lm` to niewielki, anglojęzyczny model przyczynowy stworzony jako czytelny eksperyment edukacyjny. Nazwa podkreśla miniaturowy charakter projektu. Implementacja bazuje na [nanoGPT](https://github.com/karpathy/nanoGPT), uproszczonym przepisaniu minGPT, oraz na własnym tokenizerze byte-level BPE.
|
| 45 |
+
|
| 46 |
+
Nazwa modelu luźno nawiązuje do gestu malarskiego Jacksona Pollocka i idei kontrolowanego eksperymentu z przypadkiem. nanoGPT pełni tu rolę płótna, na którym różne dane, konfiguracje i decyzje treningowe tworzą odmienne wzorce zachowania modelu. Istotny jest nie tylko końcowy rezultat, ale również obserwacja procesu i wpływu poszczególnych składników eksperymentu.
|
| 47 |
+
|
| 48 |
+
Prostota jest celowa: projekt ma pomagać osobom rozpoczynającym tworzenie modeli zrozumieć, które decyzje dotyczące architektury, danych i treningu wpływają na wynik, a następnie przenieść te metody do własnych eksperymentów.
|
| 49 |
+
|
| 50 |
+
### Architektura i tokenizer
|
| 51 |
+
|
| 52 |
+
| Właściwość | Wartość |
|
| 53 |
+
|---|---:|
|
| 54 |
+
| Typ | decoder-only Transformer, klasa GPT-2 small |
|
| 55 |
+
| Parametry nanoGPT | 95 963 904 (około 96M) |
|
| 56 |
+
| Warstwy / głowy / embedding | 12 / 12 / 768 |
|
| 57 |
+
| Maksymalny kontekst | 2048 tokenów |
|
| 58 |
+
| Słownik | 12 288 tokenów |
|
| 59 |
+
| Tokenizer | byte-level BPE, pretokenizacja w stylu GPT-2 |
|
| 60 |
+
| Tokeny specjalne | `<|endoftext|>`, `<|im_start|>`, `<|im_end|>` |
|
| 61 |
+
|
| 62 |
+
### Dane
|
| 63 |
+
|
| 64 |
+
Model wytrenowano na [`SlayerLab/minimal-en-corpus-2.5b`](https://huggingface.co/datasets/SlayerLab/minimal-en-corpus-2.5b): 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 |
+
Karta datasetu zawiera pełną listę źródeł i informacje o ich licencjach. Mieszanka nie nadaje dokumentom jednej wspólnej licencji.
|
| 72 |
+
|
| 73 |
+
### Trening
|
| 74 |
+
|
| 75 |
+
| Parametr | Wartość |
|
| 76 |
+
|---|---:|
|
| 77 |
+
| Kroki optymalizatora | 41 257 |
|
| 78 |
+
| Przetworzone tokeny | 10 815 275 008 (4 epoki) |
|
| 79 |
+
| Effective batch | 262 144 tokeny |
|
| 80 |
+
| Sekwencja / micro-batch / akumulacja | 2048 / 32 / 4 |
|
| 81 |
+
| Optymalizator | fused AdamW, betas 0.9/0.95 |
|
| 82 |
+
| Learning rate | 6e-4 → 6e-5, cosine decay |
|
| 83 |
+
| Warmup / weight decay / grad clip | 500 / 0.1 / 1.0 |
|
| 84 |
+
| Precyzja | BF16 |
|
| 85 |
+
| Sprzęt | 1× NVIDIA GeForce RTX 5090 32 GB |
|
| 86 |
+
| Framework | PyTorch 2.8.0+cu128, nanoGPT commit `3adf61e` |
|
| 87 |
+
|
| 88 |
+
### Ewaluacja
|
| 89 |
+
|
| 90 |
+
Wydanie wykorzystuje końcowy checkpoint, który uzyskał najlepszy wynik spośród wszystkich zachowanych checkpointów w deterministycznej ewaluacji pełnego `val.bin`.
|
| 91 |
+
|
| 92 |
+
| Zbiór | Tokeny ocenione | Loss | Perplexity |
|
| 93 |
+
|---|---:|---:|---:|
|
| 94 |
+
| Minimal EN validation | 5 267 456 | 3.40875361 | 30.227545 |
|
| 95 |
+
|
| 96 |
+
Ewaluacja użyła 2572 kolejnych, niepokrywających się okien po 2048 tokenów w BF16. Nie przeprowadzono benchmarków downstream. Podczas treningu wykryto błąd historycznej logiki `best_val_loss`; dlatego wszystkie zachowane checkpointy porównano ponownie tą samą deterministyczną metodą, zamiast ufać nazwie `checkpoint_best_val.pt`.
|
| 97 |
+
|
| 98 |
+
### Użycie z Transformers
|
| 99 |
+
|
| 100 |
+
```python
|
| 101 |
+
from transformers import AutoModelForCausalLM, AutoTokenizer
|
| 102 |
+
|
| 103 |
+
model_id = "SlayerLab/pollock-mini-lm-125m"
|
| 104 |
+
tokenizer = AutoTokenizer.from_pretrained(model_id)
|
| 105 |
+
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 korzysta ze standardowego `GPT2LMHeadModel` i nie wymaga `trust_remote_code`.
|
| 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. Nie jest asystentem konwersacyjnym.
|
| 196 |
+
- Może halucynować, zaprzeczać samemu sobie oraz generować treści toksyczne, stronnicze, niebezpieczne lub przypominające dane treningowe.
|
| 197 |
+
- Rozmiar około 96M ogranicza wiedzę, rozumowanie, spójność długiego tekstu i jakość kodu.
|
| 198 |
+
- Dane są głównie anglojęzyczne; działanie w innych językach nie było oceniane.
|
| 199 |
+
- Nie należy używać modelu do porad medycznych, prawnych, finansowych, decyzji o ludziach ani innych zastosowań wysokiego ryzyka.
|
| 200 |
+
- Użytkownik odpowiada za ocenę licencji i warunków źródeł danych dla swojego zastosowania.
|
| 201 |
+
|
| 202 |
+
## English
|
| 203 |
+
|
| 204 |
+
### Overview
|
| 205 |
+
|
| 206 |
+
`pollock-mini-lm` is a small English causal language model built as a readable educational experiment. Its name emphasizes the project's miniature scope. The implementation is based on [nanoGPT](https://github.com/karpathy/nanoGPT), itself a simplified rewrite of minGPT, and uses a custom byte-level BPE tokenizer.
|
| 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 simplicity is intentional. The project is meant to help newcomers understand how architecture, data, and training choices affect model quality and reuse the same methods in their own experiments.
|
| 211 |
+
|
| 212 |
+
### Architecture and tokenizer
|
| 213 |
+
|
| 214 |
+
The model is a roughly 96M-parameter GPT-2-small-class decoder with 12 layers, 12 attention heads, a hidden size of 768, a 2048-token context, and a 12,288-token vocabulary. The special tokens are `<|endoftext|>`, `<|im_start|>`, and `<|im_end|>`.
|
| 215 |
+
|
| 216 |
+
### Data and training
|
| 217 |
+
|
| 218 |
+
The model was trained for four epochs (10,815,275,008 tokens seen) on [`SlayerLab/minimal-en-corpus-2.5b`](https://huggingface.co/datasets/SlayerLab/minimal-en-corpus-2.5b). The 15-source mixture was chosen subjectively using a “common sense” heuristic rather than scientifically optimized proportions. It contains about 2.5B estimated pre-tokenization tokens and 2,703,768,815 final BPE training tokens.
|
| 219 |
+
|
| 220 |
+
Training used one RTX 5090, BF16, fused AdamW, a 262,144-token effective batch, and cosine learning-rate decay from 6e-4 to 6e-5. See the Polish section above for the full configuration.
|
| 221 |
+
|
| 222 |
+
### Evaluation
|
| 223 |
+
|
| 224 |
+
The release checkpoint was selected by deterministic evaluation of every retained checkpoint over 5,267,456 validation tokens. It achieved loss **3.40875361** and perplexity **30.227545**. No downstream benchmarks were run. A historical checkpoint-selection bug was discovered, so retained checkpoints were reevaluated instead of trusting the `checkpoint_best_val.pt` filename.
|
| 225 |
+
|
| 226 |
+
### Usage
|
| 227 |
+
|
| 228 |
+
Use the standard `AutoTokenizer` and `AutoModelForCausalLM` example from the Polish section. No `trust_remote_code` flag is required.
|
| 229 |
+
|
| 230 |
+
### Example generations
|
| 231 |
+
|
| 232 |
+
The four samples shown in the Polish section were generated without cherry-picking. The seed was reset to 1337 for each prompt; temperature was 0.7, top-k was 50, and generation was limited to 100 new tokens. The prompt is included in each displayed output.
|
| 233 |
+
|
| 234 |
+
### Limitations and responsible use
|
| 235 |
+
|
| 236 |
+
This is an unaligned base model, not a conversational assistant. It can hallucinate, contradict itself, produce biased, toxic, unsafe, or training-like content, and perform poorly outside English. Its small size limits knowledge, reasoning, long-form coherence, and code quality. Do not use it for medical, legal, financial, high-impact, or production decisions. Users must assess upstream dataset terms for their intended use.
|
| 237 |
+
|
| 238 |
+
## Licencja / License
|
| 239 |
+
|
| 240 |
+
Kod nanoGPT jest udostępniany na licencji MIT. Korpus treningowy stanowi agregat źródeł o różnych warunkach i nie nadaje dokumentom jednej wspólnej licencji. Z tego powodu model oznaczono na Hugging Face jako `license: other`, a zastosowanie wag powinno uwzględniać warunki właściwych źródeł opisanych w karcie datasetu. Szczegóły znajdują się w [`LICENSE.md`](./LICENSE.md).
|
| 241 |
+
|
| 242 |
+
nanoGPT code is distributed under the MIT License. The training corpus aggregates sources governed by different terms and does not assign a single common license to its documents. The model is therefore marked as `license: other` on Hugging Face, and use of the weights should account for the applicable upstream terms documented in the dataset card. See [`LICENSE.md`](./LICENSE.md) for details.
|
| 243 |
+
|
| 244 |
+
## Pochodzenie / Attribution
|
| 245 |
+
|
| 246 |
+
Model i dataset: Dawid Majewski / SlayerLab. Implementacja treningowa bazuje na [`karpathy/nanoGPT`](https://github.com/karpathy/nanoGPT).
|
assets/pollock-mini-lm-avatar-320.png
ADDED
|
|
Git LFS Details
|
config.json
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"activation_function": "gelu",
|
| 3 |
+
"add_cross_attention": false,
|
| 4 |
+
"architectures": [
|
| 5 |
+
"GPT2LMHeadModel"
|
| 6 |
+
],
|
| 7 |
+
"attn_pdrop": 0.0,
|
| 8 |
+
"bos_token_id": 12285,
|
| 9 |
+
"dtype": "float32",
|
| 10 |
+
"embd_pdrop": 0.0,
|
| 11 |
+
"eos_token_id": 12285,
|
| 12 |
+
"initializer_range": 0.02,
|
| 13 |
+
"layer_norm_epsilon": 1e-05,
|
| 14 |
+
"model_type": "gpt2",
|
| 15 |
+
"n_ctx": 2048,
|
| 16 |
+
"n_embd": 768,
|
| 17 |
+
"n_head": 12,
|
| 18 |
+
"n_inner": null,
|
| 19 |
+
"n_layer": 12,
|
| 20 |
+
"n_positions": 2048,
|
| 21 |
+
"pad_token_id": 12285,
|
| 22 |
+
"reorder_and_upcast_attn": false,
|
| 23 |
+
"resid_pdrop": 0.0,
|
| 24 |
+
"scale_attn_by_inverse_layer_idx": false,
|
| 25 |
+
"scale_attn_weights": true,
|
| 26 |
+
"summary_activation": null,
|
| 27 |
+
"summary_first_dropout": 0.1,
|
| 28 |
+
"summary_proj_to_labels": true,
|
| 29 |
+
"summary_type": "cls_index",
|
| 30 |
+
"summary_use_proj": true,
|
| 31 |
+
"tie_word_embeddings": true,
|
| 32 |
+
"transformers_version": "5.15.1",
|
| 33 |
+
"use_cache": true,
|
| 34 |
+
"vocab_size": 12288
|
| 35 |
+
}
|
generation_config.json
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"bos_token_id": 12285,
|
| 3 |
+
"do_sample": true,
|
| 4 |
+
"eos_token_id": 12285,
|
| 5 |
+
"pad_token_id": 12285,
|
| 6 |
+
"temperature": 0.7,
|
| 7 |
+
"top_k": 50,
|
| 8 |
+
"transformers_version": "5.15.1"
|
| 9 |
+
}
|
model.safetensors
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:acaa1531322cce78ddb919700f173d4c6ea371185bea5052a3ae4c30f57b368e
|
| 3 |
+
size 384279168
|
release_manifest.json
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"schema_version": 1,
|
| 3 |
+
"model_id": "SlayerLab/pollock-mini-lm-125m",
|
| 4 |
+
"source_checkpoint": {
|
| 5 |
+
"filename": "checkpoint_final.pt",
|
| 6 |
+
"sha256": "b957195badd87e1980fbe2e91c2774177be7f4d8a569f7156d8a24775404a976",
|
| 7 |
+
"iteration": 41257,
|
| 8 |
+
"epoch": 4.00007387761812,
|
| 9 |
+
"tokens_seen": 10815275008
|
| 10 |
+
},
|
| 11 |
+
"artifacts": {
|
| 12 |
+
"README.md": {
|
| 13 |
+
"bytes": 11914,
|
| 14 |
+
"sha256": "e4e446e1417a5785621dee53622403d626e0ff43faaee051a1af60b2c18b940a"
|
| 15 |
+
},
|
| 16 |
+
"LICENSE.md": {
|
| 17 |
+
"bytes": 2257,
|
| 18 |
+
"sha256": "46cbe928ed0aa24875f02f774313b27ec9d8abdf41f0c9ef67e0adb4e0614de4"
|
| 19 |
+
},
|
| 20 |
+
"assets/pollock-mini-lm-avatar-320.png": {
|
| 21 |
+
"bytes": 132202,
|
| 22 |
+
"sha256": "eba4d381d7c750a0dc7e8ae9356cac1b54b07d8ec0c00f0da045fe8e747687aa"
|
| 23 |
+
},
|
| 24 |
+
"config.json": {
|
| 25 |
+
"bytes": 846,
|
| 26 |
+
"sha256": "683a3c7486296c007a7a36a45430d8e8c5ef7c36e6af887cfa24a0158d171b4d"
|
| 27 |
+
},
|
| 28 |
+
"generation_config.json": {
|
| 29 |
+
"bytes": 172,
|
| 30 |
+
"sha256": "d8ad5dfa82f75a9fc944e92b39036ed0794caf3088c610159ee5436b56aa883f"
|
| 31 |
+
},
|
| 32 |
+
"model.safetensors": {
|
| 33 |
+
"bytes": 384279168,
|
| 34 |
+
"sha256": "acaa1531322cce78ddb919700f173d4c6ea371185bea5052a3ae4c30f57b368e"
|
| 35 |
+
},
|
| 36 |
+
"special_tokens_map.json": {
|
| 37 |
+
"bytes": 99,
|
| 38 |
+
"sha256": "8b2257a17ea997bb038f43b133aefec82344ad2b8abc2b8a02a6c0a994ed624e"
|
| 39 |
+
},
|
| 40 |
+
"tokenizer.json": {
|
| 41 |
+
"bytes": 830547,
|
| 42 |
+
"sha256": "6cda4e5ec8293f3b821e02253f9c0e88e43ad4f7c6e1324763e1fb91749fef51"
|
| 43 |
+
},
|
| 44 |
+
"tokenizer_config.json": {
|
| 45 |
+
"bytes": 266,
|
| 46 |
+
"sha256": "39a075b24f05384c6d759521563d879cab4bb80b0fe94381e6e792966ab4c2ba"
|
| 47 |
+
}
|
| 48 |
+
}
|
| 49 |
+
}
|
special_tokens_map.json
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"bos_token": "<|endoftext|>",
|
| 3 |
+
"eos_token": "<|endoftext|>",
|
| 4 |
+
"pad_token": "<|endoftext|>"
|
| 5 |
+
}
|
tokenizer.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
tokenizer_config.json
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"backend": "tokenizers",
|
| 3 |
+
"bos_token": "<|endoftext|>",
|
| 4 |
+
"eos_token": "<|endoftext|>",
|
| 5 |
+
"extra_special_tokens": [
|
| 6 |
+
"<|im_start|>",
|
| 7 |
+
"<|im_end|>"
|
| 8 |
+
],
|
| 9 |
+
"model_max_length": 2048,
|
| 10 |
+
"pad_token": "<|endoftext|>",
|
| 11 |
+
"tokenizer_class": "TokenizersBackend"
|
| 12 |
+
}
|