fronk

It could work!

A 125B mixture-of-experts model, running on the computers you already own.

Every expert, cut into twenty slices of 32 neurons.

The film

The whole idea,
start to finish.

It starts silently when you reach it: turn the sound on for the music. Installer, console and chat are real captures; the chat plays at its original speed.

Install Fronk

A frontier model installs it for you.

Fronk comes with an installation procedure for your coding agent. You need no networking skills: just read the short guide on how to connect your computers.

Don't split the experts.
Split every expert.

Each expert in the model is a small network of 640 neurons. fronk doesn't hand whole experts to machines. It cuts every one of them.

Twenty slices.

The 640 neurons become twenty groups of 32. One group, highlighted, is slice 7: neurons 224 to 255.

One slice runs through the whole model.

32 neurons × 512 experts × 48 layers = 1 slice · 3.35 GB

Every node holds one or more.

Twenty slices make the whole model. A node's share of the work is simply how many slices it holds.

Computes a slice
of everything.

A node is any Linux or macOS machine running fronk node. It keeps its slices in memory, or uses a measured RAM + SSD split with Metal, and answers each request with a partial sum.

  • Control serverAn authenticated TCP server for hardware, benchmarks, slice transfer and sessions.
  • Receive threadSpins on the socket, reassembles the request from its fragments and keeps only the newest one.
  • Compute poolNative kernels for each machine (AVX2, NEON, Metal) run the gate, up and down projections of the 11 chosen experts for its slices.
  • Slices in memoryReceived once, verified with SHA-256, reused on every restart.

From a cable
to the first token.

Every start of the head runs the same seven phases. Scroll through them: one cluster, one scene, each phase building on the last.

01 · Connection

Find everyone.
Trust no one.

The head announces itself on every interface. Each node answers, proves it knows the cluster secret, and every path to it is timed. The fastest one wins.

  • UDPHELLO, multicast on every interface
  • TCPAUTH nonce, answered with HMAC-SHA256
  • UDPprobe trains of 64 B, 5 KB and 21 KB
  • TCPLINK REPORT, fastest path chosen
02 · Discovery

Know every machine.

Each node reports its hardware and saved compute profile. Installation measures the chosen backend; compatible profiles are reused when reconnecting. Network paths are measured again.

  • TCPHW: cores, memory, instruction set
  • TCPBENCH PROFILE at the session's burst
  • nodeself-test and saved measurements for the chosen backend
03 · Configuration

Twenty slices.
One plan.

The head fits the twenty slices to measured speed and memory, shows each node's neuron ranges and link, and waits for you to proceed or rescan.

  • headfit 20 slices to speed and memory
  • TCPBACKEND, chosen for each node's share
  • youproceed, or modify and rescan
04 · Fronk

Send only
what's missing.

The head cuts the model file into slices and streams to each node only the ones it doesn't already hold. The node checks every byte before it loads a slice into memory.

  • TCPUNITS: slices already cached, with SHA-256
  • TCPRECV, raw stream of 3.35 GB per slice
  • nodeverify SHA-256, stamp, load
05 · Self-test

Prove it first.

A distributed expert calculation is compared with a scalar reference read from the model file. If the error is too large, generation does not start.

  • TCPSESSION START: id, slices, burst
  • UDPREQ warm-up, then a checked REQ
  • UDPPART from every node
06 · Generation

Every layer,
a round trip.

For every layer of every token the head sends one request and sums the partial answers. Every assigned slice must reply before a complete result can reach the dense engine.

  • UDPREQ: fp16 activations, 10 experts, 11 gates
  • UDPPART: one fp16 partial sum per node
  • headrequire all assigned partial sums
07 · Report

See where
the time goes.

The head collects every node's counters and reports tokens per second, call times, the deadline and the bottleneck. Move a cable or add a machine, and the next run starts from phase one.

  • TCPINFO dataplane from every node
  • headtokens/s, p50 and p99, bottleneck

One layer.
One round trip.

The same request goes to every node. Each node answers with its partial sum. The expert calculation is complete when all assigned partial sums arrive. Missing work is an error, not an approximate answer.

5 KB

per token each way. Activations and partial sums travel in fp16.

MTP

verifies drafted tokens together. Useful speed depends on acceptance and the cost of that verification.

0

UDP retransmissions. Late replies are counted; incomplete sums cannot become a chat answer.

It wasn't the cable.
It was the system calls.

A request for one layer is about 11 KB. The wire carries it in well under 100 µs. What took longer was asking the operating system to send it, once per packet.

Sending one 11 KB request · time in microseconds
system call · about 40 µs eachbytes on the wire

What one system call costs

  1. Your programasks to send
  2. Switch to the kernelevery call
  3. Look up route and policyevery call
  4. Build the packetevery call
  5. Hand to the driverevery call
  6. Wireframes of 1,500 bytes

Every step but the last is paid again for each packet. Sending eight packets pays it eight times.

Measured on the head: time to send the same 11 KB request
How it is sentSend time
8 packets, unconnected socket before315–460 µs
1 datagram, unconnected socket80–130 µs
1 datagram, connected socket now36–54 µs

If one of the frames the kernel cut is lost, the whole message is lost. Ordinary chat requires complete sums: a missing reply is reported as a failure. A dedicated wired network reduces this risk.

The fastest path, measured

Every path to every node is timed with packets the size of real requests. The measured path wins. Separate Thunderbolt links and wired Ethernet usually give more predictable results than Wi-Fi.

Awake only when it matters

While the model generates, threads wait without sleeping, because a wake-up costs more than the work. After 50 ms of silence they park.

The usual ways to split a model.
The tradeoffs at home.

Large models can be spread across machines in several ways. A mixed cluster serving one conversation has different constraints from a datacenter serving many users. Here is where the waiting comes from.

Pipeline parallel

Each machine gets some layers.

A token visits the machines one after another. At any moment one works and the rest wait, so more machines add memory but not speed.

Tensor parallel

Every matrix is split across machines.

Common tensor-parallel layouts exchange intermediate results several times per layer. Fast links and balanced participants help; on a mixed home network, synchronization can dominate.

Expert parallel

Each machine gets whole experts.

The router decides who works. With one user, a few machines hold the chosen experts while the others idle. The busiest sets the pace, and each must fit entire experts.

Stream from disk

One computer reads experts from its SSD.

Every token reads gigabytes of experts. A disk delivers a few gigabytes per second, so the disk, not the processor, sets the speed.

A slice of every expert.
On every machine.

fronk uses a narrower split: expert neurons, while the dense part stays on the head. Every machine holds the same 32 neurons of every expert, computes its slice of whichever experts the router picks, and sends back one partial sum.

Everyone works on every token

Like tensor parallel, all machines compute at once and their speeds add up. Unlike expert parallel, the load follows the plan, not the router, so every assigned node contributes. The slowest completion still sets the pace.

One small exchange per layer

One request out, one partial sum back, about 5 KB each way per token. The head adds the partial sums. Separate Thunderbolt links or an asymmetric Ethernet switch can make these repeated returns affordable.

Fits the machine you have

A 3.35 GB slice gives each backend a small, regular piece of every expert to compute. The plan sizes each machine's share to its memory, speed and link.

Your machines,
sized to their memory.

A Linux tower, an older Intel iMac and an Apple silicon laptop can serve the same model side by side. Each holds as many slices as its memory allows.

x86 desktop · AVX2

16 GB

Room for 4 slices after the system and a safety margin.

x86 with lots of memory · AVX2

48 GB

Room for 13 slices. The same kernels, just more space.

Apple silicon · NEON or Metal

16 GB

Room for 3 slices. macOS and the GPU keep more for themselves.

system and safety marginone slice · 3.35 GB

Memory sets how many slices a machine can hold.

And sized to their link.

The cable matters as much as the memory. Every call goes out and comes back once per layer, so the time a link adds is paid on every token. fronk measures each one with requests of the real size.

Gigabit Ethernet

0.6–1 ms

Any desktop or adapter. One multicast send can reach the nodes on a shared switch. Replies still share the head link: prefer a faster head uplink, for example 10 Gbit/s to 1 Gbit/s nodes.

Thunderbolt

0.2–0.3 ms

Use a separate head Thunderbolt port for each direct Mac connection. Each node gets its own path; mixed Thunderbolt and Ethernet are supported.

RDMA research

≈0.02 ms

An illustrative low-latency path for the planning example below. Fronk does not implement RDMA; this is not a measured result or a supported installation option.

Round trip of one request and its reply. Ethernet and Thunderbolt ranges describe the test cluster; the RDMA value is a hypothetical planning input.

Talk faster.
Compute more.

A call lasts as long as its slowest node, and each node spends network time plus compute time. fronk times every link during Connection and plans with both numbers, to balance completion times within the available memory. Metal nodes can also report a measured RAM + SSD cost.

Illustrative timings, not a prediction for your cluster. The light segment is network, the solid one is compute.

Tech specs

Model
Qwen3.8-Flash-Next, 125B parameters, 4-bit48 MoE layers and one MTP layer · 512 experts per layer, 10 routed and 1 shared per token
Distribution
20 slices of 32 neurons3.35 GB each · sliced from the local model file · verified with SHA-256
Head
Apple silicon Mac with the ds4 enginedense model on the GPU · fanout, accumulator, deadline, planner
Nodes
Linux and macOSx86 with AVX2 or Apple silicon · backend chosen by an on-node benchmark, with a scalar reference as oracle
Data plane
UDP, one datagram per messagefp16 payloads · multicast on shared Ethernet, connected unicast on Thunderbolt · deadline τ, no retransmission
Control plane
TCP with HMAC-SHA256 authenticationcluster secret saved once on each machine, readable only by its owner
Links
Thunderbolt, Ethernet, Wi-Fichosen per node from measured round trips
Requirements
A dedicated networkthe data plane trusts its network and is not meant for a shared office LAN

Try it. Tell me what happens.

This is the first public version. The mixed test cluster reached 15–16 tok/s on short warm responses; your machines and workload will differ. Bugs and useful surprises are both worth sharing.

Get unstuck

Start with the troubleshooting guide. If you want help from a frontier model, give it the ready-made brief for the step that failed: installation, networking, weights or runtime.

Make it your own

Read the project map, add a backend module, or connect your chat client or agent. Each area has a matching brief for a coding model.

Compare notes

See the actual cluster and measurements, share your configuration and results, or send a focused fix using the contribution guide.