1. 概述
nvidia-healthmon 是系统管理员和集群管理器的工具,用于检测和排除影响高性能计算环境中 NVIDIA® Tesla™ GPU 的常见问题。 nvidia-healthmon 包含有限的硬件诊断功能,侧重于软件和系统配置问题。
1.1. nvidia-healthmon 目标
- 发现影响 GPU 运行计算作业能力的常见问题,包括
- 软件配置问题
- 系统配置问题
- 系统组装问题,例如电缆松动
- 有限数量的硬件问题
- 提供故障排除帮助
- 轻松集成到 集群调度器 和 集群管理 应用程序中
- 减少停机时间和 GPU 作业失败
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。
user@hostname $ nvidia-healthmon
当未提供任何参数时,nvidia-healthmon 将在所有受支持的 GPU 上以默认行为运行。
2.1. 列出 GPU
nvidia-healthmon 能够列出系统上安装的 GPU。这对于确定下一节中需要的 PCI 总线 ID 或设备索引非常有用。
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。标识符可以是
- 设备索引
- PCI 总线 ID
- GPU 芯片 UUID
- 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 设备查询信息。此外,详细模式将提供有关跳过测试原因的信息。
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 运行失败的示例。
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
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.2. 有效键摘要
键 | 描述 |
---|---|
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.* |
键 | 描述 |
---|---|
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 进行的。
- 必须加载 Infiband 驱动程序并且 IB 链路已启动
- 必须加载 nv_peer_mem 驱动程序。可以在 Mellanox OFED 页面上找到此驱动程序及其编译说明。 http://www.mellanox.com/page/products_dyn?product_family=116
- 已安装 OFED libibverbs 库并在当前库搜索路径中(即 LD_LIBRARY_PATH)
用例
虽然 nvidia-healthmon 主要针对 NVIDIA® Tesla™ GPU 集群,但它也可以用于没有集群管理器的工作站。
6.1. 系统配置后运行 nvidia-healthmon
系统配置后,可以在节点上运行 nvidia-healthmon,以确保节点配置正确并且能够运行 GPU 作业。在这种用例中,nvidia-healthmon 的扩展模式运行将尝试提供最全面的系统健康检查。
6.2. 作业前运行 nvidia-healthmon
6.5. 与其他服务接口
nvidia-healthmon 可以由包装脚本运行,该脚本处理任何报告的警告和错误。这些问题随后可以转发到其他服务,以便将任何问题通知它们。NVIDIA 建议使用 syslog 来记录系统上报告的问题。同样,可以发送 SNMP trap 以通过网络将这些问题通知主机。
6.6. 故障排除问题
nvidia-healthmon 的故障排除报告旨在涵盖常见问题,并且通常会建议许多可能的解决方案。这些故障排除步骤应从上到下解决,因为最可能的解决方案列在顶部。
6.6.1. 保存日志文件
NVIDIA 建议应保存 nvidia-healthmon 失败运行的日志文件。保存日志文件可确保不会丢失有关间歇性问题的数据。
声明
声明
所有 NVIDIA 设计规范、参考板、文件、图纸、诊断程序、列表和其他文档(统称为“材料”)均按“原样”提供。NVIDIA 对材料不作任何明示、暗示、法定或其他方面的保证,并明确否认所有关于不侵权、适销性和特定用途适用性的暗示保证。
所提供的信息据信是准确且可靠的。但是,NVIDIA Corporation 对使用此类信息或因其使用而可能导致的侵犯第三方专利或其他权利的后果不承担任何责任。未通过暗示或其他方式授予 NVIDIA Corporation 专利权下的任何许可。本出版物中提及的规范如有更改,恕不另行通知。本出版物取代并取代以前提供的所有其他信息。未经 NVIDIA Corporation 明确书面批准,NVIDIA Corporation 产品未被授权用作生命支持设备或系统中的关键组件。