Files
XPUSYS-Monitor-NG/AMD.md
T

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 via typeperf.exe (CSV parse, uses max across all engines)
  • _AmdSmiGpuQuery — Official AMD SMI library probe (gracefully skipped on Windows where libamd_smi.so is 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