bharathtelu's picture
Deploy auto-tune UI + scripts (work-from-91d0cf0)
a9aa4ae verified
|
Raw
History Blame Contribute Delete
14.3 kB
# 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