Bernardo Gallegos Vallejo

Infrastructure
that holds up.

Validating AI infrastructure at AMD by day. Upstream fixes to GPU stacks, Rust and inference tooling, and a homelab run by agents, by night.

25upstream pull requests
11open-source repos
14merged
9machines in the lab

Upstream

Fixes in the code
everyone runs.

Not forks gathering dust. Pull requests into the GPU stacks and inference servers people actually deploy, found by running them on real hardware until they broke.

ROCm · open-source GPU stack

11 pull requests across 5 repos.

TheRock, ROCmValidationSuite, rocm-systems, libhipcxx. Build-system defaults, CI that actually builds forks, and gfx1151 Strix Halo support in the validation suite.

ci: check out the PR head commit so fork PRs build

lemonade-sdk
3

PRs to the local LLM server for GPUs and NPUs: backend binary resolution, router eviction logic.

2 merged 1 open
llamastash
4

Merged PRs, including the SGLang backend and the UMA guard that keeps unified-memory NVIDIA boxes from OOMing.

4 mergedshipped in v0.1.0
rust-lang/stdarch

The Rust standard library.

amdgpu: document that ds_permute/ds_bpermute take a byte address

bentoml/llm-optimizer

Three crashes, three fixes.

Missing deps, tokenizers without a BOS token, a server that hung forever.

3 open
mostlygeek/llama-swap
2

config: accept video as an input and output modality

Every pull request, live from GitHub

Claude Code

The homelab has an operator.
It's Claude.

Plugins, MCP servers, evals and guardrails, built so an agent can run real machines without being trusted blindly.

Local-model delegation

Claude plans. The Spark writes the code. A gate decides.

Claudescopes + judges
→
spark-taskisolated worktree
→
Local coder modelDGX Spark
→
Acceptance gatetests must fail first
→
Commitor exit 3

Implementation work runs on free local tokens. The expensive model only does what it is good at: scoping and verification.

homelab plugin

One plugin, seven machines.

A skill with the fleet's hard-won safety rules, slash commands for health checks and OOM preflight, an operator subagent, and an SSH MCP server with guardrails.

# before any big model load /spark-safe spark2 → checks free unified memory against the mode's floor
Evals in the ship gate

Plugins are tested like code.

claude plugin eval suites check that the agent refuses unsafe memory sizing, previews before sending email, and routes jobs to the right node. A failing eval blocks the release.

ship.sh → eval.sh (6 cases) → publish
Hooks & guardrails

Code whose mass isn't paid for doesn't ship.

A Stop hook diffs every session against its starting commit and blocks it if test coverage fell. Outbound actions (email, messages) always ask first. Every rule is checked by a hook, not just written in a prompt.

The Lab

NVIDIA and AMD.
One bench.

Where every upstream fix starts: a model that won't load, a kernel that won't build, a number that doesn't match the roofline. Every run is written down.

2× GB10DGX Spark · Grace Blackwell · 128 GB unified each
Strix HaloFramework Desktop · Ryzen AI Max+ 395 · Radeon 8060S · 128 GB
200 Gb/sRoCE link between the Sparks
384 GBunified GPU memory across three boxes
142dated casebook entries, every number measured
12U10" rack · 2.5G / 10G MikroTik fabric
U9–U12 · room to grow
MikroTik CRS310 · 8×2.5G + 2×10G
ThinkCentre M920q · MAAS node
ThinkCentre M920q · MAAS node
pi · Prometheus · Grafana
mac-mini · CI runners
spark2 · coder
spark · gen / research
PDU

Beside the rack: strix (AMD) · framework (MAAS server) · UGREEN NAS · UPS

Bare metal

Merge a PR.
The fleet reimages.

A datacenter node lifecycle, at desk scale. MAAS PXE-provisions two ThinkCentres over a dedicated VLAN, with Intel AMT standing in for a BMC. Terraform is the fleet's source of truth, and GitHub Actions on a self-hosted runner does the rest.

The lifecycle

Nothing ships without qualifying.

PXE enlistAMT power control
→
Commissionconfig + firmware checks
→
Burn-inthermal · memtester · clock
→
qualified tagor quarantine
→
Deploycloud-init · tailnet · metrics
Wave rollouts

Canary first. A gate decides the rest.

OS upgrades roll out canary-first through a manifest. The gate checks the canary's vitals before advancing. Rolling back is one dispatch. Drilled in both directions.

Firmware campaign

"Twins" that weren't.

A commissioning check found the two nodes on different NVMe firmware. It was built and seen failing before the flash. The canary was flashed, verified, and requalified, and the fleet is firmware-uniform for the first time.