Hi — I’m Jasmin. This is my fine-tuned nanochat (not just the base model)

I’m still learning a lot of this myself, so I’m going to explain what I actually did in normal words. If you’re a beginner too, hopefully this helps.


What I built (the short version)

I used nanochat — Andrej Karpathy’s small, readable stack for training little language models end to end.

There are two big phases people talk about:

  1. Base training — the model learns language from lots of text (like fancy autocomplete). It is not really a “chat buddy” yet.
  2. SFT (supervised fine-tuning) — you train it on conversations and instructions so it can answer in a chat style. That’s the part that makes the web UI feel like a tiny ChatGPT.

What you’re looking at on this Hub is the SFT step — my chat-tuned weights at step 483 (model_000483.pt), plus the small metadata file and tokenizer so you can run the same thing I run.

I did train / use a base model first (that’s where SFT starts from). I don’t upload the huge base checkpoint here because it’s another multi‑GB file, but I do include a couple of small files under artifacts/ so you can see which base step I came from (step 5568) and a tiny eval export — so it’s not “I only downloaded something”; it’s I went base → then SFT.


What I did on Nebius (in plain terms)

Nebius is a cloud provider where you can rent a GPU virtual machine — basically a powerful computer in someone else’s datacenter that you SSH into. Training SFT on my Mac alone would have been slow or not realistic, so I used a VM with serious GPUs (I followed 8× H100 in my notes; you can use fewer if you need to).

Roughly, my flow was:

  1. Make a VM on Nebius (Ubuntu, enough disk), note the public IP, SSH in with ssh root@YOUR_IP.
  2. From my Mac, copy the things the VM needs: my base checkpoint (~4 GB), tokenizer files, SFT data (like identity_conversations.jsonl), and the nanochat code (or clone it on the VM).
  3. On the VM, install Python tooling (uv, uv sync --extra gpu), turn on the venv, and run SFT with nanochat’s script — for 8 GPUs something like torchrun ... -m scripts.chat_sft with a sensible --device-batch-size.
  4. Wait while it trains (on 8 GPUs often on the order of 1–2 hours for a run like mine; 1 GPU takes much longer).
  5. Before deleting the VM — copy the new chatsft_checkpoints folder back to my Mac with scp. (More on that below — I learned this the hard way.)

The step-by-step version with exact commands lives in my repo as NEBIUS_SFT_GUIDE.md:
github.com/devchicajas/nanochat
Upstream nanochat: github.com/karpathy/nanochat


A mistake I made (so you don’t repeat it) — and the “proof”

The first time around, I was so focused on “did training finish?” that I deleted the Nebius machine before I had copied the SFT weights home. The checkpoints lived only on that VM’s disk. When the instance went away, that longer / better run didn’t come with me.

You can’t take a screenshot of “the mistake” itself — there’s no cute PNG of a disk that no longer exists. The proof it happened is just: I’m telling you, and the fact that the better run never showed up on my Mac or on this Hub. (If you’ve done cloud GPUs before, you’ve probably felt that stomach-drop moment too.)

What I do now: I treat “copy weights to my laptop” (or upload them) as part of the job, same as training — before I tear down the cloud box. I ls on the VM, rsync or scp, then ls on my Mac until I’m sure the big .pt files actually landed.

The messy screenshot below is real: my browser talking to nanochat on the cloud IP, the Nebius / SSH terminal on my Mac (rsync pulling nanochat + checkpoints — you can see things like base_checkpoints, identity_conversations.jsonl, etc.), and the server logs on the VM (Uvicorn, POST /chat/completions, GPU). I’m including it because it’s honest portfolio energy — yes, I messed up the shutdown once; yes, this is actually my stack, and yes, afterward I got serious about copying everything off the box first.

After I learned the hard way: rsync from my Nebius VM to my Mac, plus cloud chat UI and server logs

The model_000483.pt you can download here is the SFT checkpoint I actually saved and still run — the one that made it into my local nanochat-data folder and onto this Hub.


The screenshots — proof it runs on my machine

The pictures in huggingface_card/ are real screenshots from my browser while I ran nanochat’s local web UI (localhost — on my Mac after I brought the weights home). They’re not mockups.

So: yes, it works locally — you can load the model, open the page, and talk to it.

The answers in those chats are wrong sometimes (trees, matcha, a made-up “favorite anime”). That’s normal for a small model: it can sound confident and still hallucinate. I kept those screenshots on purpose so you see honest output, not a cherry-picked demo that pretends tiny models are always right.


What’s in this Hub (files)

What Why it matters
model_000483.pt The SFT model weights (~4 GB).
meta_000483.json Training step, validation score, architecture settings.
tokenizer/tokenizer.pkl & token_bytes.pt You need these to run the model; I included them so you’re not hunting for mismatched files.
artifacts/base_meta_005568.json A peek at the base run I started SFT from (step 5568).
artifacts/base_eval_005568.csv A small base eval export from my setup.
huggingface_card/*.png Local UI screenshots + one Nebius / rsync collage tied to the “deleted VM too early” story (see above).

Heads-up: This is nanochat’s format (PyTorch checkpoints), not Hugging Face transformers / AutoModel. You run it with the nanochat code, not from_pretrained in the usual HF sense.


Try it yourself (beginner path)

1. Folder layout — nanochat looks for a root folder via NANOCHAT_BASE_DIR. I use something like ~/nanochat-data with this shape:

~/nanochat-data/
  chatsft_checkpoints/d24/model_000483.pt
  chatsft_checkpoints/d24/meta_000483.json
  tokenizer/tokenizer.pkl
  tokenizer/token_bytes.pt

2. Download from this Hub

pip install -U "huggingface_hub"
huggingface-cli download chicajas/nanochat-sft-d24-483 --local-dir ./hf-nanochat-sft-d24-483
mkdir -p "$HOME/nanochat-data/chatsft_checkpoints/d24" "$HOME/nanochat-data/tokenizer"
cp ./hf-nanochat-sft-d24-483/model_000483.pt ./hf-nanochat-sft-d24-483/meta_000483.json \
   "$HOME/nanochat-data/chatsft_checkpoints/d24/"
cp ./hf-nanochat-sft-d24-483/tokenizer/tokenizer.pkl ./hf-nanochat-sft-d24-483/tokenizer/token_bytes.pt \
   "$HOME/nanochat-data/tokenizer/"
export NANOCHAT_BASE_DIR="$HOME/nanochat-data"

3. Clone my fork, install, run the chat web app

git clone https://github.com/devchicajas/nanochat.git
cd nanochat
uv sync    # or: pip install -e .
source .venv/bin/activate
export NANOCHAT_BASE_DIR="$HOME/nanochat-data"
python -m scripts.chat_web --source sft --step 483 --temperature 0.2 --port 8001

Open http://localhost:8001 — you should see the same kind of UI as in my screenshots (your URL might be 8001 or another port if you change it).


Quick troubleshooting

Problem What I’d check
Can’t find checkpoints NANOCHAT_BASE_DIR and that chatsft_checkpoints/d24/ has both .pt and meta_000483.json.
Page won’t load Something else using the port — try --port 8002.
Expected HF “Load model” button This stack needs nanochat; that’s OK, just different.

Credits & license

License should match nanochat and whatever data you use. There’s an MIT note in the Hub metadata; add a LICENSE file on the repo if you want it super explicit.


If you’re me updating this Hub later

brew install hf    # or pip install -U "huggingface_hub"
hf auth login
cd /path/to/your-staging-folder
hf upload chicajas/nanochat-sft-d24-483 .

Big files: use hf upload-large-folder --help or the website uploader if Wi‑Fi is fussy.


Screenshots (local nanochat UI)

Running nanochat locally — chat about trees / color / anime

Running nanochat locally — chat about matcha

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support