{
  "@context": "https://schema.org",
  "@id": "https://aggr.aymericbeaumet.com/items/zml-ai/2026-03-30-introducing-zml-smi/#webpage",
  "@type": [
    "WebPage",
    "ArchiveComponent"
  ],
  "articleBody": "`zml-smi` is a universal diagnostic and monitoring tool for GPUs, TPUs and NPUs. It provides real-time insights into the performance and health of your hardware.\n\n![](https://zml.ai/posts/zml-smi/1.png)\n\nIt is a mix between `nvidia-smi` and `nvtop`.\n\nIt transparently supports all the platforms ZML supports. That is NVIDIA, AMD, Google TPU and AWS Trainium devices. It will be extended to support more platforms in the future as ZML continues to expand its hardware support.\n\n## Getting started\n\nYou can download [zml-smi from the official mirror](https://mirror.zml.ai/zml-smi/zml-smi-v0.2.tar.zst).\n\n```\n$ curl -LO 'https://mirror.zml.ai/zml-smi/zml-smi-v0.2.tar.zst'\n$ tar -xf zml-smi-v0.2.tar.zst\n$ ./zml-smi/zml-smi\n```\n\n## Listing devices\n\n```\n$ zml-smi\n```\n\n## Monitoring devices\n\nThe `--top` flag provides real-time monitoring of device performance, including utilization, temperature, and memory usage.\n\n```\n$ zml-smi --top\n```\n\n![](https://zml.ai/posts/zml-smi/2.png) ![](https://zml.ai/posts/zml-smi/3.png)\n\n## Completely sandboxed\n\n`zml-smi` doesn’t require any software on the target machine besides the device driver and the GLIBC (mostly due to the fact that some shared objects from vendors are loaded).\n\n## Metrics\n\n## Host\n\n`zml-smi` displays host-level metrics such as CPU model and utilization, memory usage, and temperature.\n\n### Available metrics\n\nHostname, Kernel, CPU Model, CPU Core Count, Memory Used / Total, Uptime, Load Average (1m / 5m / 15m), Device Count\n\n## Processes\n\n`zml-smi` also provides insights into the processes utilizing the devices, including their resource usage and command lines. This is available for all platforms.\n\n### Available metrics\n\nPID, Device Index, Device Utilization, Device Memory, Process Command Line\n\n## NVIDIA\n\nMetrics are given through the [NVML](https://developer.nvidia.com/management-library-nvml) library, which ships with the driver. As such, it is expected to be on the system.\n\n### Available metrics\n\nGPU Utilization, Temperature, Power Draw, Encoder Utilization, Decoder Utilization, VRAM Used, VRAM Total, Memory Bus Width, Temperature, Fan Speed, Power Draw, Power Limit, Graphics Clock, SM Clock, Memory Clock, Max Graphics Clock, Max Memory Clock, PCIe Link Generation, PCIe Link Width, PCIe TX Throughput, PCIe RX Throughput\n\n## AMD\n\nMetrics are provided through the [AMD SMI](https://rocm.docs.amd.com/projects/amdsmi/en/latest/) library. `zml-smi` ships with it in its sandbox.\n\nIn order to support the latest AMD GPUs, `zml-smi` at build time downloads the `amdgpu.ids` file from both Mesa and ROCm (7.2.1 at the time of this article) and merges them together. This allows `zml-smi` to recognize and report on the latest AMD GPU models, even if they are not yet included in the official ROCm release. This is the case for Ryzen AI Max+ 395 (Strix Halo) for instance.\n\nSandboxing that file turned somewhat tricky. Because `libdrm-amdgpu` expects to find it in `/opt/amdgpu/share/libdrm/amdgpu.ids`, we had to get a bit creative. We didn’t want to install anything outside the binary sandbox. Nor did we want to patch that string inside `libdrm`.\n\nSo we created a shared object named `zmlxrocm.so` that is added to the `DT_NEEDED` section of `libdrm_amdgpu.so.1`. Then, `fopen64` is renamed to `zmlxrocm_fopen64`, which is then provided by `zmlxrocm.so`. Since we now sit between `libdrm` and `fopen64`, we can intercept the call to `fopen64`, compare the path against `/opt/amdgpu/share/libdrm/amdgpu.ids` and redirect it to the sandboxed copy of the file.\n\n### Available metrics\n\nGPU Utilization, Memory Usage, Temperature, Power Draw, VRAM Used, VRAM Total, Temperature, Fan Speed, Power Draw, Power Limit, Graphics Clock, SoC Clock, Memory Clock, Max Graphics Clock, Max Memory Clock, PCIe Bandwidth, PCIe Link Generation, PCIe Link Width\n\n## TPU\n\nMetrics are provided via the local gRPC endpoint exposed by the TPU runtime. Those are the same metrics exposed to the [tpu-info](https://pypi.org/project/tpu-info/) tool from Google.\n\n### Available metrics\n\nTensorCore Duty Cycle, HBM Used, HBM Total\n\n## AWS Trainium\n\nMetrics are provided through a private API found in `libnrt.so`, which `zml-smi` embeds in its sandbox. Those are the same metrics provided by the [neuron-top](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/tools/neuron-sys-tools/neuron-top-user-guide.html) utility.\n\n### Available metrics\n\nCore Utilization, HBM Used, HBM Total, Tensor Memory, Constant Memory, Model Code, Shared Scratchpad, Nonshared Scratchpad, Runtime Memory, Driver Memory, DMA Rings, Collectives, Notifications\n",
  "authors": [],
  "captured_at": "2026-09-08T10:17:10.166315+00:00",
  "category": "ai",
  "content_html": "<p><code>zml-smi</code> is a universal diagnostic and monitoring tool for GPUs, TPUs and NPUs. It provides real-time insights into the performance and health of your hardware.</p>\n<p><picture class=\"article-picture article-picture-fallback\" style=\"--image-ratio:16 / 9\"><img src=\"https://zml.ai/posts/zml-smi/1.png\" alt=\"\" loading=\"eager\" decoding=\"async\" fetchpriority=\"high\" referrerpolicy=\"no-referrer\" class=\"progressive-image\"></picture></p>\n<p>It is a mix between <code>nvidia-smi</code> and <code>nvtop</code>.</p>\n<p>It transparently supports all the platforms ZML supports. That is NVIDIA, AMD, Google TPU and AWS Trainium devices. It will be extended to support more platforms in the future as ZML continues to expand its hardware support.</p>\n<h2>Getting started</h2>\n<p>You can download <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://mirror.zml.ai/zml-smi/zml-smi-v0.2.tar.zst\">zml-smi from the official mirror</a>.</p>\n<pre><code><span class=\"code-snippet\" data-language=\"Shell\"><span class=\"syntax-source syntax-shell syntax-bash\"><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">$</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> curl<span class=\"syntax-variable syntax-parameter syntax-option syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-parameter syntax-shell\"> -</span>LO</span> <span class=\"syntax-string syntax-quoted syntax-single syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-shell\">&#39;</span>https://mirror.zml.ai/zml-smi/zml-smi-v0.2.tar.zst<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-shell\">&#39;</span></span></span>\n<span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">$</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> tar<span class=\"syntax-variable syntax-parameter syntax-option syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-parameter syntax-shell\"> -</span>xf</span> zml-smi-v0.2.tar.zst</span>\n<span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">$</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> ./zml-smi/zml-smi</span>\n</span></span></code></pre>\n<h2>Listing devices</h2>\n<pre><code><span class=\"code-snippet\" data-language=\"Shell\"><span class=\"syntax-source syntax-shell syntax-bash\"><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">$</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> zml-smi</span>\n</span></span></code></pre>\n<h2>Monitoring devices</h2>\n<p>The <code>--top</code> flag provides real-time monitoring of device performance, including utilization, temperature, and memory usage.</p>\n<pre><code><span class=\"code-snippet\" data-language=\"Shell\"><span class=\"syntax-source syntax-shell syntax-bash\"><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">$</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> zml-smi<span class=\"syntax-variable syntax-parameter syntax-option syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-parameter syntax-shell\"> --</span>top</span></span>\n</span></span></code></pre>\n<p><picture class=\"article-picture article-picture-fallback\" style=\"--image-ratio:16 / 9\"><img src=\"https://zml.ai/posts/zml-smi/2.png\" alt=\"\" loading=\"lazy\" decoding=\"async\" fetchpriority=\"low\" referrerpolicy=\"no-referrer\" class=\"progressive-image\"></picture> <picture class=\"article-picture article-picture-fallback\" style=\"--image-ratio:16 / 9\"><img src=\"https://zml.ai/posts/zml-smi/3.png\" alt=\"\" loading=\"lazy\" decoding=\"async\" fetchpriority=\"low\" referrerpolicy=\"no-referrer\" class=\"progressive-image\"></picture></p>\n<h2>Completely sandboxed</h2>\n<p><code>zml-smi</code> doesn’t require any software on the target machine besides the device driver and the GLIBC (mostly due to the fact that some shared objects from vendors are loaded).</p>\n<h2>Metrics</h2>\n<h2>Host</h2>\n<p><code>zml-smi</code> displays host-level metrics such as CPU model and utilization, memory usage, and temperature.</p>\n<h3>Available metrics</h3>\n<p>Hostname, Kernel, CPU Model, CPU Core Count, Memory Used / Total, Uptime, Load Average (1m / 5m / 15m), Device Count</p>\n<h2>Processes</h2>\n<p><code>zml-smi</code> also provides insights into the processes utilizing the devices, including their resource usage and command lines. This is available for all platforms.</p>\n<h3>Available metrics</h3>\n<p>PID, Device Index, Device Utilization, Device Memory, Process Command Line</p>\n<h2>NVIDIA</h2>\n<p>Metrics are given through the <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://developer.nvidia.com/management-library-nvml\">NVML</a> library, which ships with the driver. As such, it is expected to be on the system.</p>\n<h3>Available metrics</h3>\n<p>GPU Utilization, Temperature, Power Draw, Encoder Utilization, Decoder Utilization, VRAM Used, VRAM Total, Memory Bus Width, Temperature, Fan Speed, Power Draw, Power Limit, Graphics Clock, SM Clock, Memory Clock, Max Graphics Clock, Max Memory Clock, PCIe Link Generation, PCIe Link Width, PCIe TX Throughput, PCIe RX Throughput</p>\n<h2>AMD</h2>\n<p>Metrics are provided through the <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://rocm.docs.amd.com/projects/amdsmi/en/latest/\">AMD SMI</a> library. <code>zml-smi</code> ships with it in its sandbox.</p>\n<p>In order to support the latest AMD GPUs, <code>zml-smi</code> at build time downloads the <code>amdgpu.ids</code> file from both Mesa and ROCm (7.2.1 at the time of this article) and merges them together. This allows <code>zml-smi</code> to recognize and report on the latest AMD GPU models, even if they are not yet included in the official ROCm release. This is the case for Ryzen AI Max+ 395 (Strix Halo) for instance.</p>\n<p>Sandboxing that file turned somewhat tricky. Because <code>libdrm-amdgpu</code> expects to find it in <code>/opt/amdgpu/share/libdrm/amdgpu.ids</code>, we had to get a bit creative. We didn’t want to install anything outside the binary sandbox. Nor did we want to patch that string inside <code>libdrm</code>.</p>\n<p>So we created a shared object named <code>zmlxrocm.so</code> that is added to the <code>DT_NEEDED</code> section of <code>libdrm_amdgpu.so.1</code>. Then, <code>fopen64</code> is renamed to <code>zmlxrocm_fopen64</code>, which is then provided by <code>zmlxrocm.so</code>. Since we now sit between <code>libdrm</code> and <code>fopen64</code>, we can intercept the call to <code>fopen64</code>, compare the path against <code>/opt/amdgpu/share/libdrm/amdgpu.ids</code> and redirect it to the sandboxed copy of the file.</p>\n<h3>Available metrics</h3>\n<p>GPU Utilization, Memory Usage, Temperature, Power Draw, VRAM Used, VRAM Total, Temperature, Fan Speed, Power Draw, Power Limit, Graphics Clock, SoC Clock, Memory Clock, Max Graphics Clock, Max Memory Clock, PCIe Bandwidth, PCIe Link Generation, PCIe Link Width</p>\n<h2>TPU</h2>\n<p>Metrics are provided via the local gRPC endpoint exposed by the TPU runtime. Those are the same metrics exposed to the <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://pypi.org/project/tpu-info/\">tpu-info</a> tool from Google.</p>\n<h3>Available metrics</h3>\n<p>TensorCore Duty Cycle, HBM Used, HBM Total</p>\n<h2>AWS Trainium</h2>\n<p>Metrics are provided through a private API found in <code>libnrt.so</code>, which <code>zml-smi</code> embeds in its sandbox. Those are the same metrics provided by the <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://awsdocs-neuron.readthedocs-hosted.com/en/latest/tools/neuron-sys-tools/neuron-top-user-guide.html\">neuron-top</a> utility.</p>\n<h3>Available metrics</h3>\n<p>Core Utilization, HBM Used, HBM Total, Tensor Memory, Constant Memory, Model Code, Shared Scratchpad, Nonshared Scratchpad, Runtime Memory, Driver Memory, DMA Rings, Collectives, Notifications</p>\n",
  "content_markdown": "`zml-smi` is a universal diagnostic and monitoring tool for GPUs, TPUs and NPUs. It provides real-time insights into the performance and health of your hardware.\n\n![](https://zml.ai/posts/zml-smi/1.png)\n\nIt is a mix between `nvidia-smi` and `nvtop`.\n\nIt transparently supports all the platforms ZML supports. That is NVIDIA, AMD, Google TPU and AWS Trainium devices. It will be extended to support more platforms in the future as ZML continues to expand its hardware support.\n\n## Getting started\n\nYou can download [zml-smi from the official mirror](https://mirror.zml.ai/zml-smi/zml-smi-v0.2.tar.zst).\n\n```\n$ curl -LO 'https://mirror.zml.ai/zml-smi/zml-smi-v0.2.tar.zst'\n$ tar -xf zml-smi-v0.2.tar.zst\n$ ./zml-smi/zml-smi\n```\n\n## Listing devices\n\n```\n$ zml-smi\n```\n\n## Monitoring devices\n\nThe `--top` flag provides real-time monitoring of device performance, including utilization, temperature, and memory usage.\n\n```\n$ zml-smi --top\n```\n\n![](https://zml.ai/posts/zml-smi/2.png) ![](https://zml.ai/posts/zml-smi/3.png)\n\n## Completely sandboxed\n\n`zml-smi` doesn’t require any software on the target machine besides the device driver and the GLIBC (mostly due to the fact that some shared objects from vendors are loaded).\n\n## Metrics\n\n## Host\n\n`zml-smi` displays host-level metrics such as CPU model and utilization, memory usage, and temperature.\n\n### Available metrics\n\nHostname, Kernel, CPU Model, CPU Core Count, Memory Used / Total, Uptime, Load Average (1m / 5m / 15m), Device Count\n\n## Processes\n\n`zml-smi` also provides insights into the processes utilizing the devices, including their resource usage and command lines. This is available for all platforms.\n\n### Available metrics\n\nPID, Device Index, Device Utilization, Device Memory, Process Command Line\n\n## NVIDIA\n\nMetrics are given through the [NVML](https://developer.nvidia.com/management-library-nvml) library, which ships with the driver. As such, it is expected to be on the system.\n\n### Available metrics\n\nGPU Utilization, Temperature, Power Draw, Encoder Utilization, Decoder Utilization, VRAM Used, VRAM Total, Memory Bus Width, Temperature, Fan Speed, Power Draw, Power Limit, Graphics Clock, SM Clock, Memory Clock, Max Graphics Clock, Max Memory Clock, PCIe Link Generation, PCIe Link Width, PCIe TX Throughput, PCIe RX Throughput\n\n## AMD\n\nMetrics are provided through the [AMD SMI](https://rocm.docs.amd.com/projects/amdsmi/en/latest/) library. `zml-smi` ships with it in its sandbox.\n\nIn order to support the latest AMD GPUs, `zml-smi` at build time downloads the `amdgpu.ids` file from both Mesa and ROCm (7.2.1 at the time of this article) and merges them together. This allows `zml-smi` to recognize and report on the latest AMD GPU models, even if they are not yet included in the official ROCm release. This is the case for Ryzen AI Max+ 395 (Strix Halo) for instance.\n\nSandboxing that file turned somewhat tricky. Because `libdrm-amdgpu` expects to find it in `/opt/amdgpu/share/libdrm/amdgpu.ids`, we had to get a bit creative. We didn’t want to install anything outside the binary sandbox. Nor did we want to patch that string inside `libdrm`.\n\nSo we created a shared object named `zmlxrocm.so` that is added to the `DT_NEEDED` section of `libdrm_amdgpu.so.1`. Then, `fopen64` is renamed to `zmlxrocm_fopen64`, which is then provided by `zmlxrocm.so`. Since we now sit between `libdrm` and `fopen64`, we can intercept the call to `fopen64`, compare the path against `/opt/amdgpu/share/libdrm/amdgpu.ids` and redirect it to the sandboxed copy of the file.\n\n### Available metrics\n\nGPU Utilization, Memory Usage, Temperature, Power Draw, VRAM Used, VRAM Total, Temperature, Fan Speed, Power Draw, Power Limit, Graphics Clock, SoC Clock, Memory Clock, Max Graphics Clock, Max Memory Clock, PCIe Bandwidth, PCIe Link Generation, PCIe Link Width\n\n## TPU\n\nMetrics are provided via the local gRPC endpoint exposed by the TPU runtime. Those are the same metrics exposed to the [tpu-info](https://pypi.org/project/tpu-info/) tool from Google.\n\n### Available metrics\n\nTensorCore Duty Cycle, HBM Used, HBM Total\n\n## AWS Trainium\n\nMetrics are provided through a private API found in `libnrt.so`, which `zml-smi` embeds in its sandbox. Those are the same metrics provided by the [neuron-top](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/tools/neuron-sys-tools/neuron-top-user-guide.html) utility.\n\n### Available metrics\n\nCore Utilization, HBM Used, HBM Total, Tensor Memory, Constant Memory, Model Code, Shared Scratchpad, Nonshared Scratchpad, Runtime Memory, Driver Memory, DMA Rings, Collectives, Notifications\n",
  "dateCreated": "2026-09-08T10:17:10.166315+00:00",
  "date_created": "2026-03-30T15:00:00+00:00",
  "date_modified": "2026-03-30T15:00:00+00:00",
  "date_published": "2026-03-30T15:00:00+00:00",
  "description": "zml-smi is a universal diagnostic and monitoring tool for GPUs, TPUs and NPUs. It provides real-time insights into the performance and health of your hardware. It is a mix between nvidia-smi and nvtop. It transparently supports all the…",
  "external_url": "https://zml.ai/posts/zml-smi/",
  "git": {
    "commit": "ebb0941c5c06a2ab2377342d607535262a3e969e",
    "path": "items/zml-ai/2026/03/2026-03-30-introducing-zml-smi.md",
    "permalink": "https://github.com/aymericbeaumet/aggr-instance/blob/ebb0941c5c06a2ab2377342d607535262a3e969e/items/zml-ai/2026/03/2026-03-30-introducing-zml-smi.md"
  },
  "id": "urn:aggr:item:af51bfb7115c12559e8e5d412cb91ed69709c46f",
  "isBasedOn": {
    "@id": "https://zml.ai/posts/zml-smi/"
  },
  "mainEntity": {
    "@id": "https://zml.ai/posts/zml-smi/",
    "@type": "CreativeWork",
    "archivedAt": {
      "@id": "https://aggr.aymericbeaumet.com/items/zml-ai/2026-03-30-introducing-zml-smi/#webpage"
    },
    "dateModified": "2026-03-30T15:00:00+00:00",
    "datePublished": "2026-03-30T15:00:00+00:00",
    "headline": "Introducing zml-smi",
    "timeRequired": "PT3M",
    "url": "https://zml.ai/posts/zml-smi/",
    "wordCount": 639
  },
  "name": "Archived snapshot: Introducing zml-smi",
  "preview": null,
  "reading_minutes": 3,
  "replicated_at": null,
  "source": "zml-ai",
  "source_name": "ZML - Model to Metal",
  "summary": "zml-smi is a universal diagnostic and monitoring tool for GPUs, TPUs and NPUs. It provides real-time insights into the performance and health of your hardware. It is a mix between nvidia-smi and nvtop. It transparently supports all the platforms ZML supports. That is NVIDIA, AMD, Google TPU and AWS Trainium devices. It will be extended to support more platforms in the future as ZML continues to expand its hardware support.",
  "tags": [],
  "temporalCoverage": "2026-09-08T10:17:10.166315+00:00",
  "title": "Introducing zml-smi",
  "url": "https://aggr.aymericbeaumet.com/items/zml-ai/2026-03-30-introducing-zml-smi/",
  "word_count": 639
}