ai-dynamo/aisimulate/aic-auto-collect
Claude Code and agent skill by ai-dynamo/aisimulate
- community
Checking that the SKILL.md file is still in the repository.
Use when running long AIC/aiconfigurator GPU perf auto-collection for a specific GPU/framework/framework_version, including draft-PR checkpoints, resumable collect_xx.py runs, framework-version/kernel preflight, collector fixes/skips, special runtime images, validation, and PR handoff.
Install
npx vskill@latest install ai-dynamo/aisimulate/aic-auto-collectSKILL.md
AIC Auto Collect
Start with the project playbook
Read `docs/perf-model/collector/upgrade.md` before changing collector code: it is the canonical upgrade/bring-up workflow. This skill is the run pipeline; the repository-owned policy in .claude/rules/collector/ is authoritative over anything restated here.
Goal
You are already on a GPU node with one or more GPUs. Your job is to collect AIC perf data for one target (GPU system, framework/backend, framework version), fix collector failures, recollect until the perf files are good enough, verify AIC can consume the new data, and maintain a draft PR to ai-dynamo/aiconfigurator as the checkpoint.
This is a long-running workflow. Be persistent. Iterate carefully. Do not hide failures by shrinking coverage or deleting hard cases unless the configuration is genuinely unsupported and documented.
Operating Mode
Assume the user wants the complete bring-up unless they explicitly ask for a smoke test only.
- Run collectors inside the target backend runtime containers. Do not claim data was collected for a backend/version unless the collector code ran in that container on the target GPU.
- Full collection means every supported registry op for the requested backend/version has either finished with real rows or is explicitly unsupported by that runtime/GPU with evidence.
- Smoke and
--limitruns are only gates before the full run; never present them as final data. - Keep working through multi-hour or multi-day runs. Use stable resume checkpoints, inspect errors, patch, and retry.
- The unit of work is one draft PR per
(system, backend, backend_version). Use that PR as the checkpoint, not a private local branch. - Make small sign-off commits as progress checkpoints after each
collect_xx.py/op-family collection finishes. If a single collection runs longer than about one hour, checkpoint safe collector fixes, current perf outputs, and the failure/status summary before continuing. - If multiple frameworks are requested, finish and checkpoint one framework/version PR first, then create a new draft PR for the next framework/version.
- Do not synthesize missing rows. An unsupported runtime or kernel path gets a
collector/skips.pyentry or fails and is recorded; it is never filled with fake numbers. - If the PR body says customer support is ready, verify the default AIC workflow can actually choose a valid configuration for at least the expected representative model/backend/system path.
Required Inputs
Establish these before collecting:
- Target AIC repo and branch.
- Target backend and version:
sglang,vllm, ortrtllm. Treat "all three" as an ordered queue of separate draft PRs. - Target runtime container image for each backend, such as:
nvcr.io/nvidia/ai-dynamo/tensorrtllm-runtime:<tag>nvcr.io/nvidia/ai-dynamo/sglang-runtime:<tag>nvcr.io/nvidia/ai-dynamo/vllm-runtime:<tag>- Target system name, such as
rtx_pro_6000_server. - Target ops: start narrow, then expand to all relevant registry ops.
- Whether to collect power columns.
- Whether the GPU type is already supported by AIC.
Discover the node:
Protect the host and other workloads
Run framework inspection and collection inside the pinned container. Treat the host driver, CUDA toolkit, kernel, container runtime, and system packages as immutable.
Before every GPU run, inspect:
Use task-unique container names and persistent output/checkpoint/log roots. Clean only task-owned workers and containers. Never kill or restart another container, restart Docker, or run a global prune. If another workload blocks the run, report it.
When the runtime root is read-only, mount every framework JIT/cache location that the selected path may create, not only the generic XDG cache. This can include DeepGEMM (~/.deep_gemm or DG_JIT_CACHE_DIR), TensorRT-LLM, TileLang, Triton/TorchInductor, CUDA, and FlashInfer caches. A family-wide EROFS failure while creating one of these directories is runner plumbing, not evidence that its shapes or kernel are unsupported. Preserve the rejected attempt, fix only the task runner, and rerun in a fresh namespace.
Treat an OOM as unclassified until the same case fails on a clean GPU. Check for stale workers, retained weights, descriptor/JIT caches, and oversized dummy allocations before adding a capacity rule.
Phase 1: Prepare Repo
- Clone or update
ai-dynamo/aiconfigurator. - Create a branch named like
data/<system>-<backend>-<version>orcodex/<system>-<backend>-<version>. - Immediately create a draft PR for this
(system, backend, version)once the branch exists and the scope is known. Use it as the remote checkpoint even before all data is ready. - Install only lightweight local dev dependencies needed for tests. Do not install the target backend locally unless the collector is not running in a backend container.
- Set:
Local validation often works with the repo's pinned environment:
If the local uv environment lacks framework packages such as torch, run framework-dependent collector smoke tests in the runtime container instead of trying to mutate the host environment.
Container pattern:
Inside the container, record the real framework version:
Update the draft PR body whenever scope changes or a meaningful checkpoint lands. Include current status, what is still partial, and links or paths to failure summaries.
Phase 2: Add Or Validate System Metadata
If the system is new or incomplete:
- Add
src/aisimulate_core/systems/<system>.yaml. - Add
<system>toSupportedSystemsin
src/aisimulate_core/sdk/common.py.
- Create
src/aisimulate_core/systems/data/<system>/. - Populate YAML with conservative, documented values:
gpu.mem_bwgpu.mem_capacity- tensor core FLOPS fields relevant to the architecture
gpu.powergpu.sm_versionnode.num_gpus_per_node- inter-node, intra-node, PCIe bandwidth
misc.nccl_versionmisc.other_mem
Prefer verified values from nvidia-smi, node docs, or nearby existing YAML files. If a value is an estimate, leave a comment.
Run:
Phase 3: Framework Version And Kernel Preflight
Before collecting a new framework version or a new GPU SM target, check whether collector code matches the runtime. This avoids spending hours on known-bad grids.
- Record the exact runtime package version from inside the container. Do not trust only the image tag.
- Inspect
collector/<backend>/registry.pyfor version routes and the concretecollect_xx.pyfiles registered for this version. - Read the op's
collector/skips.pyentries and the top of each relevantcollect_xx.pyfile: docstring,__compat__and deviation notes. - Compare against the framework source for the exact version/tag when there is any sign of API or kernel churn:
- SGLang: attention backends, DeepGEMM, FlashInfer, DeepSeek/DSV module code, MoE runner paths.
- vLLM: attention/MLA modules, quantized GEMM paths, GDN/Mamba modules, custom all-reduce.
- TRT-LLM: attention plugins, MLA/DSA modules, MoE, compute-scale, GDN/Mamba modules.
- For a new SM such as SM120, check kernel architecture support before full collection: tiny smoke cases, import probes, and direct framework source guards.
- When the runtime cannot run a whole block (an op, dtype or model on this SM), add a
collector/skips.pyentry with the reason before full collection, rather than discovering the same failure across thousands of tasks. Scattered failures still run and are recorded. - If a special framework image exists for a model family or kernel family, try that image before declaring the op unsupported. Record its exact package version and image digest.
Commit and push preflight collector fixes before starting long full runs.
Phase 4: Choose Collection Plan
Read the backend registry:
Recommended order:
gemmmoe- attention / MLA ops
- module-level ops such as DSA, GDN, MHC, WideEP
- communication ops separately, because they may require multi-GPU or full-node ownership
Collect only what the question needs (.claude/rules/collector/overview.md, "Collection cost"). An upgrade or a fix runs the affected ops and cases on one system per SM generation. A full plan is for bringing up a new system, or for a family whose kernels changed at a pin bump; the other families declare reuse. To run exact cases, pass each case's full string as its own --case-filter, for example --case-filter "['fp8_block', 64, 32, 4096]". --plan-only --sm <sm> --plan-table DIR lists every planned case of an op.
For new GPUs, prioritize ops used by the target models and backend first, but do not claim full support until all expected ops for that backend/version are collected or explicitly marked unsupported.
For an all-backend bring-up, run this as separate draft PRs:
- Finish one GPU/framework/framework_version PR.
- Push final data and collector fixes for that framework.
- Create the next draft PR for the next framework/version.
For each backend/version, enumerate registry ops and create a tracking table with: op, collector file, perf filename, smoke status, full status, row count, duplicate-key status, AIC sanity status, and unsupported notes. Keep this table in a local scratch file and summarize it in the PR body.
Phase 5: Progressive Collection Loop
For each op:
Campaign mode (full plan, several GPUs) — use the checked-in launcher, do not hand-roll one
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingpython/aisimulate/.claude/skills/aic-auto-collect/SKILL.md
Popularity
- Repository stars
- 98
- Repository forks
- 45
- 7-day trend score
- 0
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/ai-dynamo/aisimulate/aic-auto-collect)