Healthmon 用户指南 (PDF) - vR525 (旧版本) - 最新更新于 2023 年 3 月 15 日 - 发送反馈

1. 概述

nvidia-healthmon 是系统管理员和集群管理器的工具,用于检测和排除影响高性能计算环境中 NVIDIA® Tesla™ GPU 的常见问题。 nvidia-healthmon 包含有限的硬件诊断功能,侧重于软件和系统配置问题。

1.1. nvidia-healthmon 目标

nvidia-healthmon 旨在
  1. 发现影响 GPU 运行计算作业能力的常见问题,包括
    • 软件配置问题
    • 系统配置问题
    • 系统组装问题,例如电缆松动
    • 有限数量的硬件问题
  2. 提供故障排除帮助
  3. 轻松集成到 集群调度器集群管理 应用程序中
  4. 减少停机时间和 GPU 作业失败

1.1.1. nvidia-healthmon 的范围之外

nvidia-healthmon 的设计目的不是:
  1. 提供全面的硬件诊断
  2. 主动修复问题

1.2. 依赖项

此版本的 nvidia-healthmon 依赖于 NVIDIA Developer Display Driver r340 或更高版本,可在 CUDA 下载页面上找到。 http://developer.nvidia.com/cuda-downloads

1.3. 支持的产品

nvidia-healthmon 支持在 Linux(裸机)操作系统上运行的 Tesla GPU。 NVIDIA® Tesla™ 产品线

  • 所有 Fermi 架构 GPU
  • 所有 Kepler 架构 GPU

1.4. 弃用通知

从本版本开始,NVIDIA® 已开始发布一个改进的健康状况和诊断工具,称为 NVIDIA Validation Suite®,简称 NVVS。它与 Healthmon 一起包含在此 GDK 中。NVVS 的初始版本在功能上与 Healthmon 非常相似,但构建在更强大的框架之上。未来版本的 NVVS 将会看到大量新功能和测试。

因此,当前版本的 Healthmon 在此版本中被弃用。它仍然完全受支持,并将在本驱动程序发布周期内保持如此。请开始查看相关的 NVVS 材料,以便提前计划过渡。如果有任何问题或疑虑,请随时联系 cudatools@nvidia.com。

2. 运行 nvidia-healthmon

解包后,可以从命令行运行 nvidia-healthmon。

注意: nvidia-healthmon 将在其测试的 GPU 上创建 CUDA 上下文。在计算独占模式下,这意味着没有其他 CUDA 进程可以在 GPU 上创建 CUDA 上下文。nvidia-healthmon 的结果也可能受到其他 CUDA 进程的影响。例如,如果另一个进程正在通过 PCIe 向系统上的任何 GPU 发送数据,则 nvidia-healthmon 可能会检测到低带宽。
user@hostname 
$ nvidia-healthmon

当未提供任何参数时,nvidia-healthmon 将在所有受支持的 GPU 上以默认行为运行。

2.1. 列出 GPU

nvidia-healthmon 能够列出系统上安装的 GPU。这对于确定下一节中需要的 PCI 总线 ID 或设备索引非常有用。

注意: 如果重新加载 NVIDIA 显示驱动程序或重新启动系统,设备索引可能会更改。
user@hostname
$ nvidia-healthmon -L

有关扩展 GPU 信息,请参阅 nvidia-smi 工具

user@hostname
$ man nvidia-smi

user@hostname
$ nvidia-smi -q

2.2. 指定特定 GPU

nvidia-healthmon 可以指定单个 GPU 或一组 GPU。要指定特定的 GPU,请使用 -i--id 标志以及要指定的 GPU 的标识符来运行 nvidia-healthmon。标识符可以是

  1. 设备索引
  2. PCI 总线 ID
  3. GPU 芯片 UUID
  4. GPU 板序列号
注意: 板序列号将指定板上的所有 GPU。
user@hostname
$ nvidia-healthmon -i 0

user@hostname
$ nvidia-healthmon -i 0000:02:00.0

2.3. 模式

默认模式为快速模式。在快速模式下,将运行测试子集,以快速检测常见问题。-q--quick 标志允许显式请求快速模式。

另一种模式是扩展模式。在扩展模式下,将运行所有可用的测试。

要运行扩展诊断,请使用 -e–-extended 标志运行 nvidia-healthmon。

user@hostname
$ nvidia-healthmon --extended

有关这些模式的更多信息,请参阅 nvidia-healthmon 最佳实践指南

2.4. 日志文件输出

默认情况下,nvidia-healthmon 会将信息报告到标准输出。要将输出重定向到文件,请使用 -l–-log-file 标志。只有命令行解析中的错误才会打印到控制台。

2.5. 详细输出

nvidia-healthmon 的默认输出不会报告其收集的各种指标的值。详细标志 -v–-verbose 可用于打印值,例如固定内存带宽和 CUDA 设备查询信息。此外,详细模式将提供有关跳过测试原因的信息。

注意: nvidia-healthmon 的输出格式可能会在以后的版本中更改。

2.6. 其他标志

有关可用标志的更完整列表,请使用 -h/-–help-H/–-verbose-help 标志运行 nvidia-healthmon。

user@hostname
$ nvidia-healthmon -h

3. 解释结果

3.1. nvidia-healthmon 退出代码

nvidia-healthmon 将在完成对所有指定设备的执行诊断后终止。当 nvidia-healthmon 成功运行时,将使用 退出代码。非零退出代码表示 nvidia-healthmon 运行存在问题。这可能是由于运行诊断时出现问题:例如缺少配置文件、命令行参数无效,或 nvidia-healthmon 检测到本地计算机存在问题。必须读取应用程序的输出以确定确切的问题是什么。

nvidia-healthmon 成功运行的示例。

user@hostname
$ nvidia-healthmon -q

Loading Config:  SUCCESS 
Global Tests
   NVML Sanity: SUCCESS
   Tesla Devices Count: SUCCESS
   Global Test Results:  2  success, 0  errors, 0  warnings, 0  did not run
----------------------------------------------------------- 
GPU  0000:04:00.0 #1  : Tesla C2075  (Serial: 0425912072221)
   NVML Sanity: SUCCESS InfoROM: SKIPPED
   GEMINI  InfoROM: SKIPPED 
   ECC:  SUCCESS
   CUDA  Sanity
      Result: SUCCESS
   PCIe  Maximum Link Generation: SUCCESS 
   PCIe  Maximum Link Width: SUCCESS
   PCI  Seating: SUCCESS 
   PCI  Bandwidth: SKIPPED
   Device Results:  6  success, 0  errors, 0  warnings, 3  did not run

System  Results: 8  success, 0  errors, 0  warnings, 3  did not run

在上面的示例中,有三个测试未运行。

  • InfoROM 测试是仅扩展模式测试,因此被跳过。要运行 InfoROM 测试,必须使用扩展模式。
  • Gemini infoROM 测试被跳过,因为 Tesla C2075 在板上只有一个 GPU。
  • PCIe 带宽测试未运行,因为配置文件未指定系统支持的带宽。要运行带宽测试,必须编辑配置文件。
注意: 跳过的测试不会影响 nvidia-healthmon 退出代码。

nvidia-healthmon 运行失败的示例。

user@hostname
$ nvidia-healthmon -q

Loading Config: SUCCESS 
Global Tests
   NVML Sanity: SUCCESS
   Tesla Devices Count: SUCCESS
   Global Test Results: 2 success, 0 errors, 0 warnings, 0 did not run
----------------------------------------------------------- 
GPU  0000:04:00.0 #1: Tesla C2075 (Serial: 0425912072221)
   NVML Sanity: SUCCESS 
   InfoROM: SKIPPED
   GEMINI InfoROM: SKIPPED 
   ECC: SUCCESS
   CUDA Sanity
      Result: SUCCESS
   PCIe Maximum Link Generation: SUCCESS 
   PCIe Maximum Link Width: SUCCESS
   PCI Seating
      ERROR: After enabling maximum performance mode, the current PCIe Link 
      Width (8) does not match the expected maximum PCIe Link Width (16). This 
      can indicate that this GPU is improperly seated.
      An issue was detected with this GPU. This issue is usually caused by poor 
      connection between the GPU and the system.
      * Run 'nvidia-smi -q'. In some cases this will report a poorly connected 
        power cable.
      * Power down your system.
      * Check that all power   connectors are firmly attached (some GPUs require
        two power cables attached).
         * Check that the power cable is not damaged. Symptoms of damaged power 
           cables include exposed wiring and kinks (sharply creased region).
         * Check that the power cable is attached to a working power supply.
      * Rerun these diagnostics, using the same GPU, on system that is known to
        be working. A variety of system issues can cause diagnostic failure.
      * Restart your system and install the latest NVIDIA display driver.
      * Contact your OEM  provider, to run further system diagnostics.
         * Run 'nvidia-bug-report.sh' as the root user.
         * Run 'nvidia-healthmon -v -e -l nvidia-healthmon-report.txt --debug'
         * Provide the files  nvidia-bug-report.log.gz,
           nvidia-healthmon-report.dump, and nvidia-healthmon-report.txt to
           your OEM to assist your OEM in resolving this issue. 
      Result: ERROR
  PCI  Bandwidth: SKIPPED
  Device Results:  5 success, 1 errors, 0 warnings, 3 did not run

System  Results: 7  success, 1  errors, 0  warnings, 3  did not run 
WARNING: One or more tests didn’t run. Read the output for details. 
ERROR: One or more tests failed. Read the output for details.

在上面的示例中,nvidia-healthmon 检测到 GPU 插入系统的方式存在问题。nvidia-healthmon 以非零退出代码退出。此外,输出提供了关于哪里出错的用户可读描述,以及客户可以采取的解决问题步骤列表。

4. 配置 nvidia-healthmon

虽然 nvidia-healthmon 在没有额外配置的情况下即可开箱即用,但可以配置其行为并启用可选功能。nvidia-healthmon 打包了一个示例配置文件 nvidia-healthmon.conf。此配置文件可用于启用可选测试。默认情况下,缺少配置信息的测试将被跳过。

可以在命令行上指定使用的配置文件。如果未指定,nvidia-healthmon 将检查 NVHEALTHMON_CONF 环境变量中 nvidia-healthmon.conf 文件的完整路径(包括文件名),然后检查当前工作目录,最后检查默认 RPM/DEB 安装目录 (/etc/nvidia-healthmon/nvidia-healthmon.conf)。

使用以下方式指定配置文件

user@hostname
$ nvidia-healthmon -c /path/to/your/nvidia-healthmon.conf
注意: nvidia-healthmon 附带提供了一个默认的 nvidia-healthmon.conf 文件。所有可用的属性都列在此文件中,并附有描述。

4.1. 配置文件内容

此文件以标准 ini 文件格式格式化。

文件中包含两种类型的节。第一种是 global 节,第二种是 GPU 名称 节。global 节包含预期的系统配置信息。例如,devices.tesla.count 描述了系统上的 GPU 数量。除 global 之外的任何节名称都是 GPU 名称节。GPU 名称节包含有关具有给定名称的所有 GPU 的信息。例如,[Tesla M2090] 节包含所有 Tesla M2090 GPU 的配置。这两种类型的节支持不同的键值对。例如,键 devices.tesla.count 仅允许分组在 global 类别下。nvidia-healthmon.conf 文件(nvidia-healthmon 打包)包含每个节的有效键值对以及简要说明。

包含 4 个设备的系统配置文件示例 显示了包含 4 个设备(Tesla™ C2075 或 Tesla C2070)的系统的示例配置文件。

包含 4 个设备的系统配置文件示例

[global]
devices.tesla.count = 4

[Tesla C2075]
bandwidth.warn = 1500
bandwidth.min = 100
pci.gen = 2
pci.width = 16
temperature.warn = 95
 
[Tesla C2070]
bandwidth.warn = 1500
bandwidth.min = 100
pci.gen = 2
pci.width = 16
temperature.warn = 90

4.2. 有效键摘要

表 1. 全局键
描述

devices.tesla.count

启用此设置以确保 NVML 库检测到预期数量的 Tesla 品牌 GPU。

此计数仅包括 nvidia-healthmon 进程具有足够权限访问的 Tesla 品牌 GPU。

如果未配置此设置,则需要此设置的检查将跳过。

drivers.blacklist

检查系统是否存在已知会导致 NVIDIA 硬件、驱动程序和软件出现问题的驱动程序。如果 nvidia-healthmon 检测到任何列入黑名单的驱动程序,它将不会执行进一步的测试。

您可以自行承担风险在此列表中添加/删除驱动程序。

如果未配置此设置,则需要此设置的检查将跳过。

display.gpudirect

启用此设置以显示系统上所有 P2P/RDMA 设备之间的 GPUDirect 通信矩阵。

version.driver

设置此项以提供预期的 Nvidia 驱动程序版本,不匹配会导致测试失败

rdma.enable

设置此项以激活 RDMA 测试功能,并在 GPU Direct 通信矩阵中显示相关的 RDMA 信息(通过 display.gpudirect)。请参阅下面的 rdma.*

表 2. SKU 键
描述

bandwidth.warn

如果从主机到 GPU 或从 GPU 到主机的带宽低于此值(MB/s),nvidia-healthmon 将生成警告。

如果未配置此设置,则需要此设置的检查将被跳过,并通过 NVML 库检测到。

bandwidth.min

如果从主机到 GPU 或从 GPU 到主机的带宽低于此值(MB/s),nvidia-healthmon 将生成错误。

如果未配置此设置,则需要此设置的检查将跳过。

peer.bandwidth.warn

在支持对等访问的情况下,如果从一个 GPU 到另一个 GPU 的带宽低于此值(MB/s),nvidia-healthmon 将生成警告。如果不支持对等访问,则仍会运行带宽测试,但不会与最小带宽进行比较。

peer.bandwidth.min

在支持对等访问的情况下,如果从一个 GPU 到另一个 GPU 的带宽低于此值(MB/s),nvidia-healthmon 将生成错误。如果不支持对等访问,则仍会运行带宽测试,但不会与最小带宽进行比较。

pci.gen

将最靠近 GPU 芯片的 PCIe 链路的最大 PCIe 链路代数与此处指定的值进行比较。

如果未配置此设置,则需要此设置的检查将跳过。

如果存在不匹配,将生成错误。

对于包含多个 GPU 芯片的板卡,此值将反映 GPU 芯片与板载 PCIe 交换机之间的 PCIe 链路代数。对于单 GPU 板卡,此值反映 GPU 芯片与 GPU 连接到的 PCIe 插槽之间的链路宽度。请注意,GPU 上游的其他 PCIe 链路可能具有不同的链路代数。此处未考虑这些链路。

由于 PCIe 链路代数取决于链路的非 GPU 侧,因此需要了解系统的功能才能设置正确的期望值。因此,此配置文件默认禁用每个 GPU 的此测试。

pci.width

将最靠近 GPU 芯片的 PCIe 链路的最大 PCIe 链路宽度与此处指定的值进行比较。

如果未配置此设置,则需要此设置的检查将跳过。

如果存在不匹配,将生成错误。

对于包含多个 GPU 芯片的板卡,此值将反映 GPU 芯片与板载 PCIe 交换机之间的 PCIe 链路代数。对于单 GPU 板卡,此值反映 GPU 芯片与 GPU 连接到的 PCIe 插槽之间的链路宽度。请注意,GPU 上游的其他 PCIe 链路可能具有不同的链路代数。此处未考虑这些链路。

由于 PCIe 链路代数取决于链路的非 GPU 侧,因此需要了解系统的功能才能设置正确的期望值。因此,此配置文件默认禁用每个 GPU 的此测试。

temperature.warn

将当前的 GPU 芯片温度与摄氏度的警告级别进行比较。如果当前温度等于或高于警告级别,将生成警告。

请注意,所需的温度可能因使用的冷却系统而异。

如果未配置此设置,则需要此设置的检查将跳过。

rdma.mlxdev

rdma.mlxport

执行 RDMA 测试以测量 Mellanox Infiniband NIC 和 GPU 之间的带宽。这些测试通过全局节中的 rdma.enable 键激活。rdma.mlxdev 是 ibstat 给出的 Mellanox 设备 ID。rdma.mlxport 是您希望在其上执行测试的端口号。虽然这严格来说是一个环回测试,但端口必须处于活动状态并链接才能正常工作。

rdma.bandwidth.warn

在支持 RDMA 访问的情况下,如果 RDMA 单向带宽低于此值(MB/s),nvidia-healthmon 将生成警告。RDMA 带宽在很大程度上取决于确切的主机桥版本和架构。

这是一个可选参数。

rdma.bandwidth.min

在支持 RDMA 访问的情况下,如果 RDMA 单向带宽低于此值(MB/s),nvidia-healthmon 将生成错误。RDMA 带宽在很大程度上取决于确切的主机桥版本和架构。

这是一个可选参数。

version.vbios

检查以确保设备的 vBios 版本是预期值。这可以是单个值或逗号分隔的值列表。

ecc.check_state

设置此项以检查设备的 ECC 状态,并将与此参数的不匹配视为失败。如果提供了此参数,则它必须是以下之一

0 = 期望在此设备上禁用 ECC

1 = 期望在此设备上启用 ECC

如果提供了此参数,并且设备不支持获取其 ECC 状态,则将被视为测试失败

GPUDirect

5.1. GPUDirect 测试

nvidia-healthmon 可以协助 GPUDirect 通信的测试和优化。使用 display.gpudirect 全局键启用 GPUDirect 通信矩阵。如果系统中有多个支持 GPUDirect 的卡,则将自动进行点对点 (P2P) 测试。

请注意,矩阵中 GPU 的枚举是根据 NVML 进行的。

此外,RDMA 测试可以与 Mellanox Infiniband 卡结合进行。RDMA 测试正确执行必须满足以下条件
  • 必须加载 Infiband 驱动程序并且 IB 链路已启动
  • 必须加载 nv_peer_mem 驱动程序。可以在 Mellanox OFED 页面上找到此驱动程序及其编译说明。 http://www.mellanox.com/page/products_dyn?product_family=116
  • 已安装 OFED libibverbs 库并在当前库搜索路径中(即 LD_LIBRARY_PATH)
使用全局键 rdma.enable 启用 RDMA 测试,然后在相应的 SKU 区域中使用键 rdma.mlxdevrdma.mlxport 指定您希望对其执行 GPUDirect RDMA 测试的 IB 卡。此外,可以使用 display.gpudirectnic 键将 IB 卡包含在上述 GPUDirect 通信矩阵中。

用例

虽然 nvidia-healthmon 主要针对 NVIDIA® Tesla™ GPU 集群,但它也可以用于没有集群管理器的工作站。

6.1. 系统配置后运行 nvidia-healthmon

系统配置后,可以在节点上运行 nvidia-healthmon,以确保节点配置正确并且能够运行 GPU 作业。在这种用例中,nvidia-healthmon 的扩展模式运行将尝试提供最全面的系统健康检查。

6.2. 作业前运行 nvidia-healthmon

nvidia-healthmon 可以在快速模式下的序幕或尾声脚本中运行,以执行系统和 GPU 的健全性检查。如果 nvidia-healthmon 检测到问题,调度器可以将当前节点标记为停机,并在不同的节点上运行作业,以避免作业失败。在快速模式下,将运行测试子集,以便对系统执行快速健全性测试。
注意: nvidia-healthmon 将在其测试的设备上创建 CUDA 上下文,因此通常不希望在其他进程正在使用 GPU 时运行 nvidia-healthmon,以防止任一进程出现意外行为。

6.3. 定期健康检查

类似于定期扫描病毒,nvidia-healthmon 可以定期在扩展模式下运行。同样,当 nvidia-healthmon 报告问题时,调度器可以将节点标记为停机。

6.4. 作业失败后

当 GPU 作业失败时,nvidia-healthmon 的扩展模式运行可以帮助排除问题。

6.5. 与其他服务接口

nvidia-healthmon 可以由包装脚本运行,该脚本处理任何报告的警告和错误。这些问题随后可以转发到其他服务,以便将任何问题通知它们。NVIDIA 建议使用 syslog 来记录系统上报告的问题。同样,可以发送 SNMP trap 以通过网络将这些问题通知主机。

6.6. 故障排除问题

nvidia-healthmon 的故障排除报告旨在涵盖常见问题,并且通常会建议许多可能的解决方案。这些故障排除步骤应从上到下解决,因为最可能的解决方案列在顶部。

6.6.1. 保存日志文件

NVIDIA 建议应保存 nvidia-healthmon 失败运行的日志文件。保存日志文件可确保不会丢失有关间歇性问题的数据。

注意: 某些日志文件已加密,只能由 NVIDIA 工程师解码。这些文件没有损坏。这些日志包含 nvidia-healthmon 运行的跟踪,不包含任何敏感信息。

声明

声明

所有 NVIDIA 设计规范、参考板、文件、图纸、诊断程序、列表和其他文档(统称为“材料”)均按“原样”提供。NVIDIA 对材料不作任何明示、暗示、法定或其他方面的保证,并明确否认所有关于不侵权、适销性和特定用途适用性的暗示保证。

所提供的信息据信是准确且可靠的。但是,NVIDIA Corporation 对使用此类信息或因其使用而可能导致的侵犯第三方专利或其他权利的后果不承担任何责任。未通过暗示或其他方式授予 NVIDIA Corporation 专利权下的任何许可。本出版物中提及的规范如有更改,恕不另行通知。本出版物取代并取代以前提供的所有其他信息。未经 NVIDIA Corporation 明确书面批准,NVIDIA Corporation 产品未被授权用作生命支持设备或系统中的关键组件。

商标

NVIDIA 和 NVIDIA 徽标是 NVIDIA Corporation 在美国和其他国家/地区的商标或注册商标。其他公司和产品名称可能是与其相关的各自公司的商标。


Healthmon 用户指南 (PDF) - vR525 (旧版本) - 最新更新于 2023 年 3 月 15 日 - 发送反馈