← Lab

A coding assistant that was never born

Abandoned · Started , updated

I wanted to train a coding assistant on my own PC with Soup, mostly to learn the technique. The technique worked, the assistant never found a purpose, and I abandoned it.

Fig. 1Layer bench

Drag to turn it.Layer 4/12 in the card · memory 4/6 · nothing at the output

Drawing of a test bench. The shelf is the PC’s 32 GB of RAM and the narrow slot is the 6 GB of video memory, and the loader passes the model’s layers through in turns, which is what Soup’s layer streaming does. The technique worked and gave the same result as the normal method, but there was never a deliverable, so nothing reaches the output. The number of trays and how much each one takes up belong to the drawing. The tile in terracotta is a reminder that Windows keeps part of the card. Switching it off empties the shelf.

Soup promises to train an 8B language model on a 4 GB graphics card from a single configuration file. My PC has 6 GB of video memory and 32 GB of RAM, so the numbers seemed to add up. The plan was to build my own coding assistant, a model that would help me program from my own machine, and the real goal was to learn the technique.

Exams in a box with no network

Before training anything you need to know where you start from, and that calls for exams. We set up exams that run the code of every answer inside a container with no network, like marking papers in a room with no windows. Three untrained models got their baseline score on two public benchmarks and on an exam of my own with ten questions.

Phase 0 baseline
ModelHumanEval+MBPP+My own exam
Qwen2.5-Coder 1.5B44.5%66.1%4/10
Qwen2.5-Coder 3B65.9%71.4%Not measured
Qwen2.5-Coder 7B70.7%79.1%9/10
These are untrained models, measured on my machine. The code in every answer ran inside a container with no network.

The 3B performs almost like the 7B at less than half the size, and that was the first lesson, to measure before assuming that bigger is better.

Then came the training data. Of 200,000 examples about 62,000 good ones remained, and we removed 62 that looked too much like the exams, because a student who has seen the questions proves nothing. That is where the second lesson turned up. Our “normal” and “high quality” datasets also differed in the kind of problems they held, and an experiment is only worth something if it compares things that differ in a single variable. We caught it before training.

The memory the card does not have

Soup’s headline feature, layer streaming, is the one that promises to fit an 8B model on a 4 GB card, and it works. On my PC it gave exactly the same result as the normal method. What is fragile is everything around it. We had to work around several bugs in Soup and in the pieces it relies on, and one of them copied 1 GB to the card for every generated word.

And real memory is smaller than nominal memory. Windows keeps part of the card, some parts of the model do not compress, and the Linux that runs inside Windows caches files in RAM that count as free inside it and as taken for Windows. That last one stopped the tests twice.

A specialist with no trade

With the technique learned, the question that should have come first was still there. A small local model does not compete with the big tools as a generalist, and it only makes sense as a specialist in a narrow task. So we changed course towards droneobservatory, the code behind EODI, and measured its real running cost.

It did not pay off there either. The cost is about 39 USD a month, and 80% of it comes from the expert model writing news records, which is the hardest task and needs the text of the articles, which is not stored. Replacing the whole base model would save about 5 USD a month at most. What would save the most there is not training anything, but reviewing the rules that send records to the expert, the “critical” and “low confidence” ones, and that improvement is still pending.

The technique worked. What never showed up was a deliverable that justified going on, and without knowing what you want to deliver and what for, experiments end up as loose tests and there is no way to know when to stop. So I stopped.

Log

  1. Abandoned

    End · Abandoned,

    I abandoned the project because I could not find a deliverable worth the effort.

  2. A change of course towards droneobservatory

    Turn · Done,

    Once it was clear that a small coding assistant would be of no use to me, we changed course towards droneobservatory and measured its real running cost. The numbers are in the text above.

  3. Training data

    Data · Done,

    We prepared the training data. Of 200,000 examples about 62,000 good ones remained, and we removed 62 that looked too much like the exams.

  4. Exams and baseline

    Phase 0 · Done,

    Phase 0 was completed in full. The exams run the code inside a box with no network, and three untrained models got their baseline score, which is the one in the table.

  5. My own assistant on my PC

    Plan · Done,

    We set out to build our own coding assistant on my PC, which has 6 GB of video memory and 32 GB of RAM. The main goal was to learn the technique.

  6. Evaluating Soup

    Soup · Done,

    Soup is a tool for training language models from a single configuration file. Its headline feature, layer streaming, makes it possible to train an 8B model on a 4 GB card. We found it interesting, though with many features that had seen little testing.