Spaces:
Running
Running
Rewrite org README in first person; cover Train, Infer, genomics, demo
Browse files
README.md
CHANGED
|
@@ -7,128 +7,227 @@ sdk: static
|
|
| 7 |
pinned: false
|
| 8 |
---
|
| 9 |
|
| 10 |
-
#
|
| 11 |
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
everything.
|
| 15 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 16 |
|
| 17 |
---
|
| 18 |
|
| 19 |
-
##
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 20 |
|
| 21 |
-
|
| 22 |
-
each unit handling what it's good at and passing the rest along. That's exactly how our systems work:
|
| 23 |
|
| 24 |
-
-
|
| 25 |
-
excellent at its own data and (deliberately) surprised by everything else.
|
| 26 |
-
- **The router is the connector between links.** When an input arrives, every specialist reports how
|
| 27 |
-
*surprised* it is (bits/base) and exposes its hidden state, and a tiny learned router hands the work
|
| 28 |
-
to the link that's most at home with it.
|
| 29 |
-
- **The chain grows link by link.** Because the specialists are trained *separately*, you can chain a
|
| 30 |
-
new domain on without retraining the others — add a link, extend the router, done.
|
| 31 |
-
- **One link runs per query.** Only the routed specialist computes, so a chain of four ~74M experts
|
| 32 |
-
costs ~74M of compute per token — roughly **7× cheaper** than a 500M monolith of comparable scope.
|
| 33 |
|
| 34 |
-
|
| 35 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 36 |
|
| 37 |
---
|
| 38 |
|
| 39 |
-
##
|
|
|
|
|
|
|
|
|
|
|
|
|
| 40 |
|
| 41 |
-
|
| 42 |
|
| 43 |
-
|
| 44 |
-
|
| 45 |
-
|
| 46 |
-
|
| 47 |
-
|
| 48 |
-
|
|
|
|
| 49 |
|
| 50 |
-
|
| 51 |
-
|
| 52 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 53 |
|
| 54 |
---
|
| 55 |
|
| 56 |
-
##
|
| 57 |
|
| 58 |
-
|
| 59 |
-
under 500M**), each distilled per-domain from **[Carbon-500M](https://huggingface.co/HuggingFaceBio/Carbon-500M)**
|
| 60 |
-
behind a learned router. Carbon's domain mixture (50% eukaryotic / 25% mRNA / 10% splice / 15% bacterial)
|
| 61 |
-
maps one-to-one onto our four specialists.
|
| 62 |
|
| 63 |
-
|
| 64 |
|
| 65 |
-
|
| 66 |
-
taking mean per-base log-prob (`score_sequence`). Our implementation reproduces Carbon's `compute_bp_probs`
|
| 67 |
-
to **6e-08**, so these are apples-to-apples.
|
| 68 |
|
| 69 |
-
| |
|
| 70 |
-
|---|---|---|
|
| 71 |
-
|
|
| 72 |
-
|
|
| 73 |
-
|
|
| 74 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 75 |
| Active params / query | ~74M (one specialist) | 500M |
|
| 76 |
|
| 77 |
-
|
| 78 |
-
concentrated in mRNA and bacterial DNA (Carbon's strongest domains); eukaryote and splice are closest.
|
| 79 |
-
Note Carbon-500M is itself a *draft model*, explicitly "not designed to be competitive on downstream
|
| 80 |
-
benchmarks" — so it's a fair, achievable target, not the 3B/8B flagships.
|
| 81 |
|
| 82 |
-
|
| 83 |
-
- 🎮 **Live demo:** [`Daisychain-Genomics-Demo`](https://huggingface.co/spaces/DaisyChainAI/Daisychain-Genomics-Demo) — paste DNA, watch the chain light up specialist-by-specialist and route in real time, then generate with Carbon's base-pair (FNS) decoder.
|
| 84 |
|
| 85 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 86 |
|
| 87 |
-
|
| 88 |
-
|
| 89 |
-
|
| 90 |
-
|
| 91 |
-
|
| 92 |
-
|
| 93 |
-
|
| 94 |
-
|
| 95 |
-
|
| 96 |
-
|
| 97 |
-
|
| 98 |
-
|
| 99 |
-
|
| 100 |
-
|
| 101 |
-
|
| 102 |
-
|
| 103 |
-
|
| 104 |
-
"splice beats Carbon." On Carbon's actual metric the gap is **+0.089 and no domain is ahead.** We re-baselined
|
| 105 |
-
the entire project history on the real metric.
|
| 106 |
-
- **We measured sequence recovery with the wrong decoder** (6-mer argmax) instead of Carbon's **FNS base-level
|
| 107 |
-
argmax**. Re-measuring with their decoder changed the numbers (and actually *raised* our bacteria recovery).
|
| 108 |
-
- **An early eval had a frame-alignment bug** — feeding a context length not divisible by 6 knocked our 6-mer
|
| 109 |
-
model out of phase and produced an impossible near-zero recovery. Fixed by aligning context to the 6-mer grid.
|
| 110 |
-
- **Decoding took several wrong turns** before matching Carbon: greedy with no repetition control (collapsed to
|
| 111 |
-
homopolymers), then top-k sampling (trapped on low-complexity GC/AT loops), before adopting Carbon's actual
|
| 112 |
-
**base-pair FNS decoder** (top-p at the 6-mer level → per-base selection).
|
| 113 |
-
- **One training round improved the proxy while regressing the real metric** (an early mRNA distill-only pass)
|
| 114 |
-
— invisible on 6-mer CE, obvious on base-pair. A later base+distill round fixed it.
|
| 115 |
-
|
| 116 |
-
**The lesson:** *measure the way the baseline measures, or you aren't comparing anything.* A stricter, honest
|
| 117 |
-
evaluation didn't sink the project — it pointed to exactly which domains to attack and which "wins" were illusions.
|
| 118 |
-
|
| 119 |
-
More links on the chain — and more chains — coming. 🌼
|
| 120 |
|
| 121 |
## Citation
|
| 122 |
|
| 123 |
-
**
|
| 124 |
|
| 125 |
```bibtex
|
| 126 |
@misc{byrne2026daisychain,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 127 |
title = {DaisyChain Genomics: A Modular Mixture of Per-Domain Distilled Genomic Specialists},
|
| 128 |
-
author = {Byrne, Dean},
|
| 129 |
year = {2026},
|
| 130 |
howpublished = {\url{https://huggingface.co/DaisyChainAI/daisychain-genomics}},
|
| 131 |
-
note = {
|
| 132 |
-
from Carbon-500M behind a learned router}
|
| 133 |
}
|
| 134 |
```
|
|
|
|
|
|
|
|
|
| 7 |
pinned: false
|
| 8 |
---
|
| 9 |
|
| 10 |
+
# DaisyChainAI
|
| 11 |
|
| 12 |
+
I am Dean Byrne (Quazim0t0). This org is the public home for DaisyChain: spare-machine training, layer-sharded inference, and a modular genomics mix of small specialists.
|
| 13 |
+
|
| 14 |
+
I do not train one giant model to do everything. I chain small, sharp pieces. For DNA that means specialists behind a router. For training and inference that means old / spare machines holding a shard of the work, not a fake supercomputer.
|
| 15 |
+
|
| 16 |
+
**License on the code repos:** MIT (Train, Infer). Genomics weights: Apache-2.0.
|
| 17 |
+
|
| 18 |
+
What is on this org:
|
| 19 |
+
|
| 20 |
+
- [DaisyChain-Train](https://huggingface.co/DaisyChainAI/DaisyChain-Train) - old-hardware data-parallel training
|
| 21 |
+
- [DaisyChain-Infer](https://huggingface.co/DaisyChainAI/DaisyChain-Infer) - split one model across devices at inference
|
| 22 |
+
- [daisychain-genomics](https://huggingface.co/DaisyChainAI/daisychain-genomics) - four ~74M DNA/RNA specialists + router
|
| 23 |
+
- [Daisychain-Genomics-Demo](https://huggingface.co/spaces/DaisyChainAI/Daisychain-Genomics-Demo) - live DNA routing Space
|
| 24 |
+
|
| 25 |
+
Related Spaces on my user account (not this org): [DaisyChain-Web](https://huggingface.co/spaces/Quazim0t0/DaisyChain-Web), [DaisyChain-Infer](https://huggingface.co/spaces/Quazim0t0/DaisyChain-Infer).
|
| 26 |
|
| 27 |
---
|
| 28 |
|
| 29 |
+
## DaisyChain-Train
|
| 30 |
+
|
| 31 |
+
https://huggingface.co/DaisyChainAI/DaisyChain-Train
|
| 32 |
+
|
| 33 |
+
I built this so spare / old machines can train a shared model. Compute runs through emulated GPU logic: verified INT8 units (GUDA-style) for multiply / requantize / ReLU. Machines without a modern GPU still do the work. Chain several and they train one model as a cluster. Docker or Python.
|
| 34 |
+
|
| 35 |
+
**Read this first.** It is for **small models on spare hardware**. It **pools compute, not memory**. The model must fit on one machine. Scaling is **sublinear**. It is not a substitute for a real GPU on large models. Envelope: [docs/LIMITS.md](https://huggingface.co/DaisyChainAI/DaisyChain-Train/blob/main/docs/LIMITS.md).
|
| 36 |
+
|
| 37 |
+
### Python cluster (`daisychain/`)
|
| 38 |
+
|
| 39 |
+
- Data-parallel across mixed machines. Each node trains its shard. Gradients combine into the exact full-batch gradient. Replicas stay bit-identical.
|
| 40 |
+
- Capacity-weighted sharding. Faster machines take a bigger share of the batch.
|
| 41 |
+
- `VerifiedLinear` runs every forward multiply / requantize / ReLU through the bundled trained units. Rank 0 prints cluster-wide unit-invocation counts.
|
| 42 |
+
- Bring your own `Task` (`build_model` / `sample` / `loss`) via `DAISY_TASK`. Template: `examples/my_task_template.py`.
|
| 43 |
+
- Plain-float alternative: same cluster, ordinary float math.
|
| 44 |
+
- Dashboard (`daisychain-dashboard`): readiness, P2P scan, pooled cores/RAM, per-node plan, live loss.
|
| 45 |
+
- SpikeWhale panel (`spikewhale_panel`, `localhost:8899`): sliders, any HF dataset you can access (default streamed FineWeb-Edu), start/stop, live loss.
|
| 46 |
+
- Docker demo: 3 nodes + dashboard in one command.
|
| 47 |
+
- Windows helper: `scripts\setup.bat`. Tailscale mesh guide in the repo.
|
| 48 |
+
|
| 49 |
+
### DaisyChain-Web (`web/`)
|
| 50 |
+
|
| 51 |
+
Zero-install browser nodes. Opening the page is joining. Same-network auto-group (Snapdrop-style, public IP). Private rooms: `?room=CODE` with host approval. Full WebRTC mesh: gradients peer-to-peer. Server only signals and serves files. It never sees weights or gradients.
|
| 52 |
+
|
| 53 |
+
Leader-follower: whoever hits Start sets width / sequence / batch-per-device / steps / LR for the group. Mid-run join gets weights + step. Bit-identical replicas: seeded init, roster-order gradient averaging, deterministic Adam, per-step weight hashes. Sync guard stops a fork. Gradient repair: missing roster grad re-requested from the leader (8 steps retained). Cross-device kernel probe every step. FineWeb-Edu 10BT streamed off the HF CDN (pure-JS `hyparquet`). Checkpoints: `.pt` download, upload -> broadcast, validated before accept. No WebGPU: identical units on CPU. Same bits, so CPU and GPU co-train. No plain-float path. Gradients/checkpoints chunked at 48 KB.
|
| 54 |
+
|
| 55 |
+
Live demo: https://huggingface.co/spaces/Quazim0t0/DaisyChain-Web
|
| 56 |
+
|
| 57 |
+
### Verification (web + Python)
|
| 58 |
|
| 59 |
+
Exact init gates on every kernel, every device, every boot. IEEE-754 binary32 oracle in BigInt (rejects the old mirror on 34% of inputs). Metamorphic properties **4/4** on an external bug corpus. RDNA2 ISA audit: bit-pattern compares (-0-aware); FMA contraction of quantize is floor-invisible. Stratified cell audit: last-column bug, uniform **5/300**, stratified **300/300**. Dirty-buffer gate poisons the pool before re-sweep. Self-corpus scores the instruments against my own bugs.
|
|
|
|
| 60 |
|
| 61 |
+
Latest Python/web reductions (30 September 2026): non-finite row max refused; bad-length / NaN grads halt with `GradientError`; int8 GEMM K > 131,071 refused (`MAX_INT32_K`); cluster loss is capacity-weighted (`1.418` old mean vs true **0.959**); NaN grads refused before `opt.step()`; empty `CUDA_VISIBLE_DEVICES` falls back to CPU. Valid inputs stay bit-identical (`replica_diff 0.0`).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 62 |
|
| 63 |
+
Requant now round-half-up: old floor mean error **-0.4981 LSB**, now **+0.0020 LSB**. GEMM memory at panel max 512x768x768: **2426.9 MB -> 77.2 MB**. Neural backend 64x96x96: **519.2 MB -> 57.5 MB**. Elementwise units: 407 MB -> **2 MB**, LUT build RSS 277 MB -> **1 MB**. Multiply LUT certified over all 65536 entries (0.5 ms).
|
| 64 |
+
|
| 65 |
+
Quick start:
|
| 66 |
+
|
| 67 |
+
```bash
|
| 68 |
+
docker compose -f docker/docker-compose.yml up --build
|
| 69 |
+
# http://localhost:8080
|
| 70 |
+
```
|
| 71 |
+
|
| 72 |
+
Python: `pip install -e .` then `daisychain-train` with `MASTER_ADDR` / `WORLD_SIZE` / `RANK` / `GLOO_SOCKET_IFNAME`. SpikeWhale panel: `python -m daisychain.spikewhale_panel` (`localhost:8899`). Web: `cd web && npm install && node server.js` (`localhost:8787`).
|
| 73 |
+
|
| 74 |
+
Python >= 3.9, PyTorch >= 2.0. Multi-node is reliable on Linux/macOS. On Windows use Docker/WSL.
|
| 75 |
|
| 76 |
---
|
| 77 |
|
| 78 |
+
## DaisyChain-Infer
|
| 79 |
+
|
| 80 |
+
https://huggingface.co/DaisyChainAI/DaisyChain-Infer
|
| 81 |
+
|
| 82 |
+
Live Space: https://huggingface.co/spaces/Quazim0t0/DaisyChain-Infer
|
| 83 |
|
| 84 |
+
Train pools **compute, not memory**. Infer is where I lift that. A forward pass is a chain: layer `l` needs layer `l-1`'s **output**, never its **weights**. Layers live on different machines. The activation travels. Each device fetches only its own layers from the Hub via safetensors byte ranges. No device holds the whole model. Not even the one driving the run.
|
| 85 |
|
| 86 |
+
| | DaisyChain-Train | DaisyChain-Infer |
|
| 87 |
+
| --- | --- | --- |
|
| 88 |
+
| What is split | the **batch** | the **model** |
|
| 89 |
+
| What crosses the wire | gradients (whole-model sized, every step) | hidden states (`T x hidden` floats, per hop) |
|
| 90 |
+
| Every device holds | the entire model | its own layers only |
|
| 91 |
+
| Pools | compute | **memory** |
|
| 92 |
+
| More devices means | more throughput | a **bigger model fits** |
|
| 93 |
|
| 94 |
+
SmolLM-135M across three devices: each downloads and holds 135-243 MB of a 513 MB model. Activation between them is tens of KB.
|
| 95 |
+
|
| 96 |
+
It is a **ring, not a line**. Weight tying: `lm_head` is the embedding table, needed at both ends. Last stage returns hidden state to the head, which owns the embedding once. A middle stage never sees the vocabulary. It passes floats it cannot interpret.
|
| 97 |
+
|
| 98 |
+
Architectures it will run (refused by name otherwise): Llama-style (Llama, Mistral, Qwen2/2.5, SmolLM, TinyLlama) and GPT-2-style. Verified end to end: `HuggingFaceTB/SmolLM-135M`, `openai-community/gpt2`, `Qwen/Qwen2.5-0.5B`. Byte-level BPE only. SentencePiece / WordPiece rejected. Weight layout and bias presence decided by the weight file, not a guess in `config.json`.
|
| 99 |
+
|
| 100 |
+
Public models need no token. Local gated/private: read token in memory for that tab only, never sent to another device. Hosted Space uses Sign in with Hugging Face. No paste-a-token box.
|
| 101 |
+
|
| 102 |
+
Trainer kernel gates carry over. Pipeline has no replica to compare. Four closers: kernel probe before layers are assigned; activation integrity hashes + model fingerprint; structural plan covering each layer exactly once; differential check (head re-runs the prompt locally, compares token ids). `test_pipeline.js`: split changes **no bit**. SmolLM-135M 30 layers `[10,10,10]`, `[1,14,15]`, `[0,15,15]`, `[5,5,5,5,5,5]` matched single-device token sequences. 47 checks: `npm test`.
|
| 103 |
+
|
| 104 |
+
Honest limits: latency not bandwidth (tokens/sec *falls* as you add stages); no KV cache; f32 in memory (4 bytes/param); head is a single point of failure; no authentication of activations; proof of concept.
|
| 105 |
+
|
| 106 |
+
```bash
|
| 107 |
+
npm install
|
| 108 |
+
npm start # http://localhost:8788
|
| 109 |
+
npm test # 47 checks
|
| 110 |
+
```
|
| 111 |
|
| 112 |
---
|
| 113 |
|
| 114 |
+
## DaisyChain Genomics
|
| 115 |
|
| 116 |
+
https://huggingface.co/DaisyChainAI/daisychain-genomics
|
|
|
|
|
|
|
|
|
|
| 117 |
|
| 118 |
+
Live demo: https://huggingface.co/spaces/DaisyChainAI/Daisychain-Genomics-Demo
|
| 119 |
|
| 120 |
+
A modular genomic mix: four dense ~74M DNA/RNA specialists (≈295M total, **under Carbon-500M**) behind a learned router. Each specialist is distilled per-domain from [Carbon-500M](https://huggingface.co/HuggingFaceBio/Carbon-500M). Carbon's mix (50% eukaryotic / 25% mRNA / 10% splice / 15% bacterial) maps one-to-one onto the four specialists. The model card says it stays gated until I am done with the base.
|
|
|
|
|
|
|
| 121 |
|
| 122 |
+
| Specialist | Domain | Params |
|
| 123 |
+
| --- | --- | --- |
|
| 124 |
+
| `eukaryote` | Eukaryotic genomic DNA | ~74M |
|
| 125 |
+
| `prokaryote` | Bacterial / prokaryotic DNA | ~74M |
|
| 126 |
+
| `mrna` | Mature mRNA (coding transcript) | ~74M |
|
| 127 |
+
| `mrna_splice` | Pre-mRNA / splice-site regions | ~74M |
|
| 128 |
+
|
| 129 |
+
The router reads each specialist's surprise (bits/base) plus a PCA of its hidden state, then picks the home domain. Held-out routing: **100.0%** (vs 87.5% argmin). Only one ~74M specialist runs per query. Inference is ~7x cheaper per token than the 500M monolith.
|
| 130 |
+
|
| 131 |
+
Each specialist: interleaved continued pretraining (next-token CE on its domain) and offline KD from Carbon-500M (soft-target + factorized per-nucleotide via Carbon's FNS branch). cBTM-style domain experts, iterated per expert.
|
| 132 |
+
|
| 133 |
+
### Where it stands (Carbon's own base-pair / FNS metric)
|
| 134 |
+
|
| 135 |
+
Likelihood is Carbon's `score_sequence` / `compute_bp_probs`, verified to **6e-08**. Mean Carbon **1.7870**.
|
| 136 |
+
|
| 137 |
+
| metric | DaisyChain | Carbon-500M |
|
| 138 |
+
| --- | --- | --- |
|
| 139 |
+
| Routing accuracy (held-out) | **100.0%** | - |
|
| 140 |
+
| Likelihood - bits/base, **base-pair (FNS)** (down) | **1.862** | **1.787** |
|
| 141 |
+
| seq-recovery eukaryote - FNS base-level (up) | 31.5% | 38.9% |
|
| 142 |
+
| seq-recovery bacteria - FNS base-level (up) | 40.9% | 54.1% |
|
| 143 |
| Active params / query | ~74M (one specialist) | 500M |
|
| 144 |
|
| 145 |
+
Honest standing: mean **1.8622 vs 1.7870 (+0.0752)**. Base-pair wins ~36/100. **No domain ahead.** Carbon-500M is a draft model, not the 3B/8B flagships. Recovery: Carbon's FNS base-level argmax (per-base accuracy, next-30bp, n=50, ctx=1536).
|
|
|
|
|
|
|
|
|
|
| 146 |
|
| 147 |
+
Progress log (full 4-specialist set re-scored each round; trailing = mean ours - mean Carbon):
|
|
|
|
| 148 |
|
| 149 |
+
| date | update | euk | prok | mrna | splice | mean | trailing |
|
| 150 |
+
| --- | --- | --- | --- | --- | --- | --- | --- |
|
| 151 |
+
| 2026-06-22 | baseline (round-1 distill + router) | 1.965 | 1.994 | 1.910 | 1.935 | 1.9510 | +0.1640 |
|
| 152 |
+
| 2026-06-23 | mrna 12k-distill | 1.965 | 1.994 | 1.927 | 1.935 | 1.9552 | +0.1682 |
|
| 153 |
+
| 2026-06-23 | prokaryote round 1 | 1.965 | 1.918 | 1.927 | 1.935 | 1.9363 | +0.1493 |
|
| 154 |
+
| 2026-06-24 | eukaryote | 1.928 | 1.918 | 1.927 | 1.935 | 1.9272 | +0.1403 |
|
| 155 |
+
| 2026-06-25 | mrna | 1.928 | 1.918 | 1.788 | 1.935 | 1.8924 | +0.1054 |
|
| 156 |
+
| 2026-06-25 | mrna_splice | 1.928 | 1.918 | 1.788 | 1.873 | 1.8768 | +0.0898 |
|
| 157 |
+
| 2026-06-26 | prokaryote round 2 | 1.928 | 1.914 | 1.788 | 1.873 | 1.8758 | +0.0889 |
|
| 158 |
+
| 2026-06-27 | eukaryote round 2 (routing 100%) | 1.924 | 1.914 | 1.788 | 1.873 | 1.8747 | +0.0878 |
|
| 159 |
+
| 2026-06-29 | Muon passes - mrna + prokaryote | 1.924 | 1.868 | 1.784 | 1.873 | **1.8622** | **+0.0752** |
|
| 160 |
+
|
| 161 |
+
The mrna 12k-distill round *worsened* base-pair likelihood (+0.1640 -> +0.1682) even though it improved 6-mer CE. Later base+distill mrna round fixed it. The soft 6-mer metric hid that.
|
| 162 |
+
|
| 163 |
+
Earlier 6-mer joint CE (softer proxy, kept for reference):
|
| 164 |
+
|
| 165 |
+
| date | update | mean DaisyChain (6-mer CE) | mean Carbon-500M (6-mer CE) | trailing |
|
| 166 |
+
| --- | --- | --- | --- | --- |
|
| 167 |
+
| 2026-06-22 | baseline (94.8% routing) | 1.8644 | 1.7502 | +0.1142 |
|
| 168 |
+
| 2026-06-23 | mrna 12k-distill (95.7%) | 1.8599 | 1.7502 | +0.1096 |
|
| 169 |
+
| 2026-06-23 | prokaryote round 1 (96.2%) | 1.8528 | 1.7502 | +0.1026 |
|
| 170 |
+
| 2026-06-24 | eukaryote (98.0%) | 1.8413 | 1.7502 | +0.0911 |
|
| 171 |
+
| 2026-06-25 | mrna (98.3%) | 1.8075 | 1.7502 | +0.0573 |
|
| 172 |
+
| 2026-06-25 | mrna_splice (99.8%) | 1.7959 | 1.7502 | +0.0457 |
|
| 173 |
+
| 2026-06-26 | prokaryote round 2 (99.8%) | 1.7929 | 1.7502 | +0.0427 |
|
| 174 |
+
|
| 175 |
+
### What worked / what I got wrong
|
| 176 |
+
|
| 177 |
+
Worked: 100% held-out routing; snapshot-then-pick-best distillation; re-fit the router after every specialist swap; FNS per-base distillation targets.
|
| 178 |
+
|
| 179 |
+
Wrong, then fixed: I reported 6-mer CE for days instead of Carbon's FNS (proxy said ~+0.043 and "splice beats Carbon"; real gap was +0.089 and no domain ahead); recovery with the wrong decoder; a frame-alignment bug (context not divisible by 6); decoding that collapsed to homopolymers then GC/AT loops before Carbon's FNS decoder; one mrna distill-only round that improved the proxy and regressed the real metric.
|
| 180 |
+
|
| 181 |
+
Lesson: measure the way the baseline measures, or you are not comparing anything.
|
| 182 |
+
|
| 183 |
+
### Demo Space
|
| 184 |
|
| 185 |
+
https://huggingface.co/spaces/DaisyChainAI/Daisychain-Genomics-Demo
|
| 186 |
+
|
| 187 |
+
Gradio 5.9.1, Python 3.12. Paste a DNA sequence. Watch specialists light up, router pick the home domain, optionally generate a continuation from that specialist. Same four specialists + `router2.pt`.
|
| 188 |
+
|
| 189 |
+
Usage:
|
| 190 |
+
|
| 191 |
+
```python
|
| 192 |
+
from daisychain import DaisyChain
|
| 193 |
+
dc = DaisyChain(root=".", device="cpu")
|
| 194 |
+
home, bits_per_base = dc.route("ACGTACGT...")
|
| 195 |
+
print(home, bits_per_base)
|
| 196 |
+
print(dc.generate(home, length=180))
|
| 197 |
+
```
|
| 198 |
+
|
| 199 |
+
Files: `daisychain.py`, `model.py` / `specialist_presets.py` / `spike_tokenizer.py` / `registry.py`, `tokenizer.json`, `<domain>/model.safetensors`, `router2.pt`.
|
| 200 |
+
|
| 201 |
+
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 202 |
|
| 203 |
## Citation
|
| 204 |
|
| 205 |
+
**Dean Byrne (Quazim0t0)** · 2026
|
| 206 |
|
| 207 |
```bibtex
|
| 208 |
@misc{byrne2026daisychain,
|
| 209 |
+
title = {DaisyChain-Train: An Old Hardware Training Pipeline},
|
| 210 |
+
author = {Byrne, Dean (Quazim0t0)},
|
| 211 |
+
year = {2026},
|
| 212 |
+
howpublished = {\url{https://huggingface.co/DaisyChainAI/DaisyChain-Train}},
|
| 213 |
+
note = {Chain spare/old machines into a data-parallel training cluster}
|
| 214 |
+
}
|
| 215 |
+
|
| 216 |
+
@misc{byrne2026daisychaininfer,
|
| 217 |
+
title = {DaisyChain-Infer: Layer-Sharded Peer-to-Peer Inference in the Browser},
|
| 218 |
+
author = {Byrne, Dean (Quazim0t0)},
|
| 219 |
+
year = {2026},
|
| 220 |
+
howpublished = {\url{https://huggingface.co/DaisyChainAI/DaisyChain-Infer}},
|
| 221 |
+
note = {Run one model across several devices; pools memory, not just compute}
|
| 222 |
+
}
|
| 223 |
+
|
| 224 |
+
@misc{byrne2026daisychaingenomics,
|
| 225 |
title = {DaisyChain Genomics: A Modular Mixture of Per-Domain Distilled Genomic Specialists},
|
| 226 |
+
author = {Byrne, Dean (Quazim0t0)},
|
| 227 |
year = {2026},
|
| 228 |
howpublished = {\url{https://huggingface.co/DaisyChainAI/daisychain-genomics}},
|
| 229 |
+
note = {Four ~74M DNA/RNA specialists distilled per-domain from Carbon-500M behind a learned router}
|
|
|
|
| 230 |
}
|
| 231 |
```
|
| 232 |
+
|
| 233 |
+
Genomics also stands on Carbon-500M (HuggingFaceBio, 2025), Branch-Train-Merge (Li et al., 2022), cBTM (Gururangan et al., 2023), BTX (Sukhbaatar et al., 2024), Distilling the Knowledge in a Neural Network (Hinton et al., 2015), Born-Again Neural Networks (Furlanello et al., 2018), and Don't Stop Pretraining (Gururangan et al., 2020). Full BibTeX is on the genomics model card.
|