KRXY

Research

Research

The KRXY research question, how model answers are evaluated, what a second Raspberry Pi changed, and the difference between distributed inference and distributed learning.

Directions

What KRXY is investigating

Inference now runs on two physical nodes, and answers are measured. Learning across machines is a separate, harder question and is labelled as such.

Stage 01parallel on two nodes

Making inference work

Routing a request to an independently operated node that can actually run the requested model, and getting a result back.

Stage 02measured on one node

Measuring the answers

Checking whether replies are correct and complete under rules fixed in advance, instead of choosing a model by size, speed or the fact that it runs.

Stage 03under investigation

Distributed learning and execution

Whether many small, different machines can share work and help train one model despite stale updates, slow links and nodes that disappear. A first attempt to split one answer across two Pis failed its validation.

Two physical nodes · Part 6

What actually got faster

A second, CPU-only Raspberry Pi joined on 28 and 29 October 2026. Every figure here is copied from the published article.

The question

What changes when a second, differently equipped Raspberry Pi joins? Node 02 had no Hailo accelerator. If the scheduler matched deployments rather than hardware names, it should still accept a CPU job for the same pinned model.

Conditions

  • Two Raspberry Pi 5 nodes, one with Hailo and one CPU-only
  • Pinned Qwen2.5 3B Q4_K_M, temperature 0, two CPU threads and one generation slot per Pi, a 512-token output limit, PWM fans fitted on both Pis
  • Each answer was still generated on one Pi

Before the comparison

28 October 2026: Node 02 stopped answering on the local network while the 3B model file was being copied. A later boot recorded an ext4 orphan-cleanup message, consistent with an unclean unmount. The cause was not established. While Node 02 was offline, requests were still served by Node 01.

Hosted deployments on the two nodes

published record
Pretrained Qwen2.5 deployments, not separately trained KRXY models
DeploymentRuntimeNode 01Node 02
Qwen2.5 1.5B Instruct, compiled HEFhailo-ollamaAvailableNo Hailo hardware
Qwen2.5 1.5B Instruct, Q4_K_M GGUFllama.cppAvailableAvailable when CPU service ready
Qwen2.5 3B Instruct, Q4_K_M GGUFllama.cppAvailableBrought up for the two-node tests

Paired 3B requests, 29 October 2026

measured
512-token stylish prompt, as published. The both-nodes row is the average individual request within the paired workload, not the time to finish both jobs.
ConfigurationMean computeMean client wait
Node 01 only83.755 s87.427 s
Node 02 only82.639 s86.367 s
Both nodes available83.349 s per job86.406 s per job
One request5.9 tokens/sTwo overlapping12.2 tokens/s
Output tokens per second. The single figure is the caller's view of one request; the paired figure is batch wall throughput across two jobs.
LabelValueNote
One request5.9 tokens/sCaller's view of one 512-token request, about 86 to 88 s of client wall time
Two overlapping12.2 tokens/sBatch wall throughput of two requests, 1,024 output tokens in an 83.9 s span

Source: Building KRXY, Part 6. Published record, one session, not independently reproduced.

How to read it

Two overlapping jobs finished in roughly the wall time of one, about twice the batch throughput. A single answer did not get faster: each request still took around 83 s of compute on whichever Pi ran it.

All 36 requests ended at the 512-token limit, so they measure a fixed output budget, not 36 completed contact forms. In a separate 1,024-token comparison the stylish page finished naturally after 882 output tokens. Node 01 took about 148.9 s of compute and Node 02 about 145.7 s.

Cooling made the comparison fairer, not faster. Node 01 averaged 83.779 s on 28 October and 83.755 s on 29 October.

Splitting one answer

failed experiment

An opt-in test gave markup and styling to separate child jobs. They overlapped by about 27.9 s. The assembled page was missing the expected .contact-submit CSS selector, and a repair job did not produce a valid result. The repair added about 111 s, and the whole task took about 153 s, slower than one node producing the complete page.

Thermal readings

  • Node 01: Fan about 3,003 RPM at the start and about 9,500 RPM during generation. One sample reached 81.8°C and latched the historical soft-temperature-limit flag. Active throttling bits were clear when checked.
  • Node 02: Fan about 1,742 RPM at the start and about 5,300 RPM during generation. 70.8°C in a mid-job sample, with no throttling flag.

What Part 6 does not claim

  • The 28 October outage was not explained.
  • The 512-token responses were truncated at the limit.
  • Splitting one contact-form task failed its validation contract and added time.
  • The first simultaneous admission returned node_busy. The retry fix came afterwards and is not part of these results.
  • Remote restart and shutdown existed in the API but were not exercised by upgraded agents.
  • No distributed training was run. Both Pis served published pretrained weights.

Model evaluation

Measuring answers before choosing a model

What Part 5 compared, under which conditions, and what the results do not cover. Every figure here is copied from the published article.

Why answers are measured

Part 4 could deliver a request to the right model. It could not say whether the reply was any good. Parameter count, speed and the fact that a model runs on the hardware are not evidence of a correct answer, so Part 5 compares the answers themselves.

Method

A run sends the same cases to each selected deployment, stores the returned text with its settings, and records pass, fail or review. When the scoring rules were corrected, the stored answers were not overwritten. The promotion rule was written before the hold-out answers were read.

Conditions

  • One Raspberry Pi, three deployments of pretrained models
  • 24 frozen cases: 6 email, 6 extraction, 6 correction and 6 technical
  • Temperature 0, a 256-token output budget, one repetition per case
  • 72 requests, 71 completed. One Hailo case returned no_eligible_node, so the paired comparison uses the other 23 cases.

Frozen hold-out, 26 October 2026

published record
Results on 23 paired cases, as published
DeploymentRoleRuntimePassesFailuresMedian node execution time
Qwen2.5 3B Instruct, CPUCandidatellama.cpp on the Pi CPU1468.496 s
Qwen2.5 1.5B, CPU GGUFControlllama.cpp on the Pi CPU1243.623 s
Qwen2.5 1.5B, HailoDefaultHailo accelerator7136.756 s
3B on CPU14 pass6 fail1.5B on CPU12 pass4 fail1.5B on Hailo7 pass13 fail
Whole-answer passes and failures on 23 paired hold-out cases. Bars are out of 23; cases that are neither pass nor fail did not get an automatic verdict.

Source: Building KRXY, Part 5. Published record, automated verdicts, not independently reproduced.

3B on CPU8.496 s1.5B on CPU3.623 s1.5B on Hailo6.756 s
Median node execution time on the paired set. Not time to first token or decoding throughput.
LabelValueNote
3B on CPU8.496 sCandidate
1.5B on CPU3.623 sControl
1.5B on Hailo6.756 sDefault

Source: Building KRXY, Part 5. Published record, automated verdicts, not independently reproduced.

Promotion rule for the 3B candidate

  • More whole-answer passes than both controls: met
  • No more failures than the better control: not met
  • No more length stops: met
  • Median execution time no more than twice CPU 1.5B (7.246 s): not met

The 3B candidate was not promoted. The default stayed on Hailo, and the 3B deployment remained selectable as a candidate. A larger model improved some answers and was still the wrong default under the criteria chosen for this project.

Earlier comparison, 25 October 2026

12 synthetic tasks per deployment, one repetition, scored again after the rules were corrected without overwriting the stored answers.

DeploymentPassFailReview
Qwen2.5 1.5B, CPU GGUF732
Qwen2.5 1.5B, Hailo291

Weaknesses found

  • The Hailo deployment, still the default, had the fewest passes and the most failures.
  • The 3B candidate was the slowest of the three by median time.
  • A 256-token chat default cut off a long 3B reply. Interactive chat now defaults to 1,024 tokens; evaluations keep 256.
  • A job marked completed was not always a complete answer.

Limitations

  • Small synthetic task sets and one repetition per case.
  • Automated verdicts, without independent human judging of every reply.
  • One machine, so this compares runtimes, not nodes. Not a general ranking of models.
  • Not measured: time to first token, decoding throughput, power consumption, accelerator memory.

What it does not show, and what comes next

These results say nothing about distributed learning or execution across machines. No training was run and there was no second provider. The next step named in Part 5 is a second Raspberry Pi without the Hailo accelerator, to test the compatibility and scheduling rules from Part 4. Part 6 records that node; see two physical nodes above.

Read Part 5

Method

Approach and open questions

The working question is whether useful intelligence can be spread across machines that are cheap, different from one another, and free to disappear.

That question has two layers.

The first is operational. A coordinator asks what a node can run, sends it a job it is actually able to execute, and accepts a result. The journal describes the start of that path on one Raspberry Pi: an identity that survives reboot, a heartbeat, and a scheduler that withdraws a node when it cannot run the requested model.

Between those two layers sits a narrower question: when a job reaches a model, is the answer any good? Part 5 records the first stored evaluations. The same synthetic tasks were sent to a Hailo deployment and two CPU deployments on the one Pi, and each answer received a pass, fail or review verdict under rules written down in advance. A model that runs is not assumed to be suitable, and a larger model is not assumed to be better. Those checks describe answer quality on specific tasks. They say nothing about whether a network of machines can learn.

Part 6 moves the operational question onto two physical nodes. A second Raspberry Pi without the Hailo accelerator ran the same pinned CPU builds, and the scheduler placed independent requests on both. Two overlapping 3B jobs finished in about the wall time of one, roughly twice the batch throughput, while each answer took as long as before. An attempt to split one answer into parts for the two nodes failed its validation and took longer. That is evidence about inference capacity, not about learning.

The second is scientific. Can the same kind of network take part in learning, not only in serving a model someone else trained? Learning has to cope with stale updates, partial failure, narrow links, and hardware that does not match. A speedup on one workload would still be a workload-specific result. It would not prove a general advantage over centralised training.

No numbered multi-node training result is published here. Draft experiment identifiers are held in the administration archive until a repository artifact or a later journal entry supports them. Publishing a form does not validate an experiment.

Evidence

How claims are labelled

Every hardware note, model profile and experiment carries one of these statuses.

  1. 01

    Published record

    Described in a published journal entry or attached report. The claim is limited to what that source says.

  2. 02

    Measured, not independently validated

    Numbers were recorded, but nobody outside the project has reproduced them.

  3. 03

    Awaiting repository evidence

    Held back. Never shown publicly until code, logs or a report are attached.

  4. 04

    Exploratory

    Early notes and questions. Useful context, not a result.

Public experiment records