Project Info
This project did not submit a demo video on Devpost.
Inspiration
Picking the right GPU microarchitecture for a workload is a brutal search problem. With just the knobs we expose SM clusters, cores/cluster, memory channels, scheduler, shared-memory size, L1/L2 cache - the space is already $$4 \times 3 \times 4 \times 3 \times 3 \times 3 \times 4 \times 3 = 15{,}552 \text{ configurations,}$$ and each one means hand-editing a simulator config, queueing a cycle-accurate run, and squinting at a 3,000-line counter dump. Today that loop is done by a handful of specialists over weeks. We wanted to put that expert loop on autopilot and let anyone drive it by just describing a goal.
What it does
GPU Architecture Studio is an autonomous design-space explorer. You give it a goal ("maximize IPC for the JPEG workload"); a team of AI agents then proposes a config, runs a real GPGPU-Sim simulation, diagnoses the bottleneck, proposes a better config, and repeats converging on a Pareto-optimal design and explaining every step. The agents decide what to run next it's not a UI that explains what you ran. You can drive it from a web studio or chat with it through ASI:One.
How we built it
Simulation: a FastAPI backend drives GPGPU-Sim (GTX-480/Fermi) in Docker, generates configs, and parses the real counters. Agents: four Claude agents: Memory, Warp, and Bottleneck specialists (Haiku) plus an Orchestrator (Sonnet, adaptive thinking) that reasons over the full history. Memory: RedisVL as agent memory, each experiment is embedded and the Orchestrator semantically recalls relevant past runs before each decision. Reliability: Sentry traces every sim and agent call and captures failures with the offending config. Reach: Fetch.ai uAgents with the Agent Chat Protocol expose it on Agentverse / ASI:One - including a multi-agent bureau where the Orchestrator delegates to the specialist uAgents over Fetch messaging.
Challenges we ran into
The simulator fought back.The simulator fought back. Scaling clusters segfaulted GPGPU-Sim until we realized the interconnect must be regenerated to match: k = n_clusters + n_mem Γ 2. We now emit both files together. A silent loop-killer. The Orchestrator returned empty proposals, adaptive thinking was consuming the entire token budget. Diagnosing it (not guessing) and raising max_tokens fixed it. Flaky infrastructure. A Redis drop mid-run once killed a successful experiment; we made persistence best-effort so a datastore blip can never lose a result. Dependency isolation for uAgents (older pinned deps) solved by running Fetch agents in a separate env that talks to the backend over HTTP.
Accomplishments we're proud of
A loop that genuinely improves the design real simulations climbing IPC 315 β 459 β 490 with the Orchestrator justifying each move; agent analysis sharp enough to pass for a real architect; Redis used beyond caching as vector memory; and the whole system reachable from a chat, with reliability engineering that turns crashes into graceful, monitored failures.
What we learned
Always test against real simulator output, never assumed formats. Tiered models (cheap specialists, smart orchestrator) keep cost ~$0.25/run. Vector recall turns the agent's growing history from a context-window problem into an advantage. And clean seams (injectable stores, HTTP-decoupled agents) let sponsors layer in without breaking the core. Sponsor Tracks We didn't reach for sponsor tech to check boxes each one solved a problem the autonomous loop genuinely had. The clean seams in our architecture (injectable stores, HTTP-decoupled agents) are exactly what let them slot in without bending the core. Anthropic (Claude) the reasoning itself. Claude is the loop, not a feature on top of it. The diagnosis "L1 miss traffic is low-reuse streaming; highest leverage is more clusters" is a Claude judgment over a 3,000-line counter dump, and the next config is a Claude decision. We leaned into the model lineup on purpose: cheap Haiku specialists (Memory, Warp, Bottleneck) do the per-run analysis, and a Sonnet Orchestrator with extended thinking reasons over the full experiment history to pick the next move. That tiering is what keeps a full exploration at ~$0.25/run instead of being cost-prohibitive. We also built the whole system with Claude Code. Redis Redis beyond caching, as the agent's memory. This was the integration we're most genuinely proud of, because it fixed a real failure mode. As the run grows, the Orchestrator can't fit every past experiment in its context window. Instead of truncating history, we embed each experiment and store it in RedisVL; before every decision the Orchestrator semantically recalls the most relevant prior runs (the "recalled N relevant prior runs" moment in the UI is this firing). That turns a growing history from a context-window liability into a compounding advantage and it's Redis as a vector database, not a key-value cache. Redis also backs the experiment store, made best-effort so a datastore blip can never lose a successful result. Sentry reliability for an unattended autonomous loop. A loop that runs cycle-accurate simulations and LLM calls without a human watching fails in ugly, silent ways and we hit several: GPGPU-Sim segfaulting on cluster scaling, the Orchestrator returning empty proposals when adaptive thinking ate the token budget. Sentry traces every simulation and every agent call and captures failures with the offending config attached, so each crash becomes a reproducible, monitored issue instead of a dead loop we have to guess at. Diagnosing the empty-proposal bug from a captured trace (rather than guessing) is precisely why this earned its place. Fetch.ai reach and real agent-to-agent collaboration. We wrapped the explorer as uAgents speaking the Agent Chat Protocol, so it's reachable on Agentverse / ASI:One you can drive a full design exploration just by chatting with it. Beyond a single entry point, we built a multi-agent bureau where the Orchestrator delegates to the specialist uAgents over Fetch messaging, which is genuine agent-to-agent collaboration rather than one process calling functions. Running the Fetch agents in their own environment that talks to the backend over HTTP also solved a real dependency-isolation problem. https://agentverse.ai/agents/details/agent1qv0wrqka6vhj6enxaurju53ky30hp4qz9hfvp0spuz5s7490lpjexzcv45n/profile https://asi1.ai/chat/3224a73e-3390-4a71-aca0-bd9bfc213ece
What's next
A more fluid and pluggable system to connect more SIMS for end-to-end hardware analysis not just GPU, multi-container parallel exploration, a richer UI, deeper multi-agent collaboration.
π₯οΈ GPU Architecture Studio
AI agents that autonomously design better GPUs β and explain every decision.
Tell it a goal in plain English ("maximize IPC for the JPEG workload"). A team of Claude agents then proposes a GPU configuration, runs a real cycle-accurate simulation, diagnoses the bottleneck, proposes a better config, and repeats β converging on a Pareto-optimal chip design while narrating its reasoning. Drive it from a web studio, or just chat with it through ASI:One.
The problem (and why it matters)
A modern accelerator isn't one design β it's a huge space of choices: how many SM clusters, cores per cluster, cache sizes, the warp scheduler, memory channels, shared-memory budget. The right combination depends entirely on the workload, and the search space is thousands of configs.
Today, finding the best config for a workload looks like this: a hardware specialist hand-edits a simulator config, queues a cycle-accurate job on a cluster (each run is minutes to hours), squints at a 3,000-line dump of performance counters, forms a hypothesis about the bottleneck, tweaks one parameter, and repeats β for days or weeks. The expertise to read those counters and know what to change and why lives in a handful of PhD-level heads.
That's the bottleneck we attack. GPU Architecture Studio puts that expert loop on autopilot: AI agents decide what to try, run real simulations, read the real counters, reason about the bottleneck like a senior architect, and converge on an optimal design β explaining each step. It turns a weeks-long, specialist-only process into a conversation anyone can have.
This is not a UI that explains what you ran. The agents drive the loop β they choose the next experiment. That autonomy is the product.
Who it helps: hardware/architecture engineers (explore a design space in minutes, with rationale attached), ML-systems & performance engineers (fit a chip to a workload without learning the simulator), and researchers/students (a transparent, teachable loop that shows why a design is compute- vs memory-bound).
How it works
ASI:One / Agentverse chat Web Studio (React)
β "best GPU config for JPEG?" β sliders + live charts
βΌ βΌ
Fetch.ai uAgents ββββββββ HTTP βββββββββΊ FastAPI backend
(Agent Chat Protocol) β
βΌ autonomous loop
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Orchestrator proposes config β run REAL GPGPU-Sim β 3 specialist β
β agents analyze the counters β Orchestrator reasons over the FULL β
β history (+ vector-recalled past runs) β proposes next β repeat β
β until converged on a Pareto-optimal design β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β β
GPGPU-Sim Claude agents RedisVL agent memory
(Docker, ~8s/run) Memory Β· Warp Β· (semantic recall of
Bottleneck Β· Orchestrator relevant past runs)
The four agents (Claude): Memory (cache/bandwidth/reuse), Warp (occupancy/scheduling/latency-hiding), Bottleneck (synthesizes both into a roofline classification + the highest-leverage change), and Orchestrator (reads the full history, recalls relevant past experiments, proposes the next config like a senior architect, finds the Pareto frontier).
A real run, verified: IPC 315 β 459 β 490 as the agents scaled SM clusters then
tuned a second parameter β each step justified by the counters.
Integrations
Anthropic / Claude β the reasoning
The agents are Claude, tiered for cost: Haiku 4.5 for the three specialists (fast, focused, run 3Γ per iteration) and Sonnet 4.6 with adaptive thinking for the Orchestrator (the hard, history-spanning reasoning). The result is analysis a GPU architect would actually write β "occupancy is 32% yet IPC is 315, so this kernel is latency-tolerant; chasing occupancy won't pay" β not generic filler. One full 8-experiment exploration costs ~$0.25. Built with Claude Code.
Redis β agent memory, not caching
The Orchestrator is only as good as what it remembers. As exploration grows, stuffing the entire history into the prompt is expensive and noisy. So we use RedisVL as the agent's long-term memory: every experiment (config + stats
- bottleneck classification) is embedded with a local sentence-transformer into a vector index, and before each decision the Orchestrator semantically recalls the most relevant past experiments β RAG over the agent's own experience. It reasons like an architect who remembers "we've been in a shared-memory-bound regime like this before; here's what worked."
How it helped us: it turned a context-window problem into a feature. The Orchestrator gets sharper as it accumulates experience, recall works across sessions, and Redis Cloud durably stores every experiment. This is Redis used beyond caching β vector search + context retrieval + agent memory.
Sentry β reliability for a system you don't drive
When the AI decides what to run, you can't eyeball whether it stayed healthy. We instrument every simulation and every agent call as a Sentry transaction, tagged with the config and resulting IPC β a live, queryable map of what the autonomous loop did and where time/cost went. And AI-proposed configs can break the simulator: scaling SM clusters without resizing the interconnect segfaults GPGPU-Sim. Sentry captures those crashes with the offending config attached, and the runner returns an error result instead of dying.
How it helped us: mid-build, a flaky Redis connection dropped during a run and killed a successful experiment. Sentry surfaced it immediately β so we made persistence best-effort (a datastore blip can never lose a run) and captured the blip instead. We literally used Sentry to find and fix a real reliability bug.
Fetch.ai / ASI:One β a product anyone can talk to
A research tool shouldn't need a custom UI to be useful. We wrapped the agents as Fetch.ai uAgents implementing the Agent Chat Protocol, registered on Agentverse and reachable from ASI:One β chat "find the best GPU config for JPEG" and the autonomous system runs and answers. And it's a true multi-agent system: an Orchestrator uAgent delegates to Memory/Warp/Bottleneck specialist uAgents over Fetch messaging, then synthesizes their verdicts.
How it helped us: it turned a backend tool into a conversational product reachable by anyone, and satisfied "complete the workflow with no custom frontend."
π Build & run
Prerequisites
Python 3.9+ (backend). Docker with the GPGPU-Sim container for real sims
(optional β see DEMO_MODE). ANTHROPIC_API_KEY for live agents; optional
REDIS_URL, SENTRY_DSN.
python -m venv venv && source venv/bin/activate
pip install -r backend/requirements.txt
cp .env.example .env # add ANTHROPIC_API_KEY (+ optional REDIS_URL, SENTRY_DSN)
uvicorn backend.main:app --port 8000
On startup it logs the store (Redis/in-memory) and Sentry (enabled/disabled).
Run with NO Docker (DEMO_MODE β frontend dev & quick demos)
DEMO_MODE=1 DISABLE_REDIS=1 uvicorn backend.main:app --port 8000
Serves the real API with replayed simulator data β zero Docker/Redis. With
ANTHROPIC_API_KEY unset, agents return canned config-aware analysis so
/explore runs end-to-end offline; set the key for live Claude.
Try the autonomous loop
curl -N -X POST localhost:8000/explore -H 'Content-Type: application/json' \
-d '{"goal":"maximize IPC for the JPEG workload","constraints":{"max_n_clusters":30}}'
# β {session_id}; then: curl -N localhost:8000/explore/{session_id}/stream
Test
python tests/explore/test_explore.py # loop, parser, pareto (pure)
python tests/agent_memory/test_agent_memory.py # vector recall (pure)
python tests/api/test_api_e2e.py # full API over HTTP (uvicorn running)
python tests/api/test_explore_api.py # autonomous /explore loop over SSE
π¬ Fetch.ai / ASI:One β run & submit
uAgents needs Python β₯3.10 β keep it in its own env (off the backend's deps):
conda create -n fetch python=3.11 -y && conda activate fetch
pip install uagents aiohttp
Single agent (primary): python backend/fetch_agents.py β runs the full
autonomous exploration on a chat message.
Multi-agent (bonus): python backend/fetch_bureau.py β 4 uAgents; the
Orchestrator runs a real sim, then delegates analysis to the 3 specialists over
Fetch and synthesizes. (Verify locally first: python tests/fetch/test_bureau_local.py.)
Submit (the two Devpost deliverables):
- Each agent prints an Agentverse inspector URL on startup. Log in at agentverse.ai, open it β Connect β Mailbox (allow Local Network Access) β you get a public Agent Profile URL for each agent.
- On asi1.ai, find your Orchestrator agent and chat it β copy the shared chat link. Put both (profile URLs + chat link) + this repo on Devpost. Keep the backend running β the agents call it over HTTP.
Tech stack
Claude (Haiku + Sonnet) Β· Fetch.ai uAgents + Chat Protocol + ASI:One Β· FastAPI + SSE Β· GPGPU-Sim (GTX 480/Fermi) in Docker Β· RedisVL + sentence-transformers Β· Redis Cloud Β· Sentry Β· React + TypeScript + Tailwind + Recharts.
Repo structure
backend/ docker_manager, config_generator, runner, stats_parser, report_parser,
models, store, redis_store, agent_engine, agent_memory, explore,
monitoring, main (FastAPI), fetch_agents + fetch_bureau (Fetch.ai)
agents/ the four agent prompts
tests/ per-module tests (pure + live)
docs/ API_FOR_FRONTEND.md (contract + integration notes), sample_report.json
Full API contract + frontend integration notes: docs/API_FOR_FRONTEND.md.
Analysis
View
Metric
- 36
- 28
- 1
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- AnthropicIn code
- CSSIn code
- FastAPIIn code
- HTMLIn code
- JavaScriptIn code
- PythonIn code
- ReactIn code
- RedisIn code
- Tailwind CSSIn code
- TypeScriptIn code
- DockerClaimed
10 of 11 appear in the indexed code. 1 claimed on Devpost could not be matched to code, which may simply mean the tool leaves no trace in the repository.
AI coding agents
- Claude CodeConfig Β· Commits
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
346 KB
Source files
73
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
DevMewada1299/gpu-arch-studio
115 files Β· 831 KB Β· @ b5f59d4
Structure
Interface
13 files Β· 11%Screens, components and styles rendered to the user.
Application logic
29 files Β· 25%Domain rules, services and shared utilities.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here β open the file browser to check anything the diagram implies.
Languages
- Python44%
- TypeScript33%
- Markdown23%
- CSS1%
- JavaScript0%
- HTML0%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
frontend/package.json
npm Β· 19- lucide-react
- react
- react-dom
- recharts
- +15 more
backend/requirements.txt
pypi Β· 10- anthropic
- docker
- fastapi
- hiredis
- python-dotenv
- redis
- redisvl
- sentence-transformers
- sentry-sdk[fastapi]
- uvicorn[standard]
Declared in the repositoryβs manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
This projectβs features have not been analysed yet.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.