Skip to slide 1
01 / 17
VCN #47 · Fast Local · 2026-08-05 · Frontier Tower F10
doors 19:00 · walkthrough 19:30

FAST LOCAL.

Your own model, on your own machine, quick enough that you actually keep using it.

A private model with no bill is worth nothing if it takes forty seconds to answer. Tonight we make yours quick, and you measure the difference yourself.

WED AUG 5 Frontier Tower F10 Doors 19:00 Walkthrough 19:30 Hands-on 20:15 Demos 21:30

$10 early · $20 door · Frontier Tower members free with code FTMEMBER

Your ticket includes z.ai and Claude Code for the session, and Nebius Token Factory credits to run the labs.

The problem
01 / 02

Slow is the same as broken.

You can run a good coding model on your own hardware today. No account, no bill, nothing leaving the room. That part is solved.

40swhat a slow local setup takes to answer one question about your code
3how many times you wait that out before quietly opening the paid one again
$0what the slow one costs you, which turns out not to be the point

A tool you stop reaching for is not a tool you own.

Speed is not a nice-to-have here. It decides whether the thing gets used at all. So tonight is not about running a model locally, it is about making the one you already have quick enough to live on, on the same hardware, for the same nothing per month.

If you were at Bare Metal in July you built exactly this rig and watched it crawl. If you were not: it is a model file on your own machine, answering through a small server you run yourself. That is the whole prerequisite, and step one tonight sets it up from scratch.

The problem
02 / 02

"Slow" is three different problems.

Nobody can fix a number they have not split up. One reply is made of three separate waits, and only one of them is usually the reason you are suffering.

startone replydone
01Loading is a one-off. If it is slow you notice it once a day, not once a question.
02Reading gets worse the more code you hand it. That is the pause before the first word appears.
03Writing is the long one. Measured as words per second, and it is the number the rest of tonight moves.

So the order is fixed: measure first, change one thing, measure again. Everything after this slide is that loop. You cannot tune what you have not timed, and you cannot credit a change you made three of at once.

The concept
01 / 03

Make the model smaller so it can move faster.

A model is a huge pile of numbers. To write one word it has to haul all of them out of memory. Store those numbers with less precision and there is physically less to haul, so each word comes out sooner. That is called quantizing, and its real job is to make the model fit on your graphics card, which is where the big win actually comes from.

closest to the originalquality cliff →fastest

Why it works. The bottleneck is not the maths, it is moving the numbers around. Halve their size and you roughly halve the moving.

Why it costs. Less precision means small errors, and small errors in code are not small. They compile and then behave wrongly.

Why there is no default. The cliff sits in a different place for every model and every job. Yours has to be found, not looked up.

So the rule is: take the smallest version that still passes a real task of yours. Not a benchmark of somebody else's, and not the one a comment thread recommended. You will do exactly this in step two.

The concept
02 / 03

Two servers. Pick by what you own.

Something has to sit in front of the model and answer requests. There are two serious options and the choice is made by your hardware, not by taste.

llama.cpp

Runs the shrunken model files directly. Happy on a laptop.

  • Works on a plain CPU, on Apple Silicon, and on a normal gaming graphics card.
  • Almost nothing to set up. One command and you have a server.
  • Reads the small file format you will make in step two.

Pick this if you brought a laptop or have one graphics card.

vLLM

Built for real graphics cards and for serving a lot of requests at once.

  • Much better at keeping a big card busy, and can split one model across several cards.
  • Handles many people asking at the same time without falling over.
  • Does not read that same small file format. It wants its own kind. This trips up nearly everyone once.

Pick this if you have a serious card, several cards, or the Nebius credits.

both come out as the same socket http://your-machine:PORT/v1

Which is why the choice is reversible. Your coding tool is pointed at an address, not at a technology, so you can swap the thing behind it tonight without touching your editor again.

The concept
03 / 03

Five knobs. In this order.

Ranked by what they actually did on a real card, not by what sounds biggest. The first two we measured ourselves the day of this session; the rest are what people typically see, which is exactly why you re-time after every single one.

12x measured
Get every layer onto the card

Nothing else on this slide comes close. The same model, same size, run on the graphics card instead of left on the processor, went from 15 to 177 words a second on our test rig. If it does not fit, it crawls, and no other knob rescues it.

Costs: nothing, if it fits. Everything, if it does not.

1.4x measured
Shrink the model

The one from two slides ago. On its own it is worth far less than people claim: 127 to 177 words a second on the same card. Its real power is that a smaller model fits, which is how you buy the knob above.

Costs: quality, past a point you have to find yourself.

needs 2+ cards
Split it across cards

Give one model to several graphics cards at once and they share the hauling. Close to twice the speed on two cards, when the hauling is what was slowing you down.

Costs: nothing, but you need the second card.

1.5x to 3x
Let a small model guess ahead

A tiny fast model drafts the next few words, the real model checks them all in one go and keeps the ones it agrees with. Code is repetitive, so it agrees often.

Costs: it goes slower if the guesses are usually wrong. Check the agree rate.

frees room
Compress the conversation memory

Everything it has read so far sits in memory and grows. Store it more compactly and you fit longer files, and keep the card fed instead of idle.

Costs: squeeze too hard and long files start going wrong.

One knob at a time, re-time, keep what won. Turn three at once and you have learned nothing except that the pile of three did something. This is the most commonly skipped step of the night and the reason people leave unable to reproduce their own result.

The bar
19:55 · before anyone opens a terminal
Together, once

Time the paid one first.

We run one real coding task through Claude Code on z.ai, in front of everyone, and clock it. That number is tonight's bar.

01One task, picked in the room. Something small and real, not a puzzle.
02Run it hosted. Watch the words appear. Time it the way we will time yours.
03Write the number on the board. It stays up all night.
tonight's bar, measured live at ——— words per second · filled in at 19:55

Two reasons this happens before the build and not after. It gives every result later a shared yardstick instead of a private feeling, and it stops the evening turning into an argument about whether local can ever win. It usually cannot, on raw speed. The question is whether it gets close enough that you would rather keep your code on your own machine.

Lab · step 1 of 5
20:15
Step 01

Time it before you change it.

Nothing you do after this is worth anything without this number. Get a baseline reading from the model exactly as it is right now, so every later change can be credited or blamed.

baseline
# built-in benchmark: reading speed and writing speed, separately
./llama-bench -m models/coder-7b-q8_0.gguf -p 512 -n 128
# built-in benchmark: reading speed and writing speed, separately
./llama-bench -m models/coder-7b-q8_0.gguf -p 512 -n 128
# same tool, .exe, and use a full path if it is not on PATH
llama-bench.exe -m models\coder-7b-q8_0.gguf -p 512 -n 128
# on the Nebius box, same tool. -ngl 99 pushes it onto the card.
./llama-bench -m models/coder-7b-q8_0.gguf -p 512 -n 128 -ngl 99
then time a real reply, end to end
# start the server
./llama-server -m models/coder-7b-q8_0.gguf --host 0.0.0.0 --port 8080

# in another window: ask it something and time the whole thing
time curl -s localhost:8080/v1/chat/completions \n  -H 'Content-Type: application/json' \n  -d '{"model":"local","messages":[{"role":"user",
       "content":"write a python lru cache"}],"max_tokens":128}'
# start the server
./llama-server -m models/coder-7b-q8_0.gguf --host 0.0.0.0 --port 8080

# in another window: ask it something and time the whole thing
time curl -s localhost:8080/v1/chat/completions \n  -H 'Content-Type: application/json' \n  -d '{"model":"local","messages":[{"role":"user",
       "content":"write a python lru cache"}],"max_tokens":128}'
# start the server
llama-server.exe -m models\coder-7b-q8_0.gguf --host 0.0.0.0 --port 8080

# PowerShell EATS the quotes in an inline JSON body. The server
# answers: parse error ... last read '{m'. Put the body in a file.
'{"model":"local","messages":[{"role":"user","content":"write a python lru cache"}],"max_tokens":128}' | Out-File req.json -Encoding ascii
Measure-Command { curl.exe -s -X POST localhost:8080/v1/chat/completions `
  -H "Content-Type: application/json" -d "@req.json" }
# start the server
./llama-server -m models/coder-7b-q8_0.gguf --host 0.0.0.0 --port 8080

# in another window: ask it something and time the whole thing
time curl -s localhost:8080/v1/chat/completions \n  -H 'Content-Type: application/json' \n  -d '{"model":"local","messages":[{"role":"user",
       "content":"write a python lru cache"}],"max_tokens":128}'

Write these three down now. They are your "before", and you will need them at 21:15 whether or not the rest of the hour goes to plan. words per second  ·  seconds until the first word  ·  memory used

Lab · step 2 of 5
20:30
Step 02

Shrink it and re-time it.

Turn the model into a smaller version of itself, then run the exact same benchmark from step one. One change, one measurement. This is the biggest single jump you will see tonight.

convert, then shrink
# 1. convert the downloaded model into the file format llama.cpp reads python convert_hf_to_gguf.py ./Qwen2.5-Coder-7B-Instruct \ --outfile coder-7b-f16.gguf --outtype f16 # 2. shrink it. Q4_K_M is the usual pick for coding work. ./llama-quantize coder-7b-f16.gguf coder-7b-q4_k_m.gguf Q4_K_M # 3. the SAME benchmark as step one. Nothing else changed. ./llama-bench -m coder-7b-q4_k_m.gguf -p 512 -n 128

Short on time or on disk: plenty of models are published already shrunk, so you can download a ready-made Q4_K_M and skip steps 1 and 2. You will get the speed either way. Doing the conversion yourself is what lets you do it to a model nobody has published, which is most of the interesting ones.

Re-time, and write the new numbers under the old ones. Expect the speed up and the memory down. Do not trust the speed on its own yet - whether it still writes working code is step five's job, and it is the step people skip.

Lab · step 3 of 5
20:45
Step 03

Put a real server in front of it.

Same shrunken model, now behind an address your coding tool can talk to. Take the left column if you are on a laptop or one card, the right if you have a serious card or the Nebius credits.

laptop or one card
./llama-server -m coder-7b-q4_k_m.gguf \ --host 0.0.0.0 --port 8080 \ -ngl 99 \ --ctx-size 16384 # -ngl 99 = put every layer you can on # the card. Back it off if it runs # out of memory (see slide 13).
real card, or the Nebius box
vllm serve Qwen/Qwen2.5-Coder-7B-Instruct-AWQ \ --quantization awq \ --port 8000 \ --max-model-len 16384 # note the model name ends -AWQ. # vLLM does NOT read the .gguf you # just made. Different shrink format.
now point your coding tool at it

Set the base URL to http://localhost:8080/v1 (or :8000/v1 for the right-hand column) and put any nonsense string where it asks for an API key. It is your own machine, so nothing checks it. That is the whole wiring: your editor is talking to an address, and the address is now yours.

Flag names on both of these move between releases, and a wrong flag fails loudly at startup rather than quietly. If one is rejected, --help on the binary you actually installed is the truth, not this slide and not a blog post from last year.

Lab · step 4 of 5
21:00
Step 04

One knob. Re-time. Keep or revert.

Take these in order, stop when you run out of hardware, and after every single one re-run the benchmark and write the number next to the flag that caused it.

split across cards · needs 2 or more
vllm serve <model> --tensor-parallel-size 2 --port 8000
let a small model guess ahead · check --help, this flag was renamed
# newer vLLM: one config object vllm serve Qwen/Qwen2.5-Coder-7B-Instruct --port 8000 \ --speculative-config '{"model":"Qwen/Qwen2.5-Coder-0.5B-Instruct","num_speculative_tokens":5}' # older vLLM: two separate flags. Same idea. # --speculative-model ... --num-speculative-tokens 5
compress the conversation memory
# llama.cpp ./llama-server -m coder-7b-q4_k_m.gguf --port 8080 \ --cache-type-k q8_0 --cache-type-v q8_0 # vLLM vllm serve <model> --port 8000 --kv-cache-dtype fp8

If a knob makes it slower, revert it and say so out loud. That is a useful result, it will happen to somebody here tonight, and the guess-ahead one is the usual culprit.

Lab · step 5 of 5
21:15
Step 05

Fill in the card.

Run the same task we ran hosted at 19:55, against your own endpoint, timed the same way. Then run it once more and read what it actually wrote, because speed with broken output is not a result.

bars are illustrative · you fill in the numbers

Beating the paid one is not the win condition.

Getting close enough that you would rather keep your code on your own machine is. Say your number out loud when we go round, and say which knob got you there. Somebody with the same laptop is about to save forty minutes because you did.

Last thing, and it is the one that separates a real result from a fast-looking one: does the code it just wrote actually run? If it does not, go back up a shrink level and take the speed loss. A fast model that is confidently wrong is worse than the slow one you started with.

Gotchas
the five that cost the hour

Five ways tonight lies to you.

Every one of these produces a number that looks like a win. Each card says what goes wrong and, more usefully, how you catch it in the room.

Shrunk too far

The small versions still score well on published tests and still write code that does not run. Benchmarks are not your codebase.

Tell: run your own real task at each level. If it stops compiling, you went one too far.

Guess-ahead made it slower

If the small model's guesses are usually wrong, you now pay for two models and get one. This is common and it surprises people.

Tell: the server prints how often the guesses were accepted. Low number, turn it off.

Squeezed the memory too hard

Compressing the conversation memory is usually safe at one notch and starts corrupting long files below that.

Tell: test on a long real file, never a one-liner. Short prompts hide this completely.

Fell off the card

Push too much onto the graphics card and it either stops with an out-of-memory error or, worse, quietly moves part of the work back to the CPU and crawls.

Tell: watch memory while it loads. A big unexplained slowdown after a small change is this.

Wrong shrink format

The two servers want different kinds of shrunken file, and the error message is not obvious about it. This eats lab hours.

Tell: llama.cpp wants .gguf. vLLM does not. Decide which server first, then shrink for it.

The pattern behind all five: a speed number on its own is not evidence. A reading is only real when you also know the answer was still correct and you changed one thing to get there.

Leave-with
21:30

What is in your bag at 22:00.

Not notes. Four things that keep working tomorrow on the machine you carried in.

01A local endpoint your coding tool is already pointed at.Running, wired, and fast enough that you will not quietly switch back on Thursday.
02The commands that produced it, in order.Shrink and serve, so you can do it again to the next model without asking anyone.
03A way to time it, and one honest number to beat.Yours before, yours after, and the paid one from the board at 19:55.
04The four knobs, ranked, with what each one cost you.Including any that made it worse on your hardware, which is the part nobody publishes.
Resources
take these home

Where to read next.

The two servers
Why the knobs work
Tonight's compute
  • Nebius Token Factory - the credits behind the lab hour. docs.tokenfactory.nebius.com
  • z.ai with Claude Code - what we timed the bar with at 19:55.

Commands from tonight, the scorecard, and whatever the room finds go into the Telegram after demos. That is also where you post your number, and it is worth doing, because somebody with your exact laptop is going to search it. t.me/+EBFzKXmJAVk5ZGU0

Partners
in your ticket

Who paid for the hour.

Both of these are in every ticket tonight, and both of them are doing actual work in the format rather than sitting on a logo wall.

z.ai
with Claude Code · the bar

Every seat gets Claude Code running on z.ai for the session. It is also what we clock at 19:55 to set the number on the board, so the thing you are chasing is a thing you can also use.

Nebius Token Factory
the lab hour

Credits for the hands-on hour, so anyone without a serious graphics card in their bag can still stand up a fast endpoint tonight instead of reading about one.

If you want a night like this pointed at your product, the format is the same every time: your thing has to be the thing people build with for an hour, not a slide before the build. Come find the facilitator.

VCN #47 · Fast Local
22:00 · stay for the social

Post your number.

Join

Telegram is where the commands, the scorecard and everyone's readings land tonight.
t.me/+EBFzKXmJAVk5ZGU0
vibecodingnights.com

Next

Saturday Aug 8, 10:00, Floor 9 - Mornings: #48 Total Recall, giving your agent a memory that survives the session.
Wednesday Aug 12, 19:00, Floor 10 - #49 The Swarm.

Teach one

Off the Leash runs to #50 and we take builder-led nights. If you shipped a pattern and can get a room to build it in an hour, that is the whole bar. Bring it to the facilitator tonight.

Hosted by Vibe Coding Nights. Facilitator Rayyan Zahid (Immersive Commons), with Michalis Vasileiadis (Hacker Bob), Eric Mockler (AI Geneticist) and Devinder Sodhi (Learning Layer Labs). Wednesdays 19:00 on Floor 10, Saturdays 10:00 on Floor 9.