0.2.1: band-coordinate law fixed (+invariant), dispatch-bank/cond classification fixed, schema v1.1 usage card + SCHEMA.md; code now canonical at github.com/AbstractEyes/amoe-lora
33e89d6 verified | license: apache-2.0 | |
| tags: | |
| - adapters | |
| - mixture-of-experts | |
| - aleph | |
| - diffusion | |
| # amoe-lora β aleph mixture-of-experts adapters | |
| Train, **attach**, align, **detach** small aleph-addressed adapters on | |
| a frozen trunk β with the honesty diagnostics that found this | |
| architecture's real failure modes built in as first-class API. | |
| Productized from the geolip-aleph research lines | |
| ([LM research record](https://huggingface.co/AbstractPhil/geolip-aleph-qwen-3.5-0.8b-instruct) Β· | |
| [diffusion research record](https://huggingface.co/AbstractPhil/geolip-aleph-diffusion) Β· | |
| [working caption adapter](https://huggingface.co/AbstractPhil/qwen3.5-0.8b-relay-caption)). | |
| "LoRA-style" refers to the attach/detach usage pattern, not the math: | |
| these are 16-slot patch heads reading the residual stream through a | |
| closed-form sinh/cosh address over a 64-atom SΒ³ codebook (~261k | |
| params/block at d=1024). | |
| **Status: 0.2 β working-state framework.** The runtime verbs (attach / | |
| toggle / detach) and checkpoint I/O are implemented and invariant- | |
| tested (CPU CI, no downloads), now on BOTH substrate families: language | |
| trunks (`amoe`) and diffusion denoisers (`amoe.diffusion` β SD1.5-class | |
| UNets, SDXL, Cosmos-Predict2/Anima DiT). 0.2 also ends the safetensors | |
| non-goal: anchors save/load `.safetensors` with a ComfyUI-ready key | |
| layout. The train recipes are reference-grade transplants of the | |
| certified campaign recipes β runnable, single-GPU-verified, not yet | |
| optimized or deep-tested. See *Maturity* below. | |
| ## Install | |
| ``` | |
| pip install git+https://github.com/AbstractEyes/amoe-lora # core | |
| pip install "amoe-lora[diffusion] @ git+https://github.com/AbstractEyes/amoe-lora" | |
| ``` | |
| or from a checkout: `pip install -e .`, extras `.[hf]` (language trunks) | |
| and `.[diffusion]` (diffusers + safetensors). torch is a dependency, but | |
| install the CUDA build that matches your machine first β a blind | |
| `pip install torch` can replace a working one. | |
| **Code lives on [GitHub](https://github.com/AbstractEyes/amoe-lora)** | |
| (canonical, CI-guarded); the Hugging Face repo mirrors it as the card. | |
| The adapter file format is documented in [SCHEMA.md](SCHEMA.md); trained | |
| adapters live in | |
| [aleph-diffusion-adapters](https://huggingface.co/AbstractPhil/aleph-diffusion-adapters) | |
| and load into ComfyUI via | |
| [comfyui-geolip-amoe-lora](https://github.com/AbstractEyes/comfyui-geolip-amoe-lora). | |
| ## The five verbs | |
| ```python | |
| import amoe | |
| # TRAIN an anchor (reference recipe: frozen trunk, pure Adam, fp32) | |
| ck = amoe.train(model, rows, amoe.TrainConfig(name="caption"), | |
| tokenizer=tok) | |
| ck.save("caption.anchor.pt") | |
| # ATTACH (single, always-on) β adapters follow each block's device, | |
| # so device_map="auto" sharded loading works unchanged | |
| h = amoe.attach(model, "caption.anchor.pt") | |
| # ALIGN a dispatch over frozen anchors (keys-only training, | |
| # starvation safeguards on by default) | |
| disp = amoe.align(model, ["arith.anchor.pt", "algebra.anchor.pt"], | |
| streams, tokenizer=tok) | |
| disp.save("math.dispatch.pt") | |
| # TOGGLE at runtime (masking never renormalizes β the damping law) | |
| h = amoe.attach(model, ["arith.anchor.pt", "algebra.anchor.pt"], | |
| dispatch="math.dispatch.pt") | |
| with h.only("algebra"): | |
| out = model.generate(**enc) | |
| print(h.usage()) | |
| # DETACH β verified BIT-EXACT against a pre-attach fingerprint, | |
| # or it raises | |
| base = h.detach() | |
| ``` | |
| ## The diagnostics are the point | |
| The research line's biggest finding is that these adapters have two | |
| regimes, and **the dispatch only contains one of them**: specialize- | |
| regime anchors damp cleanly off-domain; blend-regime anchors escape | |
| damping, fire at full amplitude on unrelated text, tax perplexity, and | |
| measurably trample chain-of-thought. You cannot see the difference | |
| from training loss. You can see it in one call: | |
| ```python | |
| from amoe.diagnostics import diagnose | |
| report = diagnose(h, tok, domain_texts=my_domain_prompts) | |
| # warns per anchor when on-domain/neutral amplitude ratio <= 1.5 | |
| ``` | |
| `amoe.train` also runs a question-space guard on your dataset (an | |
| adapter trained on more draws than the space holds distinct questions | |
| memorizes the space and posts fake generalization β measured in the | |
| research line, twice). | |
| ## Diffusion (new in 0.2) | |
| The same verbs on a frozen denoiser β the productized r2 campaign | |
| ([geolip-aleph-diffusion](https://huggingface.co/AbstractPhil/geolip-aleph-diffusion): | |
| relay certified relay-favorable 3-for-3 substrates, the multiband | |
| mechanism with surgical band lesions, the step-gated controller, and | |
| the **conditioning law**). | |
| ```python | |
| # pip install amoe-lora[diffusion] | |
| import torch, amoe.diffusion as ad | |
| from diffusers import StableDiffusionPipeline | |
| from huggingface_hub import hf_hub_download | |
| pipe = StableDiffusionPipeline.from_pretrained( | |
| "stable-diffusion-v1-5/stable-diffusion-v1-5", | |
| torch_dtype=torch.float32).to("cuda") | |
| h = ad.attach(pipe.unet, hf_hub_download( | |
| "AbstractPhil/aleph-diffusion-adapters", "sd15/mb3_s0.safetensors")) | |
| img = ad.sample(pipe, h, "a lighthouse at dusk", seed=7) # step-gated | |
| with h.lesion_band(2): # generate without the HIGH band | |
| img_no_high = ad.sample(pipe, h, "a lighthouse at dusk", seed=7) | |
| base = h.detach() # bit-exact or raises | |
| ``` | |
| Training on a folder of images is five lines: | |
| ```python | |
| cache = ad.data.build_cache("photos/", pipe, captions="photos/captions.txt") | |
| cfg = ad.TrainConfig(name="mystyle", objective="flow", | |
| adapter="multiband3", blob=False) | |
| ck = ad.train(pipe.unet, cache, cfg) | |
| ck.save("mystyle.anchor.safetensors") | |
| ``` | |
| Three certified deviations from the LM defaults, each encoded as law | |
| with its receipt (`amoe.diffusion.laws`): | |
| - **Dtype law**: adapters attach at the DECLARED trunk dtype (bf16 | |
| relays on a bf16 DiT), never a sniffed one β first-param sniffing can | |
| read a still-meta fp32 tensor. Judged gauges stay fp32. | |
| - **`align()` is a grounded negative**: comparative routing on | |
| diffusion was falsified at 2 seeds (state+sigma keys route nothing; | |
| address-as-key dies against the repeated-key null in both raw and | |
| M-hat forms). `ad.align()` raises with the record. The certified | |
| alternative is STRUCTURAL banding β cosine crossfade windows on the | |
| sigma axis (`adapter="multiband3"`), whose band lesions are surgical | |
| (own-band damage 50β200Γ cross-band, 2 seeds). | |
| - **Conditioning law**: blob/structural supervision pays where x0 | |
| recovery is linear (flow: `x0 = x_t β ΟΒ·v`; ~125β200Γ the eps | |
| effect) and is inert on eps β `blob=True` with `objective="eps"` | |
| refuses unless forced. | |
| ### safetensors + ComfyUI | |
| `ck.save("x.safetensors")` writes the canonical flat layout | |
| (`blocks.{site}.{param}`) with the full meta as safetensors metadata; | |
| `amoe-convert path.pt --substrate sd15` converts every legacy campaign | |
| shape with bitwise verification. A `comfyui-amoe` custom-node package | |
| (loader / attach / band-toggle / detach, with step gating installed as | |
| a pre-forward hook so ANY stock KSampler becomes step-gated) is the | |
| next-turn deliverable; the node consumes the canonical layout and | |
| asserts the anchor's site-count + width signature before patching. | |
| ## House laws (encoded, not optional) | |
| Pure Adam only (`laws.make_optimizer`); dense signed dispatch with an | |
| all-anchor damped denominator β no top-k, no load-balancing, masking | |
| never renormalizes; zero-init output heads; fp32/TF32-off default; | |
| checkpoints carry the codebook `home` buffer. Each law's receipt is in | |
| the research record. | |
| ## Multi-GPU | |
| - **Inference**: works today with `device_map="auto"` β adapters | |
| follow their block's device. | |
| - **Training**: the trainer is DDP-aware (rank-sharded sampling, | |
| `find_unused_parameters=False`; launch with `torchrun`). Correct by | |
| construction; multi-GPU smoke is **deferred** (single-GPU-verified). | |
| - **Diffusion β the declared split (the standard paradigm)**: native | |
| `amoe.diffusion.train` = single-GPU + DDP at framework level; | |
| the PRODUCTION multi-GPU path is the | |
| [diffusion-pipe fork](https://github.com/AbstractEyes/diffusion-pipe) | |
| (DeepSpeed pipeline engine, aleph relays baked in, proven end-to-end | |
| on the Anima 2B DiT β r2 exp004). Use the fork when you have real | |
| scale; use the native trainer for the certified single-card recipes. | |
| - **FSDP / tensor parallel**: not implemented; see | |
| `docs/distributed.md` for why and the sketch. | |
| ## Maturity | |
| | area | state | | |
| |---|---| | |
| | core math (address/adapter/dispatch) | ported verbatim from certified code; parity by construction | | |
| | attach / toggle / detach | implemented, invariant-tested (toggle law + bit-exact detach, CPU CI) | | |
| | checkpoint I/O + legacy import | implemented; round-trip verified against the shipped campaign checkpoints | | |
| | train / align | reference-grade (the certified campaign recipes, transplanted); single-GPU | | |
| | DDP | implemented, untested on >1 GPU | | |
| | diffusion core (relay/multiband/windows) | ported verbatim from the certified r2 beds; invariant-tested | | |
| | diffusion attach / lesions / detach | implemented, invariant-tested incl. dtype law (CPU CI) | | |
| | diffusion train (eps/flow/blob/roles) | reference-grade transplant; single-GPU-verified recipes | | |
| | StepGatedSampler | eps/DDIM = the exp010-proven path; flow/Euler = same warp as the beds | | |
| | safetensors I/O + amoe-convert | implemented in 0.2 (bitwise-verified round trips); ComfyUI node = next turn | | |
| | SDXL binding | enumeration implemented; site count PINNED AT FIRST REAL RUN (never guessed) | | |
| | FSDP/TP, token-level gating, streaming data | documented non-goals | | |
| ## Loading the campaign's shipped artifacts | |
| ```python | |
| from amoe.io.checkpoint import load_anchor, import_legacy_keys | |
| ck = load_anchor(hf_hub_download( | |
| "AbstractPhil/geolip-aleph-qwen-3.5-0.8b-instruct", | |
| "exp013_experts/ckpt/v35e13_algebra_steps_s0.pt")) # legacy OK | |
| ``` | |
| ## Lineage | |
| Architecture and every default in this package trace to the | |
| [geolip-aleph-qwen-3.5-0.8b-instruct](https://huggingface.co/AbstractPhil/geolip-aleph-qwen-3.5-0.8b-instruct) | |
| campaign (19 experiment packages, raw ledgers, adversarial audits, one | |
| published self-retraction plus a corrected overclaim), its | |
| [Qwen2.5 predecessor](https://huggingface.co/AbstractPhil/geolip-aleph-qwen), | |
| and β for the 0.2 diffusion subsystem β the | |
| [geolip-aleph-diffusion](https://huggingface.co/AbstractPhil/geolip-aleph-diffusion) | |
| campaign (16 experiment packages, 2-seed program, the conditioning law). | |