microsoft / microsoft/foundry-local
[Tracking] NPU/GPU models missing or silently falling back to CPU — EP download failing on Windows
Nobody has claimed this yet.
- Dominant language
- C++
- Stars
- 2.6k
- Forks
- 369
- Avg merge
- 2d 17h
- Merged PRs (30d)
- 39
Description
👋 If you're hitting this on a Windows device that has an NPU (Snapdragon X / X2 Elite, Intel Core Ultra, AMD Ryzen AI) or GPU (Nvidia TRT-RTX), please **react with 👍 on this issue** so we can gauge impact. Only add a comment if the fixes below don't resolve it for you.
## Symptoms
Any of the following on a device with a working NPU:
- **CLI** — `foundry model list` shows only CPU variants; `foundry model run <…-npu…>` fails with *"Model … was not found in the catalog or local cache"*.
- **SDK** (Python / C# / JS / Rust) — `list_catalog_models()` / equivalent returns no NPU variants. The CLI now consumes the SDK, so the CLI and SDK results are always consistent.
- **Silent CPU fallback** — running a model by alias (e.g. `phi-3.5-mini`) without explicitly listing first appears to "work", but inference runs on **CPU** because the NPU variant was filtered out of the catalog. Look for the chosen variant ending in `-cpu` / `-generic-cpu` rather than `-qnn-npu` / `-vitis-npu` / `-openvino-npu`.
- Logs may include *"Failed to download or register the following EPs: QNNExecutionProvider / VitisAIExecutionProvider / OpenVINOExecutionProvider"*.
## Root cause
Foundry Local relies on **Windows ML** to download and register the per-vendor Execution Provider (QNN for Qualcomm, VitisAI for AMD, OpenVINO for Intel, TensorRT-RTX on Nvidia). EP download uses the **Windows Update** delivery channel, so anything blocking Windows Update blocks the EP. When the EP isn't registered, Foundry Local filters NPU variants out of the catalog — so both CLI and SDK stop listing them, and `model run` resolves to the next-best (usually CPU) variant.
The three most common causes (per the official Windows ML troubleshooting guide):
1. **Pending Windows Update reboot** — Restart the device and retry.
2. **Windows Updates paused** — Settings → Windows Update → **Resume updates**.
3. **Managed device / enterprise policy** blocking Windows Update or component downloads — Contact your IT admin; the EP cannot be sideloaded.
Full guidance:
## Quick verification
```powershell
foundry cache ls # do EPs appear?
foundry model ls --device npu # filter to NPU only
```
To confirm a silent CPU fallback, check which variant got resolved — the variant ID in the run output will end in `-cpu` rather than `-npu`.
## If none of the above helps — file a Feedback Hub report
This is important: a Feedback Hub report automatically captures the WinML EP-download logs the team needs. Please **route it to the WinML team** by selecting the correct category:
1. **Launch Feedback Hub** — Select **Start**, type *Feedback Hub* in the search bar, and open the Feedback Hub app.
2. Select **Report a problem**.
3. Describe your issue (e.g. *"NPU execution provider failed to download / register; NPU models missing from Foundry Local catalog"*).
4. For the category, select **Developer Platform → Windows Machine Learning**.
5. Follow the prompts to reproduce the problem and submit.
Then comment on this issue with:
- the **Feedback Hub link** to your report,
- NPU **vendor + driver version**,
- **Foundry Local version** (`foundry --version`),
- whether `foundry cache ls` shows any EP entries.
Related closed issues: #510, #393, #558, #584, #659.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the Windows ML execution-provider troubleshooting guide and run `foundry cache ls` plus `foundry model ls --device npu` to compare EP registration with catalog results. Confirm the resolved variant and collect the requested Foundry Local version, driver details, and Feedback Hub report; the issue does not identify a repository file or code change as the definition of done.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp
- Domain
- ai, cli
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100