Fine-tuning a 270M model on my rocm with unsloth libs
I ran a full LoRA fine-tune of Gemma 3 270M on my AMD Strix Halo iGPU. It froze the whole machine twice before three lines of config fixed it — here's the run, the fix, and what it taught a backend dev about how LLMs actually work.
22 Aug 2026
·
8 min read
LLMs, the whole thing
·
Part 6
Self-attention, from scratch: a context vector is a weighted average
The first attention mechanism in Raschka's LLM book, explained the way it finally clicked for me, a Java dev who bounces off dense maths: self-attention is just three operations, a dot product, a softmax, and a weighted average.
18 Aug 2026
·
9 min read
LLMs, the whole thing
·
Part 3
From Tokens to Token IDs
An LLM never sees your text — it sees integers. Building a tokenizer from a regex and a dictionary, hitting the out-of-vocabulary wall, and why GPT’s byte-pair encoding is the fix that needs no unknown token.
14 Aug 2026
·
8 min read
Working with Claude Code
Embeddings, 384 Dimensions, Three at a Time
I built a local instrument to look at embedding space, and most of what I assumed turned out to be wrong: nothing is orthogonal, no individual dimension means anything, and king minus man plus woman does not give you queen.
13 Aug 2026
·
10 min read
LLMs, the whole thing
·
Part 1
Large Language Models, From the Ground Up - Part I: The Geometry of Meaning
The opening part of a series building LLMs from first principles. We start where every model starts: turning language into vectors and meaning into geometry, with a runnable script and its real numbers.
12 Aug 2026
·
9 min read
LLMs, the whole thing
·
Part 2
The Transformer Architecture: Encoder versus Decoder
Every modern LLM is a transformer, yet BERT, GPT and T5 behave very differently. The first article in a ground-up series on LLMs: the single distinction — the attention mask — that separates an encoder from a decoder.
12 Aug 2026
·
7 min read
Building agents on the JVM with Embabel
·
Part 3
Give the Agent Hands: Tools in Embabel
An LLM cannot know a live account balance, and in banking a confidently hallucinated number is a disaster. The fix is a tool. Here's how @LlmTool works in Embabel on the JVM, plus the one API gotcha that cost me a compile.
25 Jul 2026
·
5 min read
Shipping an AI feature into my own product
·
Part 3
Adding a job description match to my AI Concierge
I added job-description matching to the AI concierge on my career site. It shipped with no new bean, no new table, and no migration — because the leverage was in a seam I'd already built. A design note on shared streaming cores, streamable structured output, and treating a pasted JD as hostile.
13 Jul 2026
·
11 min read
Shipping an AI feature into my own product
·
Part 2
I red-teamed my own AI concierge
My site has an 'Ask Zakaria' AI box that answers untrusted recruiter input. So I spent an afternoon trying to break it — prompt leaks, tool-call injection, XSS, a cross-language jailbreak. Here's what held, and why the real defense isn't a clever prompt.
7 Jul 2026
·
5 min read