BROBOT: the model player, the RAM-as-effort frontier, and the MoE asymmetry
Browse files- README.md +17 -0
- index.html +17 -0
README.md
CHANGED
|
@@ -21,6 +21,23 @@ license: mit
|
|
| 21 |
|
| 22 |
<p>The slowest row is ours, and it stays: a 135-million-parameter dense model runs three hundred times slower than a 397-billion-parameter sparse one. <b>Sparsity, not size, decides what a small machine can run.</b></p>
|
| 23 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 24 |
<p><b>Smart phones, plural.</b> A phone at 11 tok/s is not a terminal for somebody else's data centre β it is a <b>node</b>. That reframes the problem: not "how large a model fits on this device", but "what does a mesh of small devices know together". The catalogue already carries the cluster layer β <a href="https://github.com/minaiml/exo" target="_blank" rel="noopener">exo</a> builds an AI cluster from everyday devices, <a href="https://github.com/minaiml/distributed-llama" target="_blank" rel="noopener">distributed-llama</a> splits one model across machines on a LAN, <a href="https://github.com/minaiml/petals" target="_blank" rel="noopener">petals</a> does it over a swarm.</p>
|
| 25 |
|
| 26 |
<p><b>The floor is two processors.</b> <a href="https://huggingface.co/spaces/PYTHAI/mindX" target="_blank" rel="noopener">mindX</a> is the existence proof, and it is deliberately unglamorous: <b>2 CPU cores, 7.8 GB of RAM, no GPU</b>, self-throttled to a third of the processor. On that it trains <i>its own weights</i> from its own memory β dreams become a corpus, the corpus trains a 135M actor, and a proof-of-recall gate decides whether the result is allowed to exist. It usually isn't: generation 39 is the newest the gate accepted, and every generation after it was refused. <b>A gate that never refuses is not a gate.</b></p>
|
|
|
|
| 21 |
|
| 22 |
<p>The slowest row is ours, and it stays: a 135-million-parameter dense model runs three hundred times slower than a 397-billion-parameter sparse one. <b>Sparsity, not size, decides what a small machine can run.</b></p>
|
| 23 |
|
| 24 |
+
<p><b>BROBOT β the build.</b> <a href="https://github.com/minaiml/brobot" target="_blank" rel="noopener">minaiml/brobot</a> is the model player itself, built from PocketPal AI (MIT, React Native + llama.rn). Its <code>src/handheld/</code> module is the device side, and what it has found so far is the interesting part.</p>
|
| 25 |
+
|
| 26 |
+
<p><b>RAM is effort.</b> Three things compete for it β weights, KV cache, prefill batch β and the KV cache is charged <i>twice</i>: once in memory, and again in bandwidth on every single token. So the configuration that fits the most context is reliably <b>not</b> the one that produces the most tokens.</p>
|
| 27 |
+
|
| 28 |
+
<div class="scroll"><table>
|
| 29 |
+
<tr><th align="left">strategy</th><th align="left">context</th><th align="left">RAM</th><th align="left">tok/s</th><th align="left">tok/s per GB</th></tr>
|
| 30 |
+
<tr><td>speed</td><td>1,024</td><td>2.17 GB</td><td>7.6</td><td><b>3.51</b></td></tr>
|
| 31 |
+
<tr><td>balanced <i>(default)</i></td><td>16,384</td><td>2.79 GB</td><td>5.8</td><td>2.09</td></tr>
|
| 32 |
+
<tr><td>context</td><td>32,768</td><td>3.46 GB</td><td>4.7</td><td>1.35</td></tr>
|
| 33 |
+
</table></div>
|
| 34 |
+
|
| 35 |
+
<p>Maximising context returns 38 % of the tokens per gigabyte of the efficient point, and costs 38 % of the throughput to get there. So the player picks on that frontier instead of maximising any one axis, and it states what it rejected and why.</p>
|
| 36 |
+
|
| 37 |
+
<p><b>And the mixture-of-experts asymmetry, which is the whole argument in two rows:</b> memory scales with <i>total</i> parameters, speed scales with <i>active</i> ones. On the same mid-range phone, a dense 35B holds 21 GB and runs at 0.7 tok/s; an MoE 35B-A3B holds the same 21 GB and runs at <b>6.5 tok/s</b> β nine times the throughput at identical memory cost. Quantizing the KV cache turns out to buy speed as well as memory, and the gain grows with context: +12 % at 4k, <b>+49 % at 32k</b>.</p>
|
| 38 |
+
|
| 39 |
+
<p>Every number there is a <b>model, not a benchmark</b>, and says so β to be replaced by measured telemetry the moment a real device reports one. The specification is <a href="https://github.com/minaiml/.github/blob/main/PLAYER.md" target="_blank" rel="noopener">PLAYER.md</a>; the reasoning that led to it is <a href="https://github.com/minaiml/.github/blob/main/HYPOTHESIS.md" target="_blank" rel="noopener">HYPOTHESIS.md</a>.</p>
|
| 40 |
+
|
| 41 |
<p><b>Smart phones, plural.</b> A phone at 11 tok/s is not a terminal for somebody else's data centre β it is a <b>node</b>. That reframes the problem: not "how large a model fits on this device", but "what does a mesh of small devices know together". The catalogue already carries the cluster layer β <a href="https://github.com/minaiml/exo" target="_blank" rel="noopener">exo</a> builds an AI cluster from everyday devices, <a href="https://github.com/minaiml/distributed-llama" target="_blank" rel="noopener">distributed-llama</a> splits one model across machines on a LAN, <a href="https://github.com/minaiml/petals" target="_blank" rel="noopener">petals</a> does it over a swarm.</p>
|
| 42 |
|
| 43 |
<p><b>The floor is two processors.</b> <a href="https://huggingface.co/spaces/PYTHAI/mindX" target="_blank" rel="noopener">mindX</a> is the existence proof, and it is deliberately unglamorous: <b>2 CPU cores, 7.8 GB of RAM, no GPU</b>, self-throttled to a third of the processor. On that it trains <i>its own weights</i> from its own memory β dreams become a corpus, the corpus trains a 135M actor, and a proof-of-recall gate decides whether the result is allowed to exist. It usually isn't: generation 39 is the newest the gate accepted, and every generation after it was refused. <b>A gate that never refuses is not a gate.</b></p>
|
index.html
CHANGED
|
@@ -42,6 +42,23 @@ td:first-child { white-space: nowrap; }
|
|
| 42 |
|
| 43 |
<p>The slowest row is ours, and it stays: a 135-million-parameter dense model runs three hundred times slower than a 397-billion-parameter sparse one. <b>Sparsity, not size, decides what a small machine can run.</b></p>
|
| 44 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 45 |
<p><b>Smart phones, plural.</b> A phone at 11 tok/s is not a terminal for somebody else's data centre β it is a <b>node</b>. That reframes the problem: not "how large a model fits on this device", but "what does a mesh of small devices know together". The catalogue already carries the cluster layer β <a href="https://github.com/minaiml/exo" target="_blank" rel="noopener">exo</a> builds an AI cluster from everyday devices, <a href="https://github.com/minaiml/distributed-llama" target="_blank" rel="noopener">distributed-llama</a> splits one model across machines on a LAN, <a href="https://github.com/minaiml/petals" target="_blank" rel="noopener">petals</a> does it over a swarm.</p>
|
| 46 |
|
| 47 |
<p><b>The floor is two processors.</b> <a href="https://huggingface.co/spaces/PYTHAI/mindX" target="_blank" rel="noopener">mindX</a> is the existence proof, and it is deliberately unglamorous: <b>2 CPU cores, 7.8 GB of RAM, no GPU</b>, self-throttled to a third of the processor. On that it trains <i>its own weights</i> from its own memory β dreams become a corpus, the corpus trains a 135M actor, and a proof-of-recall gate decides whether the result is allowed to exist. It usually isn't: generation 39 is the newest the gate accepted, and every generation after it was refused. <b>A gate that never refuses is not a gate.</b></p>
|
|
|
|
| 42 |
|
| 43 |
<p>The slowest row is ours, and it stays: a 135-million-parameter dense model runs three hundred times slower than a 397-billion-parameter sparse one. <b>Sparsity, not size, decides what a small machine can run.</b></p>
|
| 44 |
|
| 45 |
+
<p><b>BROBOT β the build.</b> <a href="https://github.com/minaiml/brobot" target="_blank" rel="noopener">minaiml/brobot</a> is the model player itself, built from PocketPal AI (MIT, React Native + llama.rn). Its <code>src/handheld/</code> module is the device side, and what it has found so far is the interesting part.</p>
|
| 46 |
+
|
| 47 |
+
<p><b>RAM is effort.</b> Three things compete for it β weights, KV cache, prefill batch β and the KV cache is charged <i>twice</i>: once in memory, and again in bandwidth on every single token. So the configuration that fits the most context is reliably <b>not</b> the one that produces the most tokens.</p>
|
| 48 |
+
|
| 49 |
+
<div class="scroll"><table>
|
| 50 |
+
<tr><th align="left">strategy</th><th align="left">context</th><th align="left">RAM</th><th align="left">tok/s</th><th align="left">tok/s per GB</th></tr>
|
| 51 |
+
<tr><td>speed</td><td>1,024</td><td>2.17 GB</td><td>7.6</td><td><b>3.51</b></td></tr>
|
| 52 |
+
<tr><td>balanced <i>(default)</i></td><td>16,384</td><td>2.79 GB</td><td>5.8</td><td>2.09</td></tr>
|
| 53 |
+
<tr><td>context</td><td>32,768</td><td>3.46 GB</td><td>4.7</td><td>1.35</td></tr>
|
| 54 |
+
</table></div>
|
| 55 |
+
|
| 56 |
+
<p>Maximising context returns 38 % of the tokens per gigabyte of the efficient point, and costs 38 % of the throughput to get there. So the player picks on that frontier instead of maximising any one axis, and it states what it rejected and why.</p>
|
| 57 |
+
|
| 58 |
+
<p><b>And the mixture-of-experts asymmetry, which is the whole argument in two rows:</b> memory scales with <i>total</i> parameters, speed scales with <i>active</i> ones. On the same mid-range phone, a dense 35B holds 21 GB and runs at 0.7 tok/s; an MoE 35B-A3B holds the same 21 GB and runs at <b>6.5 tok/s</b> β nine times the throughput at identical memory cost. Quantizing the KV cache turns out to buy speed as well as memory, and the gain grows with context: +12 % at 4k, <b>+49 % at 32k</b>.</p>
|
| 59 |
+
|
| 60 |
+
<p>Every number there is a <b>model, not a benchmark</b>, and says so β to be replaced by measured telemetry the moment a real device reports one. The specification is <a href="https://github.com/minaiml/.github/blob/main/PLAYER.md" target="_blank" rel="noopener">PLAYER.md</a>; the reasoning that led to it is <a href="https://github.com/minaiml/.github/blob/main/HYPOTHESIS.md" target="_blank" rel="noopener">HYPOTHESIS.md</a>.</p>
|
| 61 |
+
|
| 62 |
<p><b>Smart phones, plural.</b> A phone at 11 tok/s is not a terminal for somebody else's data centre β it is a <b>node</b>. That reframes the problem: not "how large a model fits on this device", but "what does a mesh of small devices know together". The catalogue already carries the cluster layer β <a href="https://github.com/minaiml/exo" target="_blank" rel="noopener">exo</a> builds an AI cluster from everyday devices, <a href="https://github.com/minaiml/distributed-llama" target="_blank" rel="noopener">distributed-llama</a> splits one model across machines on a LAN, <a href="https://github.com/minaiml/petals" target="_blank" rel="noopener">petals</a> does it over a swarm.</p>
|
| 63 |
|
| 64 |
<p><b>The floor is two processors.</b> <a href="https://huggingface.co/spaces/PYTHAI/mindX" target="_blank" rel="noopener">mindX</a> is the existence proof, and it is deliberately unglamorous: <b>2 CPU cores, 7.8 GB of RAM, no GPU</b>, self-throttled to a third of the processor. On that it trains <i>its own weights</i> from its own memory β dreams become a corpus, the corpus trains a 135M actor, and a proof-of-recall gate decides whether the result is allowed to exist. It usually isn't: generation 39 is the newest the gate accepted, and every generation after it was refused. <b>A gate that never refuses is not a gate.</b></p>
|