Official agent skill

WebGPU Provider Testing Without a GPU

by microsoft in microsoft/onnxruntime

Shows how to build and run ONNX Runtime WebGPU provider tests on Linux with no GPU, using the Mesa lavapipe software Vulkan adapter, and where that approach falls short.

OfficialMITAuto-check passedTesting & QA

Install WebGPU Provider Testing Without a GPU

skills CLI
$ npx skills add microsoft/onnxruntime --skill webgpu-local-testing -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install microsoft/onnxruntime webgpu-local-testing --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/microsoft/onnxruntime.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.github/skills/webgpu-local-testing .claude/skills/webgpu-local-testing && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
webgpu-local-testing
GitHub stars
22k
Token cost
~1.4k tokens
SKILL.md length
595 words
Files
1
Skills in repo
14
Repo updated
First seen
Licence
MIT

At a glance

Shows how to build and run ONNX Runtime WebGPU provider tests on Linux with no GPU, using the Mesa lavapipe software Vulkan adapter, and where that approach falls short.

  • Works in 6 steps: Why software Vulkan is enough → Install the software Vulkan stack (Azure… → Build with --use_webgpu → …
  • Running WebGPU kernel correctness tests on a Linux box with no GPU
  • SKILL.md covers 1. Why software Vulkan is enough, 2. Install the software Vulkan…, 3. Build with --use_webgpu and 4. Run the WebGPU provider tests, plus 2 more sections
  • Calls dnf

What it does

On Linux the ONNX Runtime WebGPU execution provider runs on Dawn with the Vulkan backend, and Mesa lavapipe is a CPU-based Vulkan adapter that Dawn treats like any device. The skill explains why that is enough for correctness checks: many host-side validation paths, such as shape and broadcast enforcement, fire before any shader is dispatched, and element-wise and broadcasting kernels run correctly if slowly. It covers installing `mesa-vulkan-drivers` and `vulkan-loader` with `dnf` on Azure Linux, the `--use_webgpu` build flag, the `onnxruntime_provider_test` target and `VK_ICD_FILENAMES`.

The scope is strict: lavapipe validates host-side enforce and shape bugs and MatMul-free kernels only. Any graph containing a MatMul, including the expanded Attention node tests, crashes lavapipe's LLVM JIT, and for those macOS arm64 Metal is the source of truth. The skill says never to treat a green lavapipe run as validating an Attention or MatMul fix, and it is not a substitute for a real GPU on performance-sensitive paths. The excerpt is truncated.

When your agent uses it

  • Running WebGPU kernel correctness tests on a Linux box with no GPU
  • Checking a host-side shape or broadcast enforce fix for the WebGPU provider
  • Debugging a lavapipe crash on a graph that contains MatMul

Example prompts

  • “Build ONNX Runtime with WebGPU on this Linux machine and run the provider tests on software Vulkan.”
  • “Can I validate this Attention fix with lavapipe, or does it need macOS Metal?”
  • “Set up Mesa lavapipe and show me how to point VK_ICD_FILENAMES at it.”

Requirements

  • A Linux host, with `dnf` on Azure Linux, to install Mesa Vulkan drivers
  • An ONNX Runtime source checkout built with `--use_webgpu`

Workflow steps

6 steps, taken from the step headings in SKILL.md.

  1. Why software Vulkan is enough
  2. Install the software Vulkan stack (Azure Linux — use dnf, NOT apt)
  3. Build with --use_webgpu
  4. Run the WebGPU provider tests
  5. Gotcha: lavapipe crashes on the MatMul family
  6. Why this matters: the Linux webgpu CI leg is build-only

What it can do on your machine

Read from SKILL.md and the folder at commit a571b72. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • dnf

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

WebGPU Provider Testing Without a GPU loads about 1.4k tokens when it runs. Until then it costs about 184 tokens; SKILL.md has 595 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~184
When it runs · the whole SKILL.md, loaded when a task matches
~1.4k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from microsoft/onnxruntime at commit a571b72, republished under its MIT licence (© microsoft). 595 words, ~1,435 tokens.

Download SKILL.mdSave it as .claude/skills/webgpu-local-testing/SKILL.md (or your agent's skills folder).
name
webgpu-local-testing
description
Build and run ONNX Runtime WebGPU provider tests on Linux WITHOUT a real GPU, using a software Vulkan adapter (Mesa lavapipe). Use when you need to exercise WebGPU EP kernels off-Mac — the Linux webgpu CI leg is build-only, so software Vulkan is how you actually run WebGPU correctness tests locally. SCOPE - lavapipe only validates host-side enforce/shape bugs and MatMul-free kernels; any graph containing MatMul (including the expanded-Attention node tests) crashes lavapipe and runs ONLY on macOS-arm64 Metal, which is the source of truth for those. Covers install (dnf on Azure Linux), the --use_webgpu build flag, the onnxruntime_provider_test target, VK_ICD_FILENAMES, and the lavapipe MatMul crash gotcha.

Running ONNX Runtime WebGPU Tests Locally on Linux (No GPU)

Reusable knowledge for exercising the WebGPU execution provider on a Linux box with no physical GPU.

Scope: Linux ORT WebGPU only. macOS uses the Metal backend and a real GPU; this skill is the off-Mac story for running WebGPU EP kernels in CI-less dev loops.

1. Why software Vulkan is enough

On Linux, ORT's WebGPU EP runs on Dawn with the Vulkan backend. Vulkan does not require a hardware GPU — Mesa lavapipe is a software (CPU) Vulkan adapter that Dawn enumerates like any other device. For EP correctness tests this is sufficient because:

  • Many host-side validation paths (shape/broadcast checks, ORT_ENFORCEs) fire before any shader is dispatched. E.g. the WebGPU broadcast ORT_ENFORCE runs host-side, so the failure is observable on a software adapter without ever touching the GPU.
  • Element-wise and broadcasting kernels that do dispatch run correctly (if slowly) on lavapipe, so their numeric output can be validated against the CPU reference.

You are trading speed for not needing hardware. It is not a substitute for a real GPU on perf-sensitive or driver-specific paths — but for kernel correctness it is the practical local loop.

Scope — what lavapipe can and cannot validate. Software Vulkan covers (a) host-side failures (shape/broadcast ORT_ENFORCEs that fire before any shader dispatch) and (b) MatMul-free kernels that dispatch. It does NOT cover any graph that contains a MatMul — the MatMul family crashes lavapipe's LLVM JIT (see §5). This explicitly includes the motivating expanded-Attention node tests (test_attention_4d_softcap_neginf_mask_expanded): they decompose to softmax(Q·Kᵀ + bias)·V, which contains MatMuls, so they cannot run on lavapipe. For those, macOS-arm64 Metal is the source of truth. Concretely, the #28969 WebGPU broadcast-underflow fix was validated on lavapipe via a standalone Add-broadcast OpTester proxy (a host-side enforce/shape path) — NOT via the expanded-Attention node test. Never run lavapipe green and conclude an Attention/MatMul fix is validated off-Mac.

2. Install the software Vulkan stack (Azure Linux — use dnf, NOT apt)

bash
dnf install -y mesa-vulkan-drivers vulkan-loader
# optional, for sanity-checking the adapter:
dnf install -y vulkan-tools && vulkaninfo | head

mesa-vulkan-drivers provides lavapipe; vulkan-loader provides the ICD loader. The lavapipe ICD manifest lands at /usr/share/vulkan/icd.d/lvp_icd.<arch>.json — lvp_icd.x86_64.json on x86_64, lvp_icd.aarch64.json on arm64. The examples below use the x86_64 name; substitute your arch, or glob it: VK_ICD_FILENAMES=$(echo /usr/share/vulkan/icd.d/lvp_icd.*.json).

Show full SKILL.md (238 more words)Show less

3. Build with --use_webgpu

bash
./build.sh --config Release --parallel --use_webgpu

See the ort-build skill for general build phases and flags.

4. Run the WebGPU provider tests

WebGPU operator/kernel tests are provider op tests — they build into the onnxruntime_provider_test target (NOT onnxruntime_test_all; see the ort-test skill for the executable taxonomy). Point the Vulkan loader at the lavapipe ICD and select a subset with --gtest_filter:

bash
cd build/Linux/Release
VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/lvp_icd.x86_64.json \
  ./onnxruntime_provider_test --gtest_filter="*WebGPU*"

VK_ICD_FILENAMES forces Vulkan to load only lavapipe, so the run is deterministic regardless of what else is installed.

5. Gotcha: lavapipe crashes on the MatMul family

MathOpTest.MatMulFloatType (and other MatMul-family tests) crash lavapipe with:

LLVM ERROR: Instruction Combining did not reach a fixpoint after 1 iterations

This is a pre-existing limitation of software Vulkan (Mesa lavapipe's LLVM JIT), not an ORT bug. Exclude the MatMul family from broad lavapipe runs:

bash
VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/lvp_icd.x86_64.json \
  ./onnxruntime_provider_test --gtest_filter="*WebGPU*:-*MatMul*"

6. Why this matters: the Linux webgpu CI leg is build-only

The Linux webgpu CI leg (.github/workflows/linux_webgpu.yml) only builds — it does not run WebGPU kernels. A green Linux webgpu leg therefore does not mean any WebGPU test actually executed. The macOS-arm64 webgpu leg is the only CI leg that runs WebGPU backend node tests. So a local lavapipe run is the practical way to actually exercise WebGPU kernels off-Mac before you push.

But mind the §1 scope: lavapipe covers host-side enforce/shape paths and MatMul-free kernels only. Any MatMul-containing graph — including the expanded-Attention node tests (test_attention_4d_softcap_neginf_mask_expanded) — crashes lavapipe and runs only on the macOS-arm64 Metal leg, which is the source of truth for those. A green lavapipe run never validates a MatMul/Attention fix off-Mac.

© microsoft, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .github/skills/webgpu-local-testing of microsoft/onnxruntime.

Open the folder on GitHubat commit a571b72

Compare with similar skills

WebGPU Provider Testing Without a GPU next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

WebGPU Provider Testing Without a GPU compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
WebGPU Provider Testing Without a GPU this skillmicrosoft/onnxruntime22k—~1.4kAutomated safety check: PassMIT
Avm Tf TestingAzure/terraform-azurerm-avm-ptn-alz135—~1.8kAutomated safety check: PassMIT
Testingstatic-web-server/static-web-server2.4k—~1.5kAutomated safety check: PassApache-2.0
Verify Changes389ds/389-ds-base294—~1.9kAutomated safety check: PassCustom licence
Debug E2E Pipelinekubernetes-sigs/cloud-provider-azure294—~3.4kAutomated safety check: PassApache-2.0
Debug Failing GPUfacebookexperimental/triton201—~709Automated safety check: PassMIT

Similar skills

  • Avm Tf Testing

    Azure/terraform-azurerm-avm-ptn-alz

    Official

    A skill your agent uses for AVM Terraform validation, provider-mocked unit tests, real-Azure integration tests, E2E example tests, PowerShell hooks, OIDC, policy checks, and Avm.Authoring CI behavior.

    135 GitHub stars~1.8k tokensUpdated 2 days ago
    Testing & QAAuto-check passed
  • Testing

    static-web-server/static-web-server

    Write or review tests for the Static Web Server (SWS) project — unit tests, integration tests, test fixtures, and mocking strategies

    2.4k GitHub stars~1.5k tokensUpdated today
    Testing & QAAuto-check passed
  • Verify Changes

    389ds/389-ds-base

    Verify a 389-ds-base change by routing through the environment's build/test skill — static Python gates plus, via that skill, C compile, cmocka, RPM build and pytest suites, cargo tests, and the…

    294 GitHub stars~1.9k tokensUpdated today
    Testing & QAAuto-check passed
  • Debug E2E Pipeline

    kubernetes-sigs/cloud-provider-azure

    Official

    Fetch and analyze Prow e2e pipeline failures for cloud-provider-azure.

    294 GitHub stars~3.4k tokensUpdated today
    Testing & QAAuto-check passed
  • Debug Failing GPU

    facebookexperimental/triton

    Official

    Recover from GPU-busy / GPU-unavailable failures. An agent skill from facebookexperimental/triton.

    201 GitHub stars~709 tokensUpdated today
    AI & LLM EngineeringAuto-check passed
  • Ue Unit Test

    getsentry/sentry-unreal

    Official

    Run Sentry unit tests via Unreal automation. An agent skill from getsentry/sentry-unreal.

    173 GitHub stars~756 tokensUpdated today
    Testing & QAAuto-check passed

More from microsoft/onnxruntime

All 14 skills in this repo
  • Official

    Finds and fixes out-of-range output writes in ONNX Runtime operator shape-inference functions where a getNumOutputs guard admits too few outputs.

    22k GitHub stars~3.3k tokensUpdated today
    Auto-check passed
  • Official

    Explains why editing CUTLASS fused-MHA headers in ONNX Runtime can leave stale CUDA kernels after an incremental build, and how to force and verify a real rebuild.

    22k GitHub stars~1.3k tokensUpdated today
    Auto-check passed
  • ONNX Runtime Source Build

    microsoft/onnxruntime

    Official

    Builds ONNX Runtime from source with its build scripts, explaining the update, build and test phases, key flags and where the build output lands.

    22k GitHub stars~1.4k tokensUpdated today
    Auto-check passed
  • ONNX Runtime CI Management

    microsoft/onnxruntime

    Official

    Triggers, re-runs and unblocks the CI checks on an ONNX Runtime pull request, after diagnosing whether a failure is transient or needs a code change.

    22k GitHub stars~4.1k tokensUpdated today
    Auto-check passed
  • ONNX Runtime Release Notes

    microsoft/onnxruntime

    Official

    Drafts ONNX Runtime release notes from commit history and contributor metadata using named presets for the full runtime or a scoped component.

    22k GitHub stars~1.6k tokensUpdated today
    Auto-check passed
  • ONNX Runtime Test Runner

    microsoft/onnxruntime

    Official

    Runs and debugs ONNX Runtime tests: Google Test executables for C++ and unittest or pytest for Python, with filters and build-directory guidance.

    22k GitHub stars~1.8k tokensUpdated today
    Auto-check passed

Questions about WebGPU Provider Testing Without a GPU

What does WebGPU Provider Testing Without a GPU do?

Shows how to build and run ONNX Runtime WebGPU provider tests on Linux with no GPU, using the Mesa lavapipe software Vulkan adapter, and where that approach falls short. On Linux the ONNX Runtime WebGPU execution provider runs on Dawn with the Vulkan backend, and Mesa lavapipe is a CPU-based Vulkan adapter that Dawn treats like any device. The skill explains why that is enough for correctness checks: many host-side validation paths, such as shape and broadcast enforcement, fire before any shader is dispatched, and element-wise and broadcasting kernels run correctly if slowly.

When should I use WebGPU Provider Testing Without a GPU?

WebGPU Provider Testing Without a GPU fits situations like: running WebGPU kernel correctness tests on a Linux box with no GPU; checking a host-side shape or broadcast enforce fix for the WebGPU provider; debugging a lavapipe crash on a graph that contains MatMul.

How do I install WebGPU Provider Testing Without a GPU in Claude Code?

Run `npx skills add microsoft/onnxruntime --skill webgpu-local-testing -a claude-code`. Or copy the skill folder (.github/skills/webgpu-local-testing in microsoft/onnxruntime) into .claude/skills/webgpu-local-testing in your project. Claude Code loads it when a task matches its description.

How do I install WebGPU Provider Testing Without a GPU in Codex?

Run `npx skills add microsoft/onnxruntime --skill webgpu-local-testing -a codex`. Or copy the skill folder (.github/skills/webgpu-local-testing in microsoft/onnxruntime) into .agents/skills/webgpu-local-testing in your project. Codex loads it when a task matches its description.

Can I use WebGPU Provider Testing Without a GPU in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add microsoft/onnxruntime --skill webgpu-local-testing -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/webgpu-local-testing, .gemini/skills/webgpu-local-testing, .github/skills/webgpu-local-testing and .opencode/skills/webgpu-local-testing in your project.

What does WebGPU Provider Testing Without a GPU need to run?

Going by SKILL.md and its folder, WebGPU Provider Testing Without a GPU needs the command-line tools its instructions call (dnf). Our summary lists: A Linux host, with `dnf` on Azure Linux, to install Mesa Vulkan drivers; An ONNX Runtime source checkout built with `--use_webgpu`.

Does WebGPU Provider Testing Without a GPU access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is WebGPU Provider Testing Without a GPU safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does WebGPU Provider Testing Without a GPU use?

WebGPU Provider Testing Without a GPU is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does WebGPU Provider Testing Without a GPU use?

About 1.4k tokens (SKILL.md is roughly 5.7k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to WebGPU Provider Testing Without a GPU?

Skills that share tags, products or a category with WebGPU Provider Testing Without a GPU: Avm Tf Testing (Azure/terraform-azurerm-avm-ptn-alz, 135 stars), Testing (static-web-server/static-web-server, 2.4k stars), Verify Changes (389ds/389-ds-base, 294 stars) and Debug E2E Pipeline (kubernetes-sigs/cloud-provider-azure, 294 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains WebGPU Provider Testing Without a GPU?

microsoft (a GitHub organization, an official publisher) maintains it in microsoft/onnxruntime, which has 22,035 GitHub stars. The repository holds 14 skills in this directory. The repository was last updated on October 8, 2026.

Source: microsoft/onnxruntime on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.