Skip to content

Hyperloom v1.0.0b1

Choose a tag to compare

@chaojhou chaojhou released this 12 Aug 06:18
· 3450 commits to main since this release
9480f66

Hyperloom v1.0.0b1

Highlights

Measurement integrity: what counts as a gain

Candidates are launched with current_best's recipe, but the grading anchor and the configuration it was measured on could still drift apart, so a regression against the established recipe read as a win. The anchor and its configuration are now inseparable, resolved in one place and carried together through execution. Alongside that, four fail-soft paths were silently dropping a validated configuration rather than failing loudly, Explore was discarding the baseline accuracy it had been graded against, and warm replay mis-quoted JSON arguments so a replayed recipe did not reconstruct the run it recorded.

vLLM roofline runs no longer launch an unbounded torch profiler

The profile path injects --profiler-config.delay_iterations/max_iterations into EXTRA_VLLM_ARGS, but three later steps could each drop them: a candidate carrying args_mode="replace" overwrote the whole flag string, extra_envs could override it outright, and remove_args strips flags by name — taking --profiler-config.ignore_frontend with them. vLLM reads a missing max_iterations as "profile until stop_profile", so the worker accumulated every profiler event in host anonymous memory — measured at 60 MiB/s with the production option set — until the cgroup OOM-killer took the engine or worker out mid-roofline, at 107–137 GiB RSS. Because args_mode is sticky on current_best, one such KEEP turned every later roofline in that session into an OOM candidate.

materialize_config_with_envs now re-asserts the profiler flags as the LAST write to EXTRA_VLLM_ARGS, restoring only what went missing and warning about exactly which flags. The re-assertion checks flag VALUES, not just names, for the two that decide whether the capture is bounded at all: max_iterations has to parse as a positive integer within the computed cap (vLLM reads 0 as "no limit"), and ignore_frontend has to be true. A name-only check accepted --profiler-config.max_iterations 0 and then logged that it had bounded the profiler — worse than not guarding, since the warning sends the next investigation the wrong way. Scope: vLLM only; the equivalent SGLang exposure is called out in a comment at that write site.

One path for every LLM call

Every LLM call now routes through an agent runtime or the single-shot entry point, so provider selection, credentials, and telemetry stop being re-implemented per call site. The Codex Coordinator receives the transport and vocabulary its role already assumed, which is what an OpenAI-only deployment needs to reach Forge at all. DeepSeek is treated as a dual-protocol gateway rather than a provider of its own, SAFE_API_KEY is gone in favour of sourcing keys from the OPENAI_* / ANTHROPIC_* variables, the critic can authenticate through Claude CLI OAuth, and the defaults move to claude-opus-5 and gpt-5.6-sol.

Remote Recipe knowledge now uses KB Store

Remote mode reads one identity-addressed best record for T0 Explore config/env replay and publishes one final CLOSE session with verified artifacts. Local Recipe storage and non-Recipe GBrain integrations are unchanged; agent section staging is an interface surface and is not yet wired by the kernel backends. The kernel-agent gets its own KB record, written per round and replayed at PRELUDE.

--no-eval turns the accuracy eval off for a whole run

Setting RUN_EVAL=false by hand leaves the baseline with no accuracy reference, which the baseline guard rejects, so the run stopped before it optimized anything. The flag makes that an explicit session-wide choice instead: the baseline anchors on throughput rather than halting on the missing reference, and every candidate lands on the existing baseline_accuracy == 0 path that already degrades to a throughput-only KEEP. A measured regression still blocks.

The choice is session state (shared_state.eval_disabled), not just a parsed arg, so it also reaches the lanes that template their own benchmark config: the framework-agent bench, eval-origin enablement, the multi-node lm_eval preflight install, and the GEAK GEMM shape capture. It persists across --resume, and is refused with a warning once the session has anchored an accuracy, because every KEEP up to that point was graded against it. Default-off is byte-for-byte the previous behaviour. Runs made with the flag are not accuracy-validated.

Enablement dispatch evidence reaches the specialist again

The Coordinator computes the source lines near the offending site — and, on a weight-init failure, the checkpoint's per-layer weight inventory — plus a ranked list of bridging PR refs. Since the mandate stopped being passed as free-text notes, none of it was delivered: the mandate was re-rendered downstream from a bare request, so the agent was told to find a bridge while the candidates already discovered for it were withheld. Both now travel as structured enablement_source_context / enablement_candidate_refs params and are folded into the §1b mandate at the point of use.

Kernel work: source resolution, fusion, and the ladder

Forge runtime targeting and E2E integration are hardened, GEMM tuning now covers the shapes the workload actually runs, and runtime-JIT deployment works for AITER sources installed from the split wheel. Sentinel strings no longer short-circuit source resolution, Forge validation is aligned with mean-case speedup, and the TraceLens idle gate honours graph under-recording instead of reading a partially recorded capture as an idle GPU. A Triton kernel can now be rewritten into FlyDSL and integrated as a framework patch. Cumulative gain survives a fusion step, GEAK runs under the optimizer's own Python, and an LLM outage during forge-fusion is reported as a retryable infrastructure failure rather than being recorded as "fusion found nothing" — a single gateway blip used to mark fusion done for the rest of the session.

Packaging hygiene

Test trees are no longer shipped in the wheel, a dead package-data glob is dropped, and a packaging CI job now checks the built artifact rather than trusting the tree to have been clean.

What's included

Kernel / Forge

  • Harden Forge runtime targeting and E2E integration - #1098
  • Tune the GEMM shapes the workload actually runs - #1099
  • Runtime-JIT deployment for installed AITER sources - #1102
  • Stop sentinel strings from short-circuiting source resolution - #1107
  • Align Forge validation with mean-case speedup - #1108
  • Route FLUX.2 and count cross-attention Q/O projections - #1115
  • Honor graph under-recording in the TraceLens idle gate - #1121
  • Preserve cumulative gain after fusion - #1124
  • Rewrite a Triton kernel into FlyDSL and integrate it as a framework patch - #1128
  • Stop claiming an analytic diffusion ceiling for custom; retire hunyuan_image3 - #1136
  • Run GEAK with the optimizer Python - #1159
  • Stop an LLM outage from retiring fusion for the session - #1109

Measurement integrity

  • Make the grading anchor and the config it was measured on inseparable - #1091
  • Keep the torch-profiler bounds a replacing candidate wiped - #1103
  • Stop four fail-soft paths from silently dropping validated configuration - #1139
  • Preserve baseline accuracy in Explore - #1151
  • Fix warm-replay JSON argument quoting - #1127

LLM routing, credentials, and models

  • Route every LLM call through an agent runtime or the single-shot entry point - #1129
  • Give the Codex Coordinator the transport and vocabulary its role already had - #1131
  • Treat DeepSeek as a dual-protocol gateway, not a provider - #1110
  • Remove SAFE_API_KEY; source keys from OPENAI_* / ANTHROPIC_* - #1100
  • Critic Claude CLI OAuth - #1120
  • Default Claude to claude-opus-5 and OpenAI to gpt-5.6-sol - #1112

Knowledge base

  • Add local and remote knowledge backends - #1094
  • Migrate remote recipes to KB Store - #1130
  • Give the kernel-agent KB its own record, written per round and replayed at PRELUDE - #1147
  • Preserve remote compatibility paths - #1111

Orchestration, enablement, and prompts

  • Operator-supplied workload path and a source-rewrite specialist for iterative pipelines - #1080
  • Reconnect the failure context chain; objectify enablement state - #1093
  • Prompt overhaul: precise, phased, and economic - #1095
  • Close the silent failures left by the framework_agent rename - #1122

Evaluation

  • Add --no-eval to turn the accuracy eval off for a whole run - #1105 (closes #1089)

Telemetry

  • Emit Explore spend telemetry and report failed LLM calls - #1101

Packaging, documentation, and release

  • Stop shipping test trees, drop a dead package-data glob, add packaging CI - #1096
  • Documentation clean-up for a crisp user experience - #1104
  • Update recommended images to rocm/hyperloom (SGLang 0.5.16 / vLLM 0.24.0) - #1133
  • Cover enterprise LLM gateway setup; fix .env dropping gateway auth headers - #1134 (closes #1119)
  • Cut 1.0.0b1 and install it from PyPI - #1148

Requirements

(unchanged from v1.0.0a3) ROCm platform with a supported AMD Instinct GPU (MI355X / MI325X / MI300X; MI308X detection); Docker with AMD ROCm support, Kubernetes with AMD GPU nodes, or the supported bare-metal setup; Cursor IDE with Remote SSH; an Anthropic API key or compatible Anthropic gateway, or an OpenAI-compatible gateway; tmux, jq, Node.js >= 18, and Claude CLI.

The alpha wheels are published on PyPI, so the documented install no longer names a GitHub release asset URL. The version pin is required: a pre-release is skipped by the resolver unless it is asked for by name.

python3 -m pip install "hyperloom-inference_optimizer==1.0.0b1" --target .

Beta notice

v1.0.0b1 is a beta release. Beta signals that the surface is frozen: configuration surfaces, orchestration policies, and installation workflows are not expected to change further before v1.0.0.