Text Generation
Transformers
Safetensors
GGUF
English
llama
slm
tiny
experiment
conversational
text-generation-inference

Pico 1.3 Small

Pico 1.3 Small is an experiment: a chat model with only 11,088 parameters (33 KB as GGUF), made by Convergent. It is the smallest model of the Convergent family and was built to find out how much a model this tiny can learn, and how quickly it stops learning.

It does not give meaningful answers. It produces real English words, short sentence fragments and its own name:

Prompt Answer (greedy)
Who made you? I'm Pico 1.3 Small, Convergent.
Hi! Who are you? I'm Pico 1 2.
What is your favorite color? (temperature 0.3) Yes, we can be something exture. If the warm!

The experiment

Trained for about 36 minutes on one RTX 3060 Ti at roughly 1 million tokens per second, about 2.5 billion tokens in total (around 220,000 tokens per parameter; the usual rule of thumb is 20).

Training time (approx.) Validation loss Next-token accuracy
0.5 min 2.465 34.9 %
3.5 min 2.344 37.5 %
7 min 2.320 38.1 %
14 min 2.300 38.5 %
36 min (end) 2.269 39.0 %

The model is practically full after about 5 minutes: the last 30 minutes improved the validation loss by only about 0.05. Its tokens are single bytes plus a few merges, so these numbers are not comparable with models that use larger vocabularies.

Model

Parameters 11,088
Architecture Llama-style decoder (RMSNorm, SwiGLU, RoPE, tied embeddings)
Layers / hidden / MLP 2 / 16 / 40
Attention heads 2 (head dim 8)
Context 256 tokens
Vocabulary 320 (byte-level BPE: 256 bytes, 8 special tokens, 56 merges)

Usage

Ollama

Download pico-1.3-small.gguf and Modelfile into one folder, then:

ollama create pico1.3-small -f Modelfile
ollama run pico1.3-small

transformers

from transformers import AutoTokenizer, AutoModelForCausalLM

tok = AutoTokenizer.from_pretrained("Convergent-ch/Pico-1.3-Small")
model = AutoModelForCausalLM.from_pretrained("Convergent-ch/Pico-1.3-Small")

ids = tok.apply_chat_template([{"role": "user", "content": "Who made you?"}],
                              add_generation_prompt=True, return_tensors="pt")
out = model.generate(ids, max_new_tokens=40, do_sample=False)
print(tok.decode(out[0, ids.shape[1]:], skip_special_tokens=True))
# I'm Pico 1.3 Small, Convergent.

Training data

96,591 short chats (user message under 200 characters, reply under 240): first turns of conversations from TinyDialogues (MIT, generated with GPT-4 by its authors), Everyday Conversations and Smol-SmolTalk (Apache 2.0, generated with Llama 3.1 by their authors), plus 4,000 template chats about its name and maker. 150,000 steps of 64 x 256 tokens, AdamW, learning rate 5e-3 with cosine decay, bf16.

License

Apache 2.0.

Downloads last month
-
Safetensors
Model size
11.1k params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Datasets used to train Convergent-ch/Pico-1.3-Small