4.0 KiB
AMD ROCm Windows Port — Summary
Intent
The upstream ComfyUI-XPUSYS-Monitor was designed primarily for Intel Arc (XPU)
and NVIDIA (CUDA). Its AMD GPU support depended on rocm_smi_lib — a
Linux-only Python package that wraps librocm_smi64.so. On Windows with AMD
ROCm, rocm_smi_lib cannot be installed via pip because the native library
(.so) does not exist on Windows.
This fork (ComfyUI-XPUSYS-Monitor-AMD) replaces the AMD provider's GPU
monitoring with Windows-native APIs that work on a standard Windows ROCm
stack — no rocm_smi_lib required.
Changes Made
providers/amd.py — Rewritten AMD provider
| Before | After |
|---|---|
Used rocm_smi.getMemFreeVdev() / getMemSizeVdev() for VRAM |
Uses torch.cuda.mem_get_info(0) — returns (free_bytes, total_bytes) from the AMD driver directly |
Used rocm_smi.getGpuBusyVdev() for GPU load |
Uses typeperf (Windows built-in) to read WDDM GPU engine counters averaged via max() |
Used rocm_smi.getSingleClockSpeed() for core clock |
Returns 0 — driver does not expose via Windows API |
Used rocm_smi.getTempVdev() for temperature |
Returns -1 — driver does not expose via Windows API |
Used rocm_smi.getPowerVdev() for power draw |
Returns (-1, 0, False) — driver does not expose via Windows API |
Imported shared utils from providers/intel.py |
Imports from providers/_utils.py (extracted shared module) |
providers/_utils.py — New shared utilities module
Extracted from providers/intel.py so all providers can share CPU/RAM polling
without depending on the Intel Level Zero provider:
_get_cpu_info()— CPU model name and thread count_read_cpu_ram_stats()— CPU load, frequency, RAM total/used/free_read_commit_charge()— Windows commit charge (virtual memory)_PdhQuery— PDH API ctypes wrapper (not used on AMD — kept for reference)_TypeperfGpuQuery— GPU engine utilisation viatypeperf.exe(CSV parse, usesmaxacross all engines)_AmdSmiGpuQuery— Official AMD SMI library probe (gracefully skipped on Windows wherelibamd_smi.sois unavailable)
providers/__init__.py — Detection fix
_is_amd_rocme() now uses getattr(torch.version, 'roc', None) instead of
torch.version.roc directly. Windows ROCm builds may lack the roc attribute
entirely — getattr avoids the AttributeError and falls through to GPU name
matching ("amd", "radeon", "advanced micro devices").
providers/nvidia.py — Updated imports
NvidiaProvider now imports shared utilities from _utils.py instead of intel.py
(no functional change).
requirements.txt — Removed rocm_smi_lib
rocm_smi_lib is commented out with a note explaining it is Linux-only. No
replacement dependency needed — all monitoring uses torch (already installed
with ROCm) and typeperf (Windows built-in).
pyproject.toml
Project name updated to ComfyUI-XPUSYS-Monitor-AMD, publisher set to forkless.
web/ directory — Frontend
Added web/xpu_monitor.js from upstream (56 KB). This is the JavaScript
toolbar extension that renders the seven-capsule status bar in ComfyUI's UI.
End Result
| Metric | Source | Status |
|---|---|---|
| VRAM free / total | torch.cuda.mem_get_info(0) |
✅ |
| VRAM allocated / reserved | torch.cuda.memory_allocated() / memory_reserved() |
✅ |
| GPU utilisation | typeperf WDDM engine counters (max across engines) |
✅ |
| Device name | torch.cuda.get_device_name(0) |
✅ |
| GPU core temperature | Driver does not expose via Windows API | ❌ |
| Power draw | Driver does not expose via Windows API | ❌ |
| Core clock | Driver does not expose via Windows API | ❌ |
| GPU load on idle | max() across all WDDM engines → ~0% |
✅ |
| GPU load under workflow | max() reflects busy 3D/compute engine |
✅ |
rocm_smi_lib dependency |
Removed; no replacement needed | ✅ |
| Windows ROCm detection | getattr(torch.version, 'roc', None) + GPU name fallback |
✅ |