| # GPU Goblin β Goals & Implementation Plan |
|
|
| ## North Star |
|
|
| Win the AMD hackathon (**Track 1: AI Agents & Agentic Workflows**) by demonstrating a **real, reproducible 2Γ+ throughput improvement on a Qwen2.5-7B LoRA fine-tune on MI300X**, driven end-to-end by a Qwen-powered tool-using agent. Hits the Qwen Technology Partner challenge with end-to-end Qwen-on-AMD; deploys as a Hugging Face Space within the hackathon HF Organization. |
|
|
| Everything else is in service of that demo. |
|
|
| ## Success Criteria |
|
|
| | # | Criterion | Measurable As | |
| |---|---|---| |
| | 1 | Real MI300X speedup | β₯ 2.0Γ tokens/sec, before vs. after, on the canonical workload | |
| | 2 | Agent is actually agentic | β₯ 4 tool calls per audit, visible in UI | |
| | 3 | AMD differentiation | 100% of recommendations cite a ROCm-specific KB rule | |
| | 4 | Uplift estimate honesty | Predicted speedup range (lowβhigh) brackets the measured speedup on β₯ 8 of 10 synthetic corpus scenarios | |
| | 5 | Offline parse coverage | β₯ 90% of synthetic corpus parsed without manual edits | |
| | 6 | End-to-end reliability | Demo runs cleanly 5Γ in a row without manual intervention | |
| | 7 | Pitch quality | 3-min demo + 1-min architecture + 1-min impact, rehearsed | |
| | 8 | Backup safety | Offline-replay lane works fully when MI300X disconnected | |
|
|
| ## Mapping to Judging Criteria |
|
|
| | Hackathon criterion | Where we score | |
| |---|---| |
| | **Application of Technology** | Tool-using agent loop on MI300X; rocprofv3 + torch.profiler integration; deterministic uplift via waste-budget calculus; ROCm-specific KB | |
| | **Presentation** | Live before/after benchmark on real MI300X; waste-budget bar chart; chat-based "why?" interaction; 90-sec backup video | |
| | **Business Value** | Each audit reports `$ saved per training run` and `time saved per epoch`, framed against $1.99/hr public MI300X pricing reference | |
| | **Originality** | "AI for AI builders" β meta-positioning. Real benchmarks, not just LLM advice. Waste-budget decomposition is novel framing | |
|
|
| ## Team Roles (3 people Γ 4 days) |
|
|
| ### ROCm / ML Lead |
| - Day 1: MI300X cloud env, ROCm container, baseline workload (Qwen2.5-7B LoRA on alpaca) |
| - Day 1-2: Hand-curate 20-25 KB rules from ROCm docs + AMD blog |
| - Day 2: `profile_run` + `benchmark` tools (rocprofv3 wrapper, parser) |
| - Day 3: Validate end-to-end speedup on canonical demo, generate cached results |
| - **Owns:** anything that touches the GPU |
|
|
| ### Agent / Backend Lead |
| - Day 1: FastAPI skeleton, tool schemas, Qwen-via-HF tool-use plumbing |
| - Day 1-2: `parse_config`, `propose_patch`, `query_rocm_kb`, `compare_runs` tools |
| - Day 2: Full agent loop, system prompt, SSE streaming |
| - Day 3: Hardening, error handling, max-steps cap, fallback behaviors |
| - **Owns:** agent reasoning quality + tool wiring |
|
|
| ### Frontend / Demo Lead |
| - Day 1: Streamlit skeleton, file upload, message log |
| - Day 2: Tool-call cards (live status), report renderer, diff viewer |
| - Day 3: Demo polish, charts, golden-run replay mode |
| - Day 4: Pitch deck, 90-second backup video, dry runs |
| - **Owns:** what the judges actually see |
|
|
| Roles overlap on integration days β pair-program when blocked. |
|
|
| ## Day-by-Day Plan |
|
|
| ### Day 1 (May 5β6) β Foundations |
|
|
| **ROCm Lead** |
| - [ ] Provision MI300X cloud instance via AMD Developer Cloud ($100 credits), SSH access, persistent storage |
| - [ ] Pull `rocm/pytorch:rocm6.1_*` image, verify GPU visible inside container |
| - [ ] Run baseline `train_qwen_lora.py` (batch=4, fp16, naive attention, alpaca, 100 steps) |
| - [ ] Capture baseline tokens/sec, MFU, HBM peak β *this is our "before"* |
| - [ ] Generate **synthetic corpus** β 5-8 misconfigured variants of the canonical workload (FP32, num_workers=0, naive attention, etc.) with cached `RunMetrics` JSON for each |
| - [ ] Start drafting KB rules (target 10 rules by EOD), each tagged with `targets_bucket` matching the waste-budget decomposition |
|
|
| **Backend Lead** |
| - [ ] Repo scaffold per architecture.md layout |
| - [ ] `pip install fastapi anthropic sentence-transformers pyyaml pydantic` |
| - [ ] Define `agent/schemas.py` with `RunMetrics`, `WasteBudget`, `ConfigDict`, `Patch`, `Rule`, `Report` as pydantic models β **Day-1 priority** (blocks all tools) |
| - [ ] Define `RunnerProtocol` interface; build `FakeRunner` that loads cached metrics from `workloads/synthetic/` (lets backend dev without MI300X) |
| - [ ] FastAPI `POST /audit` skeleton with SSE |
| - [ ] `parse_config` tool β handle HF `TrainingArguments` first; include regex redaction pass for tokens/paths |
| - [ ] Qwen tool-use hello-world (one tool, one round-trip via HF Inference Providers) |
|
|
| **Frontend Lead** |
| - [ ] Streamlit skeleton with file upload + chat panel |
| - [ ] Hardcoded "fake audit" β render canned tool calls + report |
| - [ ] Pick chart library (Altair recommended for Streamlit) |
|
|
| **Day 1 Exit Criteria** |
| - Baseline benchmark numbers in hand |
| - Synthetic corpus has β₯ 3 cached scenarios (Backend Lead can now dev without GPU) |
| - Schemas (`RunMetrics`, `WasteBudget`, etc.) frozen |
| - `RunnerProtocol` + `FakeRunner` working end-to-end |
| - Backend can call Qwen with one tool via HF Inference Providers |
| - UI renders a fake audit |
| - 10 KB rules drafted |
|
|
| ### Day 2 (May 6β7) β Core Build |
|
|
| **ROCm Lead** |
| - [ ] Finish KB to 20-25 rules; hand-tag categories + `targets_bucket`; pre-embed with sentence-transformers |
| - [ ] Include the high-impact MI300X rules: BF16-over-FP16, AITER-flash-attn-via-Optimum-AMD, `NCCL_MIN_NCHANNELS=112`, NUMA disable, one-process-per-GPU, hipBLASLt hint logging, MIOpen `MIOPEN_FIND_*`, **bitsandbytes-not-supported-on-ROCm warning**, `num_workers`/`pin_memory`/`prefetch_factor`/`persistent_workers` |
| - [ ] `profile_run` tool: rocprofv3 wrapper + torch.profiler + amd-smi β `RunMetrics` with `WasteBudget` |
| - [ ] `benchmark` tool: same pipeline, longer run, with version-tagged cache |
| - [ ] Validate on baseline workload: profile output makes sense, MFU is plausible, waste budget sums to ~T_total |
| |
| **Backend Lead** |
| - [ ] All 6 tools wired and individually tested with fixtures from synthetic corpus |
| - [ ] Full agent loop with max-steps cap, SSE event types finalized, error envelope per tool (`{ok, result, error}`) |
| - [ ] System prompt iterated against test workloads β include MI300X hardware specs (304 CUs, 192 GB HBM3, ~5.3 TB/s, FP8 native) so the agent reasons quantitatively |
| - [ ] `propose_patch` deterministic transformer + uplift estimator (waste-budget Γ bucket recovery) + confidence formula |
|
|
| **Frontend Lead** |
| - [ ] Live tool-call cards consuming real SSE stream |
| - [ ] Final report layout: side-by-side metrics + diff + kernel chart + **waste-budget bar chart** (where time was lost, before vs after) |
| - [ ] Lane toggle: `Live MI300X` vs `Offline replay (synthetic corpus)` β judges can pick either |
| - [ ] First end-to-end run through the actual backend |
|
|
| **Day 2 Exit Criteria** |
| - Real audit runs end-to-end on a toy workload |
| - Profile + benchmark return real MI300X numbers |
| - KB has 20+ rules, embeddings pre-computed |
| - UI streams real agent activity |
|
|
| ### Day 3 (May 7β8) β Demo Day Prep |
|
|
| **All hands** |
| - [ ] Run canonical demo (Qwen2.5-7B LoRA) end-to-end β confirm β₯ 2Γ speedup |
| - [ ] Cache the demo benchmark results β don't burn cloud time on every rehearsal |
| - [ ] Build "golden run" replay mode (read cached SSE events, replay timing) |
| - [ ] Validate uplift accuracy on synthetic corpus: predicted range should bracket measured speedup on β₯ 8 of 10 scenarios |
| - [ ] Polish system prompt for demo-friendly narration ("I'll start byβ¦") |
| - [ ] Tighten error handling β agent should never panic in front of judges; tool failures degrade gracefully with `{ok:false}` envelopes |
| - [ ] Run with `--no-cache` once to verify cached results aren't masking real bugs |
| - [ ] 5Γ clean dry runs, fix anything flaky |
|
|
| **Day 3 Exit Criteria** |
| - Canonical demo: cleanly runs in β€ 4 minutes, β₯ 2Γ speedup, no manual fixes |
| - Cached results enable offline replay |
| - Offline-replay lane works fully when MI300X is disconnected (proven by unplugging cloud) |
| - Golden-run video recorded as backup |
|
|
| ### Day 4 (May 8β9) β Pitch & Stretch |
|
|
| **Frontend Lead** |
| - [ ] Pitch deck (5 slides): problem, agent loop diagram, demo (live), KB rules sample, impact + ask |
| - [ ] Cover image for the submission listing |
| - [ ] Final 90-second backup video |
| - [ ] Submission form filled (title, short + long description, tags), repo public, README crisp |
| - [ ] **Build-in-Public bonus track:** at least one public update post (X/LinkedIn/Discord) showing the agent's first audit; one ROCm/Optimum-AMD feedback note based on what was rough during build |
|
|
| **ROCm + Backend Leads (in parallel, optional stretch)** |
| - [ ] vLLM inference workload as second demo (only if rock-solid on Day 3) |
| - [ ] Cost calculator: `$ saved per training run` line, anchored on $1.99/hr public MI300X reference |
| - [ ] What-if slider panel for batch / precision / attention (chat already does this conversationally, sliders are visual icing) |
| - [ ] Stretch dream: self-host Qwen on MI300X via vLLM (replacing the HF-Inference-Providers path) β closes the loop entirely on AMD silicon. Mention in pitch even if not running live. |
|
|
| **Day 4 Exit Criteria** |
| - Submission complete by deadline |
| - 5+ rehearsed dry runs of the pitch |
| - Cover image, video, slides, repo all linked from submission form |
| - Backup video on USB stick, in cloud, on phone |
|
|
| ## Scope Discipline (YAGNI) |
|
|
| If we're behind schedule, **cut in this order**: |
|
|
| 1. β All stretch goals (vLLM, cost calc, self-hosted agent) |
| 2. β Live tool-call UI animations β static cards work |
| 3. β Some KB categories (keep precision/attention/memory; drop env_vars/collectives) |
| 4. β Multi-file script parsing β single-file only |
| 5. β Dynamic batch-size search β hardcode the recommended batch for demo workload |
| |
| **Never cut:** |
| - Real MI300X benchmark (that's the entire pitch) |
| - Tool-using agent loop (that's the track fit) |
| - ROCm-specific KB citations (that's the differentiation) |
| |
| ## Risk Register |
| |
| | Risk | Likelihood | Impact | Mitigation | |
| |---|---|---|---| |
| | MI300X cloud quota burns out | Medium | High | Cache every benchmark, dev with 10-step traces, full benchmarks only for canonical demo | |
| | `rocprofv3` flaky / version mismatch | Medium | High | Always run `torch.profiler` in parallel as fallback. Pre-record golden trace. Use `rocprofv3` not deprecated `rocprof`/`rocprofv2` | |
| | MI300X cloud unreachable on demo day | Low | Critical | **Offline-replay lane** (synthetic corpus + cached metrics) provides full demo without cloud β judges can't tell the difference for the agent-reasoning portion | |
| | Uploaded scripts contain user secrets / tokens | Medium | Medium | Regex redaction pass in `parse_config` before any persistence or LLM call; ephemeral storage; explicit "we never store weights or datasets" line in UI | |
| | Agent loops infinitely | Low | Medium | Hard cap of 8 tool calls, fall back to "best effort" report after cap | |
| | Recommendations are generic, not ROCm-specific | Medium | Critical | Hand-curate KB on Day 1 *before* wiring agent β KB is the moat | |
| | Demo crashes during pitch | Low | Critical | Pre-recorded video backup. Golden-run replay mode. USB + cloud + phone copies | |
| | Qwen2.5-7B doesn't fit a 12-batch on MI300X | Low | Medium | Have a fallback config in hand (batch=8 + grad_accum=2) | |
| | LoRA on alpaca too easy β speedup looks staged | Low | High | Measure on a non-trivial seq_len (1024+), include MFU not just tokens/sec, show kernel breakdown to prove it's real | |
| | HF Inference Provider rate limit / outage during demo | Low | Medium | Offline-replay UI lane plays cached_audit.json without any backend; pre-cache a full recorded session; have a backup HF token; `provider="auto"` already routes around individual provider outages | |
| | Team member unavailable (illness, etc.) | Low | High | Pair on critical path (agent loop, KB) so no single point of failure | |
| |
| ## Definition of Done β MVP |
| |
| GPU Goblin is "done enough to ship" when **all** of these are true: |
| |
| - β
A judge can upload `train_qwen_lora.py` (we provide it) and get a real audit |
| - β
Agent makes β₯ 4 visible tool calls |
| - β
Final report shows β₯ 2Γ tokens/sec, real numbers from MI300X |
| - β
Every recommendation in the report cites a ROCm KB rule by ID |
| - β
User can ask follow-up questions in chat ("why bf16?") and get cited answers |
| - β
Full audit completes in β€ 4 minutes |
| - β
5 consecutive dry runs succeed without manual intervention |
| - β
Backup video and cached replay both work |
| |
| ## Stretch Definition of Done |
| |
| - π― Second canonical workload (vLLM inference) audited end-to-end |
| - π― Cost calculator: "you save $X per training run, $Y per epoch" |
| - π― Agent backed by self-hosted Qwen via vLLM on the same MI300X (the ultimate AMD story β replaces today's HF Inference Providers path with on-cluster serving) |
| |
| ## Compute Budget β AMD Developer Cloud Credits |
| |
| Eligible participants get **$100 in AMD Developer Cloud credits**. Public reference price for MI300X is around $1.99/hr (single VM) or $3.39/hr (8Γ bare metal). Plan accordingly: |
| |
| | Activity | GPU-hours | Notes | |
| |---|---|---| |
| | Day-1 baseline + synthetic corpus generation | 4β6 | One-shot, results cached | |
| | Day-2 KB validation runs | 2β3 | Sanity-check the rules fire on synthetic scenarios | |
| | Day-3 canonical demo dry runs (cached) | 2β4 | Cache hits after the first run | |
| | Day-3 `--no-cache` cold validation | 1 | Confirms nothing's stale | |
| | Day-4 final dry runs + record video | 2β3 | Lock the demo | |
| | **Total estimate** | **~12β17 hrs** | Well within $100 even at bare-metal rates | |
| |
| Backend Lead spends zero MI300X time after Day 1 β develops against synthetic corpus + `FakeRunner`. |
| |
| ## Submission Checklist |
| |
| - [ ] Public GitHub repo with clear README + architecture diagram + setup instructions |
| - [ ] 90-second demo video (live agent run, real MI300X numbers) |
| - [ ] Pitch deck (PDF or slides URL) |
| - [ ] Cover image (project listing visual) |
| - [ ] Architecture diagram (PNG) |
| - [ ] Sample audit report PDF (one canonical run, before/after, including waste-budget chart) |
| - [ ] Short description (1-2 sentences) + long description (paragraph) + technology/category tags |
| - [ ] At least one Build-in-Public post + one ROCm/Optimum-AMD feedback note (bonus track) |
| - [ ] Hackathon submission form filled |
| - [ ] Team member credits + contact |
| |