
rocm-doctor
Diagnoses why ROCm, the HIP SDK, PyTorch, or llama.cpp is broken on an AMD GPU on Linux, Windows, or WSL2, then applies a low-risk fix with consent or hands back the exact next step. Also routes Lemonade, LM Studio, and Ollama problems to the right upstream channel. Use when the user reports that ROCm or HIP "isn't working", torch.cuda.isavailable() is False, rocminfo / hipInfo can't see the GPU, or hits hipErrorNoBinaryForGpu, HSASTATUSERRORINVALIDISA, "invalid device function", "no kernel image is available", cannot open /dev/kfd, permission denied on /dev/kfd, "ROCk module is NOT loaded", a missing libamdhip64.so / amdhip646.dll / hipblas.dll / vcruntime1401.dll, an HSAOVERRIDEGFXVERSION page fault, an iGPU+dGPU crash, a container that can't see the GPU, or an amdgpu-install / DKMS failure. Backed by the rocm CLI (rocm examine / rocm diagnose / rocm fix); this skill is a thin driver over those commands, not a re-implementation.
- Installs
- 383
- Last 24h
- +18
- Trending rank
- #6387
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/amd/skills --skill rocm-doctor- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads rocm-doctor automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
ROCm Doctor
Given a "ROCm / PyTorch / llama.cpp isn't working on my AMD GPU" complaint, identify which known misconfiguration is the cause and either fix it (with consent) or hand back the exact next step.
This skill does not probe or reason on its own. The rocm CLI owns the
probe, the closed failure-mode catalog, and the fixes; the skill just drives it
and relays the results. The catalog is a closed list — if the symptom
doesn't match a known mode, route the user upstream instead of guessing.
Scope gate — check before anything else
Read the user's symptom and answer one question first: is this an AMD GPU?
If it is not — an NVIDIA / Intel / Apple GPU — then stop and decline:
- Say plainly that it is out of scope for this skill and why (not an AMD GPU).
- Give no troubleshooting for it: no commands to run, no driver or CUDA advice, no diagnostic checklist, no "try this first" — not even generic GPU suggestions. Point at the vendor's own docs and stop there.
- Do not run
rocm examine/rocm diagnose/rocm fix.
Being helpful here means being honest about the boundary — confidently-wrong advice for a stack this skill does not cover is worse than no advice. Only continue past this gate when the GPU is AMD. See Out of scope.
WSL2 is in scope and does not stop this gate. It is a platform family of its
own, with its own catalog entries covering /dev/dxg, the DXCore handoff,
ROCDXG, the distro floor, the Windows host driver and WSL 1. Do not decline a
WSL2 user or route them away untouched — run the workflow as for any other
platform. The CLI scopes entries itself, so a bare-metal Linux fix is never
offered there.
Prerequisites
- The
rocmCLI. This skill is only a driver over it; Phase 0 below installs it with the user's consent ifrocm --versionfails. Nothing else here is assumed — the CLI does the probing. - Platform: native Linux (in-tree
amdgpumodule +/dev/kfd), Windows (HIP SDK), or WSL2 (/dev/dxg+ the Windows host driver). NVIDIA/Intel/Apple GPUs and clean-machine installs are out of scope (see Out of scope). - No fixed ROCm version, GPU arch (
gfx…), or container image is assumed —rocm examine/diagnosedetect the installed ROCm, the GPU'sgfxtarget, and container context, and match fixes to what they find. Never hand-setHSA_OVERRIDE_GFX_VERSION(or similar footgun env vars) yourself; let the CLI decide.
Workflow
Only start here once the Scope gate passes — the GPU is AMD. Linux, Windows and WSL2 all run the same workflow.
-
Ensure the
rocmCLI is present. Everything below shells out to it, so check first and install it if missing:rocm --versionIf that succeeds, skip to step 1. If it's not found, install it with the user's consent (this fetches and runs an installer that drops the
rocmandrocmdbinaries into~/.local/bin). Both installers default to thereleasechannel, so no channel argument is needed:- Linux (x86_64 only):
curl -fsSL https://raw.githubusercontent.com/ROCm/rocm-cli/main/install.sh | sh - Windows (PowerShell):
irm https://raw.githubusercontent.com/ROCm/rocm-cli/main/install.ps1 | iex
There is no macOS build.
install.shrefuses anything but Linux x86_64, so on any other host hand the user the install page and stop rather than suggesting the command anyway. To pin an unreleased build instead, passnightly(sh -s -- nightly, or$env:ROCM_CLI_CHANNEL = "nightly").After install, confirm
~/.local/binis onPATHand re-runrocm --version. If it still isn't available, hand the user the install page (https://github.com/ROCm/rocm-cli) and stop. - Linux (x86_64 only):
-
Diagnose. Pass the user's error text as the symptom:
rocm diagnose --symptom "<paste the exact error>" --jsonRead the JSON:
has_match— the gate. True means a cause cleared the threshold and you may propose a fix; false means nothing was established, so route upstream. Do not substitute "ismatchedempty?": several checkers open with a nonzero base score for a merely potentially relevant situation (a container, an APU beside a discrete GPU), so a healthy host still returns a non-emptymatchedof sub-threshold entries. Gating on emptiness proposes a fix for a machine with nothing wrong. True is not automatically the end of the question, either: adiagnose-onlytop match can clear the gate from host state alone, independent of whatever symptom was pasted — see the refinement in step 2.matched[]— ranked causes, each withid,title,score(0–100),evidence[], and afix(withfix_id,summary,commands,verify,notes, and theneeds_sudo/needs_reboot/needs_relogin/auto_applicableflags).score >= 75= high confidence;50–74= likely (confirm one more piece of evidence with the user first). Readfix.classbefore you propose anything.diagnose-onlymeans the cause is real and explained but has no remedy — currently onlyinfo-20-gpu-no-rocm-support, which carries aninfo-id rather than afix-N/fix-wsl-None for that reason.rocm fixstill takes that id and answers for it, by naming the problem and changing nothing.out_of_scope— set only when the host's platform family has no catalog entries at all. Linux, Windows and WSL2 are all covered, so this does not fire for WSL2. When it is set, nothing was checked — say so rather than implying the machine looks fine. First, if the user's symptom clearly names an app that ships its own runtime (Lemonade, Ollama, LM Studio), route them to that app's tracker (see Framework routing) — those trackers apply regardless of platform. Otherwise relay theout_of_scopemessage and stop.route_when_no_match— whenhas_matchis false, hand the user this upstream tracker; do not speculate. Note the CLI picks this target from the host-detected framework, not from the symptom text — so for an app named only in the symptom, route it yourself per Framework routing.
-
Propose the fix. Show the top match's
title,evidence, plan, andverifycommand. Only propose applying it when the user is on board.If the top match's
fix.classisdiagnose-only, there is no fix to propose: relay itstitleandevidenceas an explanation of the host and stop there — provided the user pasted no symptom, or the evidence plausibly accounts for the one they did. Adiagnose-onlycause likeinfo-20-gpu-no-rocm-supportscores from host state alone (the GPU architecture), not from the symptom, so it can be the top match even when the pasted text describes something the evidence never mentions — a crash in the engine actually running on this host, say, rather than anything about ROCm/HIP support. Relaying host-state evidence that does not address what the user pasted and stopping there would silently drop their actual complaint. If a symptom was pasted and this cause's evidence does not plausibly explain it, treat this cause as not having answered the question: say what it does establish about the host, then route upstream perroute_when_no_matchfor the pasted symptom itself, exactly as you would ifhas_matchwere false. You may mention a lower cause only if it also clearsmin_score_for_match— below that threshold nothing was established, which is the same bar thehas_matchparagraph above sets, and adiagnose-onlytop match does not lower it. -
Apply with consent. For an auto-applicable fix:
rocm fix <fix-id> # auto fixes: prompt before changing anything rocm fix <fix-id> --dry-run # show the exact change, touch nothing rocm fix <fix-id> --yes # required to apply in a non-interactive shellOnly the four auto-applicable fixes are ones the CLI runs itself. The other 23 are print-only (bootloader, kernel, reinstall, Windows driver, …):
rocm fix <id>just prints the plan for the user to run themselves — no prompt, and the CLI never performs those.One entry is in neither group.
info-20-gpu-no-rocm-supportis diagnose-only:rocm fixtakes the id, names the problem, says there is no reliable fix, and exits 0 having changed nothing.Of the four, two do not always mutate:
fix-2-unset-overridemutates on Windows only. On Linux it reports where the override is set and which rc files carry it, then stops — it will not edit the user's dotfiles. So there is no prompt to answer and nothing for--dry-runto preview. Tell the Linux user what to edit; do not describe it as a change the CLI made or previewed.fix-9-igpu-dgpumutates only when--device-index Nis passed. Without it — on either platform — the runner just prints therocminfo/hipInfoquery that identifies the discrete GPU's index and returns 0; there is no prompt, no--dry-runpreview, and nothing is pinned. Once the user knows N, re-run withrocm fix fix-9-igpu-dgpu --device-index N.
-
Verify. Have the user run the
verifycommand from the diagnosis.
Use rocm examine (or rocm examine --json) when you only need the host state
(GPU, driver, ROCm install, groups, framework) without a diagnosis.
Framework routing
rocm diagnose covers frameworks that build against the system ROCm/HIP:
- PyTorch, llama.cpp — in scope; diagnose normally.
Apps that ship their own ROCm runtime aren't diagnosed here — route the user
to the right tracker. This routing is yours, not the CLI's: the host probe
reports only pytorch, llama-cpp or unknown, so route_when_no_match can
never name one of these apps. Use the list below.
- Lemonade → https://github.com/lemonade-sdk/lemonade/issues
- Ollama → https://github.com/ollama/ollama/issues
- LM Studio → in-app support (no public repo)
- Anything else with no catalog match → ROCm core:
https://github.com/ROCm/ROCm/issues (this is what
route_when_no_matchreturns by default).
Out of scope
- NVIDIA / Intel / Apple Silicon GPUs, and fresh installs on a clean machine (a setup task, not a diagnosis). Exit cleanly and say so.
WSL2 is not in this list. It is a supported platform family with its own catalog entries — see reference.md.
Rules
- Never run the workflow — or offer any troubleshooting, generic GPU fixes included — for a non-AMD GPU. State it is out of scope and stop. This does not apply to WSL2, which is in scope and runs the normal workflow.
- Never invent a fix. If
rocm diagnosereturns no match, route upstream. - Never run a mutating fix without the user's explicit OK; prefer
--dry-runfirst. New failure modes are added to the CLI catalog, not improvised here.
See reference.md for the full closed catalog and the CLI command/exit-code reference.
FAQ
What does the rocm-doctor skill do?
Diagnoses why ROCm, the HIP SDK, PyTorch, or llama.cpp is broken on an AMD GPU on Linux, Windows, or WSL2, then applies a low-risk fix with consent or hands back the exact next step. Also routes Lemonade, LM Studio, and Ollama problems to the right upstream channel. Use when the user reports that ROCm or HIP "isn't working", torch.cuda.isavailable() is False, rocminfo / hipInfo can't see the GPU, or hits hipErrorNoBinaryForGpu, HSASTATUSERRORINVALIDISA, "invalid device function", "no kernel image is available", cannot open /dev/kfd, permission denied on /dev/kfd, "ROCk module is NOT loaded", a missing libamdhip64.so / amdhip646.dll / hipblas.dll / vcruntime1401.dll, an HSAOVERRIDEGFXVERSION page fault, an iGPU+dGPU crash, a container that can't see the GPU, or an amdgpu-install / DKMS failure. Backed by the rocm CLI (rocm examine / rocm diagnose / rocm fix); this skill is a thin driver over those commands, not a re-implementation.
How do I install rocm-doctor?
Run npx skills add https://github.com/amd/skills --skill rocm-doctor in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/rocm-doctor/ (personal) or .claude/skills/rocm-doctor/ (project).
Which AI agents can use rocm-doctor?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is rocm-doctor safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains rocm-doctor?
It is published by amd in amd/skills. It has 383 recorded installs.
More from amd/skills
local-ai-use
amd/skills
Makes this agent generate images, transcribe audio, and synthesize speech on the user's own machine through a local Lemonade Server instead of a paid cloud API. Use it above all to change that routing persistently, from now on — keep generating pictures locally while chat stays on the cloud; set this workspace up to make images on my own machine — even when the user asks for no image or file in the same breath. Also use it for a single request the user wants done locally, offline, on-device, or kept private: transcribe this recording, make this picture, read this text aloud. Applies in Claude, Cursor, Codex, or any agent harness. Use when the user wants to cut cost or tokens on image, audio, or voice API calls, or to drop DALL-E, hosted Whisper, ElevenLabs, or other paid multimodal APIs; or mentions Lemonade Server, OmniRouter, SD-Turbo, kokoro, Ryzen AI, or NPU/iGPU/dGPU inference. Changes no application source code; do not use it if the user is adding local AI to an app they ship.
local-ai-app-integration
amd/skills
Integrates local AI capabilities into applications using Embeddable Lemonade. Use when the user wants to add local AI, offline AI, private AI, on-device AI, a local LLM, local chat, embeddings, image generation, speech-to-text, or text-to-speech to an existing app; replace or supplement OpenAI, Anthropic, Ollama, or other cloud AI APIs with a local backend; only use to convert user apps. Do not use when the user just wants the agent itself to generate images, transcribe, or speak locally in the current workspace, even to cut their own API bill.
tracelens-analysis-orchestrator
amd/skills
Orchestrates modular PyTorch profiler trace analysis with TraceLens: generates perf reports, prepares category data, runs system-level and compute-kernel subagents in parallel, validates outputs, and writes a prioritized stakeholder report (analysis.md). Use when the user asks to follow the analysis orchestrator, run the agentic analysis workflow, analyze a trace, compare two traces, or mentions standalone or comparative TraceLens analysis.
serving-llms-on-instinct
amd/skills
Serves AI models on AMD Instinct GPU hardware using vLLM. Use this skill whenever the user wants to run, serve, deploy, start, host, or launch a language model on an AMD GPU, AMD Instinct, MI300X, MI325X, MI350X, or MI355X. Also use when the user mentions vLLM on ROCm, vLLM on AMD, serving on HBM, or asks how to get a model running on AMD data center hardware. Use when the user asks "run Qwen3", "serve DeepSeek", "start a vLLM endpoint", "get a model running on my AMD machine", or any similar phrasing. Handles the full flow: GPU detection, environment validation, vLLM configuration, launch, and health verification. Do not use for NVIDIA GPUs, consumer AMD GPUs (RX series, Radeon), Ryzen AI, NPU, MI250X, or MI100.
magpie-kernel-evaluator
amd/skills
Benchmarks LLM inference and drives GPU kernel optimization with Magpie. Use when the user wants to benchmark vLLM, SGLang, or Atom; capture torch traces; post-process inference traces with TraceLens into prefill/decode and roofline reports; identify top bottleneck kernels or map profiler names to source; analyze or compare HIP, CUDA, PyTorch, or Triton kernels; validate and rank optimized variants; run local, container, or Ray workloads; or mentions Magpie, TraceLens, gap analysis, TTFT, TPOT, kernel evaluation, or AMD GPU optimization.
serving-llms-on-epyc
amd/skills
Serves an LLM on a supported AMD EPYC server CPU using vLLM with zentorch, in Docker, Podman, or conda. Use for "vLLM on CPU", "zentorch serving", or an EPYC CPU endpoint, including on a host that also has AMD Instinct GPUs. Detects the EPYC generation, validates the runtime, checks model support and RAM fit, sizes threads/KV/NUMA, confirms the plan, launches, and verifies the endpoint. Runs one instance on one socket and its memory. Reports and stops on failure; does not retry or debug. Use serving-llms-on-instinct when the endpoint should run on a GPU. Excludes multi-node, EPYC 4000, and pre-Zen4 EPYC without AVX-512.
Popular devops & cloud skills
microsoft-foundry
microsoft/azure-skills
Build, deploy, evaluate, optimize, fine-tune, and manage Microsoft Foundry agents, models, and resources end to end. USE FOR: foundry, azd ai agent, azd provision/deploy, hosted agent scaffold/develop/run/deploy/troubleshoot, prompt agent create, managed harness agent create, GitHub Copilot harness agent, create agent, update agent, add tool to agent, invoke agent, agent insights, evaluate agent, batch eval, continuous eval, continuous monitoring, agent CI/CD, optimize prompt, improve prompt, optimize agent instructions, Agent Optimizer scaffold, dataset curation from traces, deploy model, model fine-tuning (SFT/DPO/RFT), Foundry project, RBAC, role assignment, permissions, quota, capacity, region, deployment failure, AI Services, create Foundry resource, knowledge index, customize deployment, onboard, availability, training-data, grader, distillation, large file upload. DO NOT USE FOR: Azure Functions, App Service, general Azure deploy (use azure-deploy), general Azure prep (use azure
azure-diagnostics
microsoft/azure-skills
Debug Azure production issues on Azure using AppLens, Azure Monitor, resource health, and safe triage. WHEN: debug production issues, troubleshoot app service, app service high CPU, app service deployment failure, troubleshoot container apps, container app 503 or target port mismatch, troubleshoot functions, function telemetry missing or stopped after a config/connection-string change, troubleshoot AKS, VM RDP, Linux SSH, VM black screen, can't connect to VM, reset VM password, NSG or firewall blocking, kubectl cannot connect, kube-system/CoreDNS failures, pod pending, crashloop, node not ready, upgrade failures, analyze logs, KQL, insights, image pull failures, cold start issues, health probe failures, resource health, root cause of errors, troubleshoot event hubs, troubleshoot service bus, messaging SDK error, AMQP connection failure, message lock lost, lock renewal during long-running processing, service bus dead letter.
azure-prepare
microsoft/azure-skills
Prepare azd-based Azure projects for deployment: generates azure.yaml, infrastructure (Bicep/Terraform), and Dockerfiles for the Azure Developer CLI (azd) workflow. USE ONLY when the user explicitly wants to use azd as the deployment tool, or the project already has an azure.yaml file. DO NOT USE FOR: non-azd deployments, Python App Service code-only deploys (use python-appservice-deploy), or cross-cloud migration (use azure-cloud-migrate). WHEN: prepare app for azd, create azure.yaml, set up azd infrastructure, modernize app for Azure with azd, deploy with azd, function app, timer trigger, service bus trigger, event-driven function, managed identity, generate Bicep, generate Terraform, create and deploy to Azure.
azure-ai
microsoft/azure-skills
Use for Azure AI: Search, Speech, OpenAI, Document Intelligence. Helps with search, vector/hybrid search, speech-to-text, text-to-speech, transcription, OCR. WHEN: AI Search, query search, vector search, hybrid search, semantic search, speech-to-text, text-to-speech, transcribe, OCR, convert text to speech.
azure-deploy
microsoft/azure-skills
Execute Azure deployments for ALREADY-PREPARED applications that have existing .azure/deployment-plan.md and infrastructure files. DO NOT use this skill when the user asks to CREATE a new application — use azure-prepare instead. This skill runs azd up, azd deploy, terraform apply, and az deployment commands with built-in error recovery. Requires .azure/deployment-plan.md from azure-prepare and validated status from azure-validate. WHEN: "run azd up", "run azd deploy", "execute deployment", "push to production", "push to cloud", "go live", "ship it", "bicep deploy", "terraform apply", "publish to Azure", "launch on Azure". DO NOT USE WHEN: "create and deploy", "build and deploy", "create a new app", "set up infrastructure", "create and deploy to Azure using Terraform" — use azure-prepare for these.
azure-validate
microsoft/azure-skills
Pre-deployment validation for Azure readiness. Run deep checks on configuration, infrastructure (Bicep or Terraform), RBAC role assignments, managed identity permissions, and prerequisites before deploying. WHEN: validate my app, check deployment readiness, run preflight checks, verify configuration, check if ready to deploy, validate azure.yaml, validate Bicep, test before deploying, troubleshoot deployment errors, validate Azure Functions, validate function app, validate serverless deployment, verify RBAC roles, check role assignments, review managed identity permissions, what-if analysis, validate Container Apps deployment.