Is this you? As a journalist, you can create a free Muck Rack account to customize your profile, list your contact preferences, and upload a portfolio of your best work.
Claim your profile
Articles by Arsen Apostolov
Patzer just got single sign-on — one login for your whole family
Last week Patzer got single sign-on. If your family already runs Authentik, Keycloak, Authelia or Pocket ID, everyone in the house now logs into the chess server with the same identity they use everywhere else — no more one extra username and password to remember, and no more "I forgot my password" at the dinner table. How it works Set OIDC_ISSUER, OIDC_CLIENT_ID and OIDC_CLIENT_SECRET and the login page gets a "Sign in with …" button (you choose the label with OIDC_BUTTON_TEXT).
Patzer v7.19: the tactic trainer that shows your move and explains why the better one wins
Last week I wrote about Patzer — a self-hosted Chess.com alternative that runs in one Docker container (the original post). Since then, the feature I've been most proud of shipped: a tactic trainer that explains your own mistakes. The gap in puzzle trainers The classic puzzle trainer — Lichess puzzles, Chess.com tactics — gives you a position and asks for the best move. Miss it, and you see the solution. But you never see why yours was wrong: why the engine's move wins and your move loses.
Your homelab, legible to AI agents — a read-only MCP server that rides along with your monitor
i keep a monitoring container on my homelab — it reads nvidia-smi, the docker api, systemd and /proc, and turns it into one page. the boring kind of dashboard: what's using the gpu, what it costs, what's filling the disk. last month i started running agents on the box, and i hit a wall that i think most people will hit: the agent couldn't see my homelab. it could run commands, but it couldn't see — which model is holding the 3090, why the temperature is climbing, what the month cost in energy.
My GPU Was Busy. I Finally Found Out Who Was Using It.
The Local LLM Lab — Part 10 One controlled experiment. One number. One verdict. Every homelab has a moment like this: the GPU is at 100%, the fan is screaming, and you have no idea which of the twenty services on the box is doing it. You open nvidia-smi, it shows one process, you close it, and the mystery continues. The problem is that nvidia-smi answers "which process is using the GPU" — and in a Docker stack, the process is the container runtime, not the service.
I Put Three AI Services on One 24 GB GPU. It Used 17.8. Here's What Fits.
The Local LLM Lab — Part 9 One controlled experiment. One number. One verdict. The "how much VRAM do I need" advice on the internet comes in one flavour: a spec sheet. "27B in FP8 needs 28 GB. 70B in Q4 needs 42 GB. Buy a 48 GB card." That's the answer for one model. Nobody tells you what happens when you try to run your actual stack — a transcription service, an embedding model, a small chat model — on one card. The answers you find are guesses, because nobody has measured a multi-tenant GPU. I have.
Qwen3.8-27B on One RTX 3090 vs Two: +20% Decode, +14% Cold Prefill, and 3x on Cached Prompts
TL;DR: Qwen3.8-27B — the dense 27.8B that dropped on August 14 — fits on a single RTX 3090 at W4A16 and decodes at ~125–155 tokens/sec. Splitting it across two cards with tensor parallelism buys roughly 20% more decode (noisy: +13% in one run, +22% in the next) and 14% faster prefill on average on a cold prompt (23% at the top of the ladder: an 8,600-token prompt takes 8.5 s to first token on one card and 6.9 s on two).
What Does a Local LLM Actually Cost per Month? I Read the Meters.
The Local LLM Lab — Part 5 One controlled experiment. One number. One verdict. The question nobody answers in the local-LLM hype is the boring one: what does the electricity bill say? Not "how many tokens per second." Not "how many GB of VRAM." The bill. The one that arrives on the first of the month and is the only number that actually matters for the person paying for the machine.
Same Model, 13.3% to 38.3%
Two API settings. Same model. Same benchmark. Same task set. 13.3% to 38.3%, using one sixth the output tokens. OpenAI published that result about GPT-5.6 Sol on ARC-AGI-3, and it is the cleanest natural experiment the field has produced on a question I have been arguing from first principles for a year. Nothing about the model changed. Everything that changed was around it.
Why I’m Adding a Cheap Chinese Model to an Already Crowded AI Stack
I did another deep research pass: should I add a low-cost Chinese model on top of all the LLM subscriptions I already pay for? Three independent research rails gave me the same first choice: DeepSeek V4-Pro. The interesting part was not the benchmark table. It was the reason. Different models fail differently Another model is useful only if it makes different mistakes. A model trained in a different ecosystem develops different blind spots, behavioural patterns, and failure modes.
Can a Local LLM Run My AI Assistant?
TL;DR — I replayed 27 real tasks from my own AI agent against two local models, one hardware upgrade apart, scoring both against the same frozen Claude baseline. On a single RTX 3090 capped at a 16K context, a 30B model scored 22.8/100 to Claude’s 89.4, and leaked malformed tool-call syntax into a quarter of its answers — broken, not merely worse.
How Much Does It Actually Cost to Run a Local LLM? (Euros per Million Tokens, Measured)
, so it’s basically free.” I’ve said that, you’ve probably said that, and it’s the kind of claim that sounds true until someone measures it. So I measured it. The box is “ardi” — one openSUSE machine with a single RTX 3090 (24 GB). On it I ran a controlled benchmark: three local models served by ollama, each driven under an identical fixed workload, while a dashboard priced every run by the real GPU energy it burned.
Does a Second GPU Increase Ollama's Context Window? (Quadro P2000 + RTX 3090 Tested)
TL;DR Short version: no. I dropped a much older GPU (Quadro P2000, 5GB, Pascal, 2016) next to an RTX 3090 (24GB, Ampere) on the same box, ran the same context-length ladder (8K→128K) through Ollama and vLLM on qwen3-coder:30B-A3B, and got zero extra usable context in either engine — and a 74% decode-speed hit for the trouble. Ollama hits the identical Chunk too big wall at ctx=65536 whether the P2000 is there or not.
vLLM vs llama.cpp vs Ollama: What Happens When Your Model Doesn't Fit in 24GB VRAM
TL;DR Benchmarked llama.cpp, Ollama, and vLLM across 5 models (1B to 116.8B params) on one RTX 3090 (24GB) + 128GB RAM home-lab box, priced through HomeLab Monitor. Inside 24GB, vLLM's continuous batching scales aggregate throughput 3.9x-5.4x from concurrency 1 to 8 (llama.cpp only manages 1.2x-1.9x, even with -np 8 explicitly set to match). Past 24GB — two models deliberately chosen to force RAM-spill — llama.cpp and Ollama both degrade to single-digit tok/s and keep generating.
Local LLM vs Claude: Benchmarking qwen3-coder:30b as a Production Agent Backend
TL;DR Replayed 27 real historical tasks from Jarvis (my LangGraph agent, ~90 tools) through qwen3-coder:30b on an RTX 3090, scored against Claude's actual production answers to the same tasks. Quality: Claude 89.4/100 vs qwen 22.8/100. Cost: qwen ~5,150x cheaper per task ($0.00015 vs $0.763, real GPU electricity vs real API billing). Reliability: qwen leaked malformed tool-call tags into 26% of answers and only overlapped with the tools the task actually needed 14.8% of the time.
How to Run Reliable Local LLM Agents on an RTX 3090: A Benchmark (5 Models, Priced in Watts)
I gave GLM-4.5-Air (106B, open weights) 12 coding tasks through opencode on my RTX 3090. It scored 0% — never edited a single file. Same model, same GPU, same tasks, but driven by a ~150-line LangGraph agent instead: 93%. The model was never the problem. The orchestrator was. Here's the benchmark — including the part nobody else measures, the electricity cost per correct task.
How to Rank Local LLMs by Cost per Correct Answer (Measured GPU Energy, 8 Ollama Models)
TL;DR: I priced 8 local Ollama models by € per 1,000 correct answers — metered GPU energy ÷ correct answers, on one RTX 3090. gemma4:26b won at 96.9% accuracy for €0.013/1k-correct. The most expensive model (qwen3:8b-fp16) cost €0.239/1k and scored worse (66.7%). Reasoning tokens and full precision both cost a lot and bought nothing here. Every cost comes from real metered kWh via the open-source HomeLab Monitor. This is the short, copy-pasteable version. The narrative writeup is on Medium.
How Much Does It Actually Cost to Run a Local LLM? (€ per Million Tokens, Measured)
"It runs on my own GPU, so it's basically free." I believed that until I put a meter on it.
Fitting WhisperX large-v3 + a 24B LLM on one 3090: a reproducible context-capping recipe
This is the technical, reproducible version of a fix I shipped on my own homelab. If you want the narrative version, that's on Medium. This one is the recipe: the measurements, the math, the Modelfile, and the exact prompt I gave Claude Code to generate it. Copy-paste friendly.
I got tired of guessing which model holds my VRAM, so I built a tiny dashboard
Quick story. I run a small homelab — one box, an NVIDIA card, around ten Docker containers, and a couple of local model servers (Ollama mostly, vLLM when I'm playing around). Every "why is this model OOM-ing" turned into the same five minutes of archaeology: nvidia-smi → pick a PID ps -o cgroup -p → find the container ID docker ps → map ID to name Just to answer: which container, which model, is eating my VRAM right now? I tried Prometheus + Grafana + node-exporter + dcgm-exporter.
Building a Game for My Daughter with AI — Part 1: What If She Could Build It Too?
She called it "a dragon but also a dog." Purple. Six legs. Completely confident about it. I watched her finish it, cap the marker, and move on to the next page without a second thought. The way only an 8-year-old can — zero self-doubt, infinite next ideas. And I thought: what if that drawing could actually come to life? Not metaphorically. Literally. What if she drew something, handed it to an AI, and got back — a creature. With a name. A personality. A little world of its own.
Stop Copy-Pasting Your Code to LLMs - I Built a Tool That Does It Automatically
#llm #productivity #tooling #discuss Find the full guide in my Medium article We're a place where coders share, stay up-to-date and grow their careers.
Testing Aider: Practical Experience with Different Models
I like coding agents and all kind of supportive plug-ins to make my day easier. From Continue to Copilot. I must say that the most complete solution so far for me was Cursor, yet it is not free (see the plans). So i found this super cool alternative - Aider chat. I tested Aider with multiple AI backends: OpenAI, Claude, and local Ollama server. First 30 minutes were spent learning the tool - understanding commands and workflow. After this initial setup phase, development speed increased significantly.
I’m sharing my LLM Code Lens Python package: My Secret Weapon for AI-Powered Coding
Hey everyone, I want to share my tool that has completely transformed how I work with AI assistants. If you're tired of writing endless, complex prompts and struggling to get precise code insights, this is for you. The Problem Working with large language models like ChatGPT, Claude, or Mistral always felt like a communication battle. How do you explain an entire project's context in a single prompt?
Show More
loading
Actions
Is this you?
As a journalist, you can create a free Muck Rack account to customize your profile, list your contact preferences, and upload a portfolio of your best work.Get in touch with Arsen
Contact Arsen, search articles and posts on X, monitor coverage, and track replies from one place.
Learn more about Muck Rack