Skip to content

P0-4: aprender builds on ANY of intel/gx10/yoga — a shared build pool label, host-layout parametrized, yoga joins the x86 pool first, gx10 after an arm64 sovereign-ci image (operator 2026-09-10) #3100

Description

@noahgift

Decision (operator, 2026-09-10, verbatim)

why wouldn't we let ONLY aprender use gx10 for build server if it needs it, and ditto yoga. if no issues, lets change our build process so aprender can use ANY of those three build servers, but we can always redirect builds if we need to run something special on gx10, cancel jobs, etc

Measured today

  • The merge queue sat 2+ h at position 1 (fix(ptx): emitter was non-deterministic — the cubin cache has NEVER hit (42,880 stale cubins / 498 MB) #3066) with 26 aprender runs queued and zero executing: the 16 intel clean-room runners are one 32-core box shared by every paiml repo (load 102/32, 15/16 slots on bashrs/rmedia/forjar jobs). gx10 (20 cores, 119 GB, 301 GB free) and yoga (22 cores, 30 GB, 831 GB free) sat at load 0.0.
  • Runner groups: gpu-nodes (gx10) is already aprender-only; gpu-x86 (yoga) is aprender + infra.
  • GitHub matches ALL labels of runs-on (no OR), so "any of the three" = one shared pool label. Done live: build on the 16 intel runners (org runners API), yoga-eph and a new build-only replica gx10-build (infra PMAT-1096-ephemeral-gpu-runners, forjar-applied). scripts/check_runner_labels.sh accepts build as a pool (branch PMAT-1098-build-pool-any-of-three).
  • What blocks the label switch: ci.yml is welded to the intel host: 33 hardcoded paths (/mnt/nvme-raid0/targets ×18, /mnt/nvme-raid0/cargo-ci ×12, /home/noah/data/sccache ×3) and the image localhost:5000/sovereign-ci:stable (amd64 only, 512 MB, registry on mac-server 192.168.1.149:5000 — LAN-reachable). workspace-test, guard-cargo, guard-tree, mutants all run INSIDE that image via docker run with those bind mounts. Re-labelling alone would land a job on yoga with no image and no such directories.

Plan (rows; each a PR with its own acceptance)

  1. BP-1 parametrize the host layout (aprender, default-preserving): every run: block derives CI_TARGETS_ROOT, CI_CARGO_ROOT, SCCACHE_HOST_DIR, CI_IMAGE from the runner's environment with today's intel values as defaults (${CI_IMAGE:-localhost:5000/sovereign-ci:stable} …). Acceptance: diff of the rendered commands on intel is empty; a case table proves an override flows into the -v mounts and the image ref.
  2. BP-2 yoga joins the x86 pool (infra): /etc/docker/daemon.json insecure-registries: ["192.168.1.149:5000"]; the disposable runner writes .env (CI_IMAGE=192.168.1.149:5000/sovereign-ci:stable, CI_TARGETS_ROOT=~/eph-work/ci/targets, CI_CARGO_ROOT=~/eph-work/ci/cargo, SCCACHE_HOST_DIR=~/eph-work/sccache); the sovereign-ci image pre-pulled. Acceptance: workspace-test dispatched on yoga green at the measured duration; RAM headroom recorded (30 GB box).
  3. BP-3 flip the labels: workspace-test (then guard-cargo, guard-tree, mutants) → [self-hosted, X64, Linux, build]. Acceptance: one merge-queue run lands on yoga while intel is saturated.
  4. BP-4 gx10 (aarch64): build sovereign-ci for arm64 (buildx on gx10), publish to the same registry as a multi-arch manifest; drop X64 from the pool jobs after CI's exact nextest line is green on gx10 (measurement running today). Acceptance: a queue run on gx10-build green.
  5. BP-5 redirect/cancel runbook + guard: machines/clean-room/runner/build-pool.sh <box> on|off toggles the label (API for persistent runners, forjar params for disposable ones); a guard refuses a job selector only gx10 can satisfy unless it names a GPU label.

Until BP-3 lands nothing changes for CI; BP-1 is safe to merge at any time.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P0Critical priorityenhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions