microsoft / microsoft/foundry-local

[CLI] <brief issue title>

Open
#1,023 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
C++
Stars
2.6k
Forks
369
Avg merge
2d 17h
Merged PRs (30d)
39

Description

## Problem
Title: QNNExecutionProvider registration fails on startup — duplicate EP name causes "Unknown EP bootstrapper name(s): ." on Snapdragon X Plus (arm64)

Environment:

Device: Samsung Galaxy Edge 4 (Snapdragon X Plus X1P42100, arm64)
Foundry Local version: Microsoft.FoundryLocal_0.10.3.0_arm64 (confirmed latest via winget upgrade --id Microsoft.FoundryLocal → no update available)
OS: Windows 11, DisplayVersion 25H2, Build 26200.9168 — stable channel, not Windows Insider (confirmed via Settings → Windows Update → Windows Insider Program; previously enrolled last year but not currently)
NPU driver: 30.0.219.1000 (exceeds documented minimum 30.0.140.0 for Snapdragon X Plus)
NPU device status in Device Manager: OK, class ComputeAccelerator, Snapdragon(R) X Plus - X1P42100 - Qualcomm(R) Hexagon(TM) NPU
Python: 3.12.10 (arm64), foundry-local-sdk (pip)
Summary:
QNN (NPU) execution provider registration fails on every daemon startup due to a duplicate QNNExecutionProvider entry in the internally-generated bootstrapper name list. This blocks all NPU-accelerated inference via the Foundry Local CLI/SDK, even though the NPU/QNN driver, hardware, and Windows build are all confirmed compliant and functional — the same device successfully runs NPU-accelerated inference through the Foundry Toolkit (AI Toolkit) VS Code extension's playground, ruling out driver, hardware, and OS-channel causes.

Steps to reproduce:

Fresh install / foundry cache remove (all models cleared) and foundry server restart.
Observe daemon log (foundry server logs) on every startup:

From Python SDK, confirm the duplicate via discover_eps():

download_and_register_eps(["QNNExecutionProvider"]) then fails:

foundry model list --device npu returns an empty table — no NPU variants surfaced; every model falls back to Device: CPU, EPs: CPUExecutionProvider.
foundry run qwen2.5-0.5b --device npu fails (exit code 1) for the same reason.
Expected behavior:
QNNExecutionProvider should appear once in discover_eps() / the daemon's internal bootstrapper list, register successfully, and NPU model variants should appear in foundry model list --device npu.

Actual behavior:
QNNExecutionProvider is listed twice; EP registration always fails with an empty/unmatched name in the error; the daemon permanently falls back to CPU-only inference on every restart.

Ruled out (all confirmed working):

❌ Not a Windows Insider issue — device is on stable Windows 11 25H2, previously left Insider program a year ago.
❌ Not a driver issue — QNN driver 30.0.219.1000 exceeds the documented minimum (30.0.140.0).
❌ Not a hardware/detection issue — NPU shows Status: OK in Device Manager under ComputeAccelerator class.
❌ Not a cache/state corruption issue — reproduced identically after foundry cache remove (full clear) and foundry server restart.
❌ Not a version issue — already on latest available Microsoft.FoundryLocal per winget upgrade --id Microsoft.FoundryLocal.
✅ Confirmed the NPU stack itself works: Foundry Toolkit (AI Toolkit VS Code extension) playground successfully shows NPU utilization (visible in Task Manager) running the same/similar models on this exact device.
Conclusion: The defect is isolated to the foundry-local daemon's AutoRegisterCertifiedEps / download_and_register_eps call, which passes QNNExecutionProvider twice in its self-generated request list, causing the EP name-matching logic to fail.

Workaround used: Running models on CPU (generic-cpu variants) via the foundry CLI/SDK, or using the Foundry Toolkit playground for actual NPU-accelerated inference.

## Diagnostics

## System
- **OS:** Microsoft Windows 10.0.26200
- **Architecture:** Arm64
- **CPU:** Snapdragon(R) X Plus - X1P42100 - Qualcomm(R) Oryon(TM) CPU (8 logical cores)
- **GPU:** Qualcomm(R) Adreno(TM) X1-45 GPU (128.0 MB)
- **NPU:** Qualcomm Technologies, Inc. Snapdragon(R) X Plus - X1P42100 - Qualcomm(R) Hexagon(TM) NPU
- **RAM:** 1.5 GB available / 15.6 GB total
- **Disk:** 52.6 GB free / 457.3 GB total (C:\)
- **.NET:** .NET 9.0.18

## Service
- **State:** Ready
- **Web URLs:** http://127.0.0.1:60994
- **CLI version:** 0.10.3
- **Foundry Local Core:** 1.0.0
- **ORT:** 1.26.0
- **ORT GenAI:** 0.0.0

## Models
- **Available variants:** 44
- **Loaded:** 1
- **Cached:** 1

## Connectivity
- **Local service:** Reachable
- **Model registry:** Reachable

## Warnings
- Qualcomm Adreno GPU detected. If acceleration fails, try a CPU model variant or update the GPU driver.

Contributor guide

Open the contributing guide

Research direction

Start with the daemon's AutoRegisterCertifiedEps and download_and_register_eps paths, then use discover_eps() to reproduce the duplicate QNNExecutionProvider entry. Verify the behavior with foundry model list --device npu and foundry run qwen2.5-0.5b --device npu; done means the provider is listed once, registration succeeds, and NPU variants appear.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp, python
Domain
ai-infra-agents, cli
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
55/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.