{
  "schema_version": "1.0",
  "url": "https://cerinamroth.com/research/",
  "title": "Research Notes & GPU Benchmarks — Cerin Amroth",
  "description": "Research notes on 4-bit Mixture-of-Experts models and reproducible GPU benchmarks, with links to current software documentation and the original evidence.",
  "date_modified": "2026-10-06",
  "representations": {
    "json": "https://cerinamroth.com/data/pages/research.json",
    "markdown": "https://cerinamroth.com/data/pages/research.md"
  },
  "headings": [
    {
      "level": 1,
      "id": null,
      "text": "ML research notes"
    },
    {
      "level": 2,
      "id": "current-documentation",
      "text": "Start with the software"
    },
    {
      "level": 2,
      "id": "update-2026-10-08",
      "text": "Research update · 8 October 2026"
    },
    {
      "level": 2,
      "id": "update-2026-10-06",
      "text": "Research update · 6 October 2026"
    },
    {
      "level": 2,
      "id": "dated-narratives",
      "text": "Earlier research narratives"
    },
    {
      "level": 3,
      "id": null,
      "text": "Receipts-driven engineeringhistorical"
    },
    {
      "level": 3,
      "id": null,
      "text": "experts-4bit, the 2026 narrativehistorical"
    }
  ],
  "links": [
    {
      "text": "Home",
      "url": "https://cerinamroth.com/"
    },
    {
      "text": "Install Loggetta",
      "url": "https://cerinamroth.com/ml/"
    },
    {
      "text": "Runtime",
      "url": "https://cerinamroth.com/ml/experts4bit-qlora/"
    },
    {
      "text": "Kernels",
      "url": "https://cerinamroth.com/ml/grouped-nf4-gemm/"
    },
    {
      "text": "Model and hardware requirements",
      "url": "https://cerinamroth.com/ml/compatibility/"
    },
    {
      "text": "Evidence",
      "url": "https://github.com/pjordanandrsn/experts4bit-qlora/blob/72e6dfeb36dfefbfdb84d71b77b1399c64709581/bench/h2h-2026-10-02/tc1/RESULTS-tc1-pos69.md"
    },
    {
      "text": "Evidence",
      "url": "https://github.com/pjordanandrsn/experts4bit-qlora/blob/72e6dfeb36dfefbfdb84d71b77b1399c64709581/bench/h2h-2026-10-02/tc1/RESULTS-tc1-pos68.md"
    },
    {
      "text": "Evidence",
      "url": "https://github.com/pjordanandrsn/experts4bit-qlora/blob/72e6dfeb36dfefbfdb84d71b77b1399c64709581/bench/p117/RESULTS-p117.md"
    },
    {
      "text": "release notes",
      "url": "https://github.com/pjordanandrsn/experts4bit-qlora/releases/tag/v0.50.0"
    },
    {
      "text": "Download the source revisions, result records, and release status as JSON",
      "url": "https://cerinamroth.com/research/latest.json"
    },
    {
      "text": "Loggetta 0.3.0",
      "url": "https://pypi.org/project/loggetta/0.3.0/"
    },
    {
      "text": "Evidence",
      "url": "https://github.com/pjordanandrsn/experts4bit-qlora/blob/a41c857dd7d5c68f8735af16634ce08426e01271/bench/h2h-2026-10-02/tc1/RESULTS-tc1-samestack-host2.md"
    },
    {
      "text": "Evidence",
      "url": "https://github.com/pjordanandrsn/experts4bit-qlora/blob/a41c857dd7d5c68f8735af16634ce08426e01271/bench/h2h-2026-10-02/tc1/RESULTS-tc1-packed4k-defaults.md"
    },
    {
      "text": "Evidence",
      "url": "https://github.com/pjordanandrsn/experts4bit-qlora/blob/a41c857dd7d5c68f8735af16634ce08426e01271/bench/h2h-2026-10-02/tc2/RESULTS-tc2-mixtral-samestack.md"
    },
    {
      "text": "bucketed padding is not the cause",
      "url": "https://github.com/pjordanandrsn/experts4bit-qlora/blob/4f56bdd5b0d2994211d241bb9768d01db80e6c64/bench/h2h-2026-10-02/tc1/RESULTS-tc1-padbk28.md"
    },
    {
      "text": "Read the test",
      "url": "https://github.com/pjordanandrsn/experts4bit-qlora/blob/a41c857dd7d5c68f8735af16634ce08426e01271/bench/h2h-2026-10-02/tc1/RESULTS-tc1-decoded.md"
    },
    {
      "text": "This update's records as JSON",
      "url": "https://github.com/Cerin-Amroth/cerinamroth-site/blob/main/docs/research-update-2026-10-06.json"
    },
    {
      "text": "current software documentation",
      "url": "https://cerinamroth.com/ml/"
    },
    {
      "text": "Receipts-driven engineering",
      "url": "https://cerinamroth.com/research/receipts-driven-engineering/"
    },
    {
      "text": "grouped-nf4-gemm",
      "url": "https://cerinamroth.com/ml/grouped-nf4-gemm/"
    },
    {
      "text": "experts-4bit, the 2026 narrative",
      "url": "https://cerinamroth.com/research/experts-4bit/"
    },
    {
      "text": "experts4bit-qlora",
      "url": "https://cerinamroth.com/ml/experts4bit-qlora/"
    }
  ],
  "structured_data": [
    {
      "@context": "https://schema.org",
      "@type": "CollectionPage",
      "name": "ML research notes — Cerin Amroth",
      "url": "https://cerinamroth.com/research/",
      "isPartOf": {
        "@type": "WebSite",
        "name": "Cerin Amroth Research",
        "url": "https://cerinamroth.com/"
      },
      "inLanguage": "en",
      "description": "Research notes on 4-bit Mixture-of-Experts models and reproducible GPU benchmarks, with links to current software documentation and the original evidence.",
      "mainEntityOfPage": "https://cerinamroth.com/research/"
    },
    {
      "@context": "https://schema.org",
      "@type": "BreadcrumbList",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "Home",
          "item": "https://cerinamroth.com/"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "ML research notes"
        }
      ]
    }
  ],
  "content_markdown": "[Home](https://cerinamroth.com/) › ML research notes \n\n# ML research notes\n\n \n\nPublic benchmarks, new capabilities, and the experiments that did not work.\n\n \n\n## Start with the software\n\n \n\n[Install Loggetta](https://cerinamroth.com/ml/) · [Runtime](https://cerinamroth.com/ml/experts4bit-qlora/) · [Kernels](https://cerinamroth.com/ml/grouped-nf4-gemm/) · [Model and hardware requirements](https://cerinamroth.com/ml/compatibility/)\n\n \n\n## Research update · 8 October 2026\n\n \n\nThe Unsloth comparison is now quoted as GPU time. Unsloth spends more of each step on the CPU than e4b does, so its wall-clock time grows on a slower host. The GPU-time ratio is the figure that does not depend on the host; the wall-clock ratio is quoted beside it, on its host. The 6 October figures below were wall readings from before e4b's current defaults.\n\n \n\n | Workload | Result | Conditions \n | Qwen3-30B-A3B QLoRA | Unsloth spends 1.92× e4b's GPU time per step; wall-clock 2.80× | RTX 5090 on an AMD EPYC 7713 host, both frameworks on one stack, e4b at its defaults; comparable held-out loss; Unsloth peaked lower (24.27 vs 26.16 GB). [Evidence](https://github.com/pjordanandrsn/experts4bit-qlora/blob/72e6dfeb36dfefbfdb84d71b77b1399c64709581/bench/h2h-2026-10-02/tc1/RESULTS-tc1-pos69.md) \n | Packed 4K Qwen3 training | Unsloth spends 1.160× e4b's GPU time per step | RTX 5090, e4b at its defaults; wall-clock 1.472× on that host. [Evidence](https://github.com/pjordanandrsn/experts4bit-qlora/blob/72e6dfeb36dfefbfdb84d71b77b1399c64709581/bench/h2h-2026-10-02/tc1/RESULTS-tc1-pos68.md) \n | Wide decode steps (serving) | No measurable quality cost | Qwen3-30B-A3B int4 on one RTX 5090: one 64-row decode step against four 16-row pieces, within the 16-row arithmetic's own variation. [Evidence](https://github.com/pjordanandrsn/experts4bit-qlora/blob/72e6dfeb36dfefbfdb84d71b77b1399c64709581/bench/p117/RESULTS-p117.md) \n\n \n\nReleased the same day: experts4bit-qlora 0.50.0, where `serve_paged` sizes its slots to the GPU's memory and decodes each step as one graph by default ([release notes](https://github.com/pjordanandrsn/experts4bit-qlora/releases/tag/v0.50.0)), and Loggetta 0.3.1, a documentation update.\n\n \n\n[Download the source revisions, result records, and release status as JSON](https://cerinamroth.com/research/latest.json).\n\n \n\n## Research update · 6 October 2026\n\n \n\nBring your data, keep your adapters. New in [Loggetta 0.3.0](https://pypi.org/project/loggetta/0.3.0/): local or Hub data, validation before model loading, reusable adapters, and a run report. Save and reload pass CPU tests; the full CUDA test is still to run.\n\n \n\n | Workload | Result | Conditions \n | Qwen3-30B-A3B QLoRA | 2.352× vs Unsloth; 2.468× on a second host | RTX 5090, matched work and software, comparable held-out loss. Unsloth used 3.22 GB less peak VRAM. [Evidence](https://github.com/pjordanandrsn/experts4bit-qlora/blob/a41c857dd7d5c68f8735af16634ce08426e01271/bench/h2h-2026-10-02/tc1/RESULTS-tc1-samestack-host2.md) \n | Packed 4K Qwen3 training | 1.453× vs Unsloth, defaults as of 2026-10-06 | RTX 5090, torch 2.12.1, 28.23 vs 24.86 GB peak. Defaults have changed since. [Evidence](https://github.com/pjordanandrsn/experts4bit-qlora/blob/a41c857dd7d5c68f8735af16634ce08426e01271/bench/h2h-2026-10-02/tc1/RESULTS-tc1-packed4k-defaults.md) \n | Mixtral-8x7B QLoRA | 1.144× vs Unsloth | Same-stack RTX 5090 run. Comparable held-out loss; Unsloth used less VRAM and energy. [Evidence](https://github.com/pjordanandrsn/experts4bit-qlora/blob/a41c857dd7d5c68f8735af16634ce08426e01271/bench/h2h-2026-10-02/tc2/RESULTS-tc2-mixtral-samestack.md) \n\n \n\nThe software stack matters. Packed training was slower on torch 2.8, and [bucketed padding is not the cause](https://github.com/pjordanandrsn/experts4bit-qlora/blob/4f56bdd5b0d2994211d241bb9768d01db80e6c64/bench/h2h-2026-10-02/tc1/RESULTS-tc1-padbk28.md). The decoded training route showed no measurable whole-step saving and stays opt-in. [Read the test](https://github.com/pjordanandrsn/experts4bit-qlora/blob/a41c857dd7d5c68f8735af16634ce08426e01271/bench/h2h-2026-10-02/tc1/RESULTS-tc1-decoded.md)\n\n \n\n[This update's records as JSON](https://github.com/Cerin-Amroth/cerinamroth-site/blob/main/docs/research-update-2026-10-06.json).\n\n \n\n## Earlier research narratives\n\nThese essays preserve the work as it stood when written. Use the [current software documentation](https://cerinamroth.com/ml/) for installation and support.\n\n \n\n### [Receipts-driven engineering](https://cerinamroth.com/research/receipts-driven-engineering/)historical\n\nThe methodology narrative behind grouped-nf4-gemm's blind-confirmed benchmarks: preregistration, OpenTimestamps stamping, and the published failures.\n\nPublished 2026-07-14 · last revised 2026-07-31 (dates from this site's history before the narrative was moved here) · current documentation: [`grouped-nf4-gemm`](https://cerinamroth.com/ml/grouped-nf4-gemm/)\n\n### [experts-4bit, the 2026 narrative](https://cerinamroth.com/research/experts-4bit/)historical\n\nThe earlier experts-4bit story: fused 4-bit experts, QLoRA and offload as they stood in July 2026.\n\nPublished 2026-07-09 · last revised 2026-07-31 (dates from this site's history before the narrative was moved here) · current documentation: [`experts4bit-qlora`](https://cerinamroth.com/ml/experts4bit-qlora/)\n\nSources and publication details\n\nThe generated documentation on this page is derived from the pinned source below; any site-authored section is listed as such, cites the same registers and copies no numbers. `docs/claims.json` at that commit is the only source for numbers.\n\n- Site-authored (`scripts/build_ml_site.py` in Cerin-Amroth/cerinamroth-site, private): `current-documentation`, `update-2026-10-08`, `update-2026-10-06`, `dated-narratives` — site-authored directory and dated research digests; each digest cites immutable repository evidence recorded in its docs/research-update-<date>.json.\n",
  "content_sha256": "2c0f09d572255dcf035f4dc52a1b089e2c1c4d04fe3633a1249e95a96f58b3e3"
}
