hpc-runtime-doctor
>
pinned to #fa1ce8dupdated 2 weeks ago
Ask your AI client: “install skills/hpc-runtime-doctor”.
Requires the metahub MCP server installed in your client. Set up MCP.
mh install skills/hpc-runtime-doctormetahub onboarded this repo on the author's behalf.
If you own github.com/HeshamFS/materials-simulation-skills on GitHub, claim the listing to take over publishing. Your claim preserves the existing eval history and badges; only the curator label is replaced with verified-publisher on your next publish.
Stars
56
Last commit
2 weeks ago
Latest release
published
- #agent-skills
- #agents
- #cli-tools
- #computational-science
- #llm
- #materials-science
- #numerical-methods
- #simulation
- #skills
About this skill
Pulled from SKILL.md at publish time.
Allowed tools
- Read
- Bash
- Write
- Grep
- Glob
Evaluation report
WarningsAutomated checks the publisher passed at publish time — structure, docs, safety, and whether the artifact behaves as claimed.fa1ce8d· 2 weeks ago
Documentation
41Description qualitywarn
15 words · 131 chars — manifest description is empty; graded the GitHub repo description instead
A skill's manifest description doubles as its trigger — add one to SKILL.md (15+ words, e.g. “use this skill when …”).
README is present and substantial
8,414 chars · 9 sections · 5 code blocks
Tags / topics declared
9 total — agent-skills, agents, cli-tools, computational-science, llm, materials-science (+3)
README has usage / example sections
no labeled section but 5 code blocks document usage
Homepage / docs URL declared
no homepage declared (registry will use the repo URL) — info-only, not blocking
Release history
1- releasecurrentfa1ce8dwarn2 weeks ago
Contents
Goal
Turn cluster symptoms into a resource-layout diagnosis, environment checklist, and safe retry plan.
Requirements
- Python 3.10+
- No external dependencies
- Works on Linux, macOS, and Windows
Inputs to Gather
| Input | Description | Example |
|---|---|---|
| Scheduler | SLURM, PBS, LSF, local | slurm |
| Nodes/tasks/threads | Runtime layout | 2 nodes, 128 tasks, 2 threads |
| GPUs | Total (whole-job) GPUs via --gpus, or per node via --gpus-per-node | --gpus 4 or --gpus-per-node 1 |
| Symptoms | Observed failure | oom,killed,slow-gpu |
| MPI/OpenMP/GPU use | Parallel modes | mpi+openmp+gpu |
| Walltime | Requested time | 12:00:00 |
| Scratch | Whether scratch is used | true |
Decision Guidance
- Check resource layout before changing physics settings.
- Confirm module/compiler/MPI/CUDA consistency before debugging solver behavior.
- Treat missing restart files and scratch cleanup as workflow failures, not physics failures.
- For GPU jobs, confirm the executable was built with the requested accelerator backend.
Script Outputs
scripts/hpc_runtime_doctor.py emits:
resource_layout(includestasks_per_node,total_cpus, totalgpus, andgpus_per_node)diagnosesenvironment_checksretry_planscheduler_noteswarnings(layout flags such as ranks-per-GPU oversubscription, OpenMP/thread mismatch, and uneven task placement)
In default (non-JSON) mode the script also prints the resource-layout summary, any
warnings, environment checks, and retry plan, so the most actionable items are never hidden.
Workflow
--gpus is the total (whole-job) GPU count. Use --gpus-per-node (SLURM
--gres=gpu:N semantics) when you know the per-node allocation; total GPUs are then
gpus_per_node * nodes and it overrides --gpus.
python3 skills/hpc-deployment/hpc-runtime-doctor/scripts/hpc_runtime_doctor.py \
--scheduler slurm \
--nodes 2 \
--tasks 128 \
--cpus-per-task 2 \
--gpus 4 \
--symptoms oom,slow-gpu \
--uses-mpi \
--uses-openmp \
--uses-gpu \
--json
The example above shares 128 ranks across 4 GPUs (32 ranks/GPU), so the
warnings list surfaces Many MPI ranks per GPU (32.0 ranks/GPU) may reduce GPU efficiency. The ranks-per-GPU check uses total ranks over total GPUs, so it fires
correctly on multi-node jobs (the threshold is 16 ranks/GPU).
Error Handling
Invalid resource counts stop with exit code 2. Unknown symptoms are preserved as custom items for human review.
Limitations
This skill does not query a live scheduler. It diagnoses from the submitted layout and symptoms.
Verification checklist
- Recorded the script's
resource_layoutblock and confirmedtasks_per_nodeis an integer (no fractional value) andtotal_cpusequalstasks * cpus_per_task; iftasks_per_nodeis fractional, the uneven-placement warning was triaged before retrying. - For GPU jobs, recorded the resolved total
gpus(andgpus_per_nodewhen set) and computed ranks/GPU =tasks / gpus, confirming it is at or below the 16 ranks/GPU threshold or that the resultingMany MPI ranks per GPUwarning was deliberately accepted. - Reviewed every entry in the
warningslist (OpenMP-with-cpus_per_task=1, GPU-requested-but-zero-GPUs,tasks < nodes, uneven placement, scratch-for-heavy-I/O) and resolved or justified each one rather than ignoring it. - Completed the
environment_checksitems as real artifacts: captured the module list, executable path/version, MPI launcher-vs-library match, accelerator build flags (CUDA/Kokkos/OpenMP), and scheduler stdout/stderr. - Mapped each observed symptom to a
diagnosesentry and verified no symptom landed in thecustomcategory unaddressed (everycustomitem had stderr/stdout/module list/command line collected for human review). - Followed the
retry_plan: reran the smallest reproducing case, changed exactly one resource variable, enabled restart/checkpoint, and saved the scheduler script plus environment snapshot alongside the results.
Common pitfalls & rationalizations
| Tempting shortcut | Why it's wrong / what to do |
|---|---|
| "It ran without crashing, so the layout is fine." | Run completion is not correctness. Review the warnings list and resource_layout -- oversubscription, uneven placement, or an idle GPU can silently slow or corrupt results without a crash. |
| "Per-node ranks fit the GPUs, so there's no oversubscription." | Oversubscription is total ranks over total GPUs, not per-node. The script computes tasks / gpus; a multi-node job can hide a high ranks/GPU value that only the unit-consistent check exposes. |
"I passed --gpus, so per-node GPU count doesn't matter." | --gpus is the whole-job total. If the cluster allocates per node, use --gpus-per-node (SLURM --gres=gpu:N); it overrides --gpus and total becomes gpus_per_node * nodes. Mixing them up misreports ranks/GPU. |
| "The job was killed, so it's a physics/solver bug." | killed/oom/timeout are scheduler and resource categories, not physics. Check walltime, memory limits, and preemption from stdout/stderr before touching simulation parameters. |
| "An unknown symptom isn't in the rules, so I can skip it." | Unknown symptoms become custom diagnoses, not no-ops. Collect scheduler stderr/stdout, the module list, and the command line for human review -- silence is not a clean bill of health. |
| "Just change ranks, threads, and the build together to fix it faster." | Changing multiple variables at once makes the failure undiagnosable. The retry_plan mandates one variable at a time on the smallest reproducing case. |
Security
Input Validation
- Inputs are scalar CLI values and booleans only; there is no free-form code path.
- Resource counts (
--nodes,--tasks,--cpus-per-task,--gpus,--gpus-per-node) are validated as integers (booleans rejected), required to be non-negative and finite, and capped at 1,000,000.--nodes,--tasks, and--cpus-per-taskmust additionally be at least 1. Out-of-range, non-integer, or zero values exit with code 2. - The
--symptomsstring is capped at 64 comma-separated entries of at most 64 characters each;--walltimeis capped at 32 characters. Oversized input exits with code 2. - Symptoms are split, trimmed, and lower-cased. Unknown symptoms are not rejected: they are
preserved as
customdiagnoses for human review. --scheduleris accepted as a free-form string and is not checked against an allowlist; it is only echoed back in the resource layout.
File Access
- The script reads and writes no files. All I/O is CLI args in and stdout out
(indented JSON with
--json, otherwise a human-readable summary); errors go to stderr. - Because no paths are accepted or opened, there is no filesystem traversal surface and no path-sandboxing concern.
Tool Restrictions
allowed-toolsisRead, Bash, Write, Grep, Glob.Bashis used only to run the bundledscripts/hpc_runtime_doctor.py.Read,Grep, andGlobare used to inspect the skill's own files and any logs or submission scripts the user points at;Writeis used to record diagnosis notes or a retry plan when asked.
Safety Measures
- No
eval,exec,os.system, orsubprocess; the script does not launch a scheduler or any external process and does not inspect environment variables. - Argument parsing is handled by
argparse, and machine-readable output is emitted as JSON. - DoS exposure is bounded by the resource-count cap (1,000,000), the symptom caps (64 entries x 64 characters), and the walltime cap (32 characters).
References
- See
references/hpc_runtime_patterns.mdfor scheduler and runtime diagnosis patterns.
Version History
- 1.1.3: Added a Verification checklist (evidence-based items tied to
resource_layout,warnings, ranks/GPU,environment_checks,diagnoses, and theretry_plan) and a Common pitfalls & rationalizations table. - 1.1.1: Discriminating evals -- each case now pins the script's specific output
(exact ranks-per-GPU warning, diagnosis categories, resource-layout fields) via
deterministic
script_checks. - 1.1.0: Unit-consistent ranks-per-GPU warning (total ranks / total GPUs), new
--gpus-per-nodeargument, integertasks_per_nodewith an uneven-placement warning, full human-readable (non-JSON) output, and input caps for resource counts, symptoms, and walltime. - 1.0.0: Initial HPC runtime diagnosis skill.
Reviews
No reviews yet. Be the first.
Related
React Doctor
Your agent writes bad React. This catches it
Browser Use
🌐 Make websites accessible for AI agents. Automate tasks online with ease.
Guizang Ppt Skill
AI-agent Skill for generating polished HTML slide decks: editorial magazine and Swiss layouts, image prompts, social covers, and a WebGL/low-power presentation runtime.
mh install skills/hpc-runtime-doctor