winml sys¶
Inspect your machine — devices, EPs, and runtime versions at a glance.
When to use this¶
Run winml sys before starting any export or build workflow to confirm that the
required ML libraries are installed and that the target hardware is visible. It is
also the first command to run when diagnosing an unexpected export failure.
Synopsis¶
Flags¶
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--format |
-f |
text | json | compact |
text |
Output format. text renders rich tables, json emits machine-readable JSON, compact prints a single-line summary. |
--list-device |
— | flag | false |
List available compute devices (NPU, GPU, CPU) in priority order instead of showing the full system report. |
--list-ep |
— | flag | false |
List available ONNX Runtime execution providers instead of showing the full system report. Can be combined with --list-device. |
--verbose |
-v |
flag | false |
Surface additional diagnostic sections: backend availability and Export Readiness. |
--help |
-h |
flag | — | Show help and exit. |
winml systakes no--model,--device,--ep,--task, or--precisionarguments. It describes the host environment, not a specific model.
How it works¶
winml sys queries Python's platform and importlib.metadata modules to report
library versions. On Windows, it also reads the native
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion registry key to report the
display version, build, update build revision (UBR), build branch, and build lab.
It then probes PyTorch for CUDA availability and GPU device names.
Backend availability checks use the installed runtime environment. GPU and NPU
enumeration uses DXCore as the source of adapter identity and LUID, then enriches
those native rows with WMI/PnP driver and manufacturer details. CPU enumeration
uses WMI. Devices remain in NPU > GPU > CPU priority order, and EP enumeration
merges the WinML EP registry with ONNX Runtime's
get_available_providers(). When
--format json is used the full report — including devices and EPs — is emitted as
a single JSON object, making it easy to capture in CI pipelines.
Within the GPU class, devices are ordered by ONNX Runtime hardware metadata
DxgiHighPerformanceIndex numerically (0 first), with LUID as a stable
tie-breaker. This is the Windows DXGI high-performance preference, not DXCore
enumeration order. The preference is joined to native DXCore rows by LUID;
EP metadata never adds or removes physical adapters. Missing or invalid ranks
sort after ranked GPUs, in LUID order. If EP probing cannot supply ranks, all
native GPUs fall back to LUID order.
Unpinned runtime GPU selection uses the same ordering within the selected EP
source's exposed devices. An EP that exposes only a subset of installed GPUs
can therefore select a different GPU from the first system-wide row. An explicit
--device-luid on winml perf overrides that preference.
Examples¶
+------------------------------------+
| winml-cli System Information |
+------------------------------------+
Environment
Python Version 3.11.9
Python Executable C:\...\python.exe
OS Windows 11
Machine AMD64
Display Version 24H2
Current Build 26100
UBR 4946
Build Branch ge_release
BuildLabEx 26100.1.amd64fre.ge_release.240331-1435
ML Libraries
Library Version Status
torch 2.4.0 OK
transformers 4.44.0 OK
onnx 1.16.1 OK
...
Available Devices (priority order)
#1 NPU Qualcomm(R) Hexagon NPU
LUID: 0x00000000_0x00018393 | Driver: 1.0.0 | Manufacturer: Qualcomm
#2 GPU Qualcomm(R) Adreno GPU
LUID: 0x00000000_0x00018394 | Driver: 1.0.0 | Manufacturer: Qualcomm
#3 CPU Snapdragon(R) X Elite
LUID: N/A | Cores: 12 | Threads: 12 | Architecture: ARM64
Available Execution Providers
QNNExecutionProvider -> NPU/GPU
DmlExecutionProvider -> GPU
CPUExecutionProvider -> CPU
# Machine-readable JSON — pipe to jq or save for later comparison
$ winml sys --format json > env.json
The full JSON report includes a schema version and installed physical memory:
{
"schema_version": 1,
"platform": {
"system": "Windows",
"release": "11",
"machine": "ARM64"
},
"memory": {
"physical_total_mib": 16384
}
}
Memory capacity uses MiB. If the host does not expose the physical memory total,
the field is null and winml sys emits a warning while preserving the rest of
the system report.
Common pitfalls¶
--list-deviceand--list-epsuppress the full report. When either flag is present, only the requested section is printed. Omit both flags to see the complete system report.--format compactomits device and EP tables. The compact format is designed for single-line log entries and does not include device or EP details. Usetextorjsonwhen you need the full picture.- CUDA shown as unavailable on a machine with a GPU. PyTorch must be installed
with CUDA support (
torch+cuXXX). A CPU-only torch wheel will always reportcuda_available: false.
See also¶
- ONNX & Execution Providers — background on EPs and
how
--device/--epflags interact - inspect.md — inspect a specific HuggingFace model's compatibility
- catalog.md — browse the curated catalog of validated models
- How winml-cli Works — end-to-end pipeline overview