概述
NVIDIA 验证套件 (NVVS) 是系统管理员和集群管理器的工具,用于检测和排除影响高性能计算环境中 NVIDIA® Tesla™ GPU 的常见问题。NVVS 侧重于软件和系统配置问题、诊断、拓扑结构问题和相对性能。
NVVS 目标
- 在生产环境中提供系统级工具,以评估集群在部署工作负载之前的就绪程度。
- 促进多种运行模式
- 通过管理员或用户以纯文本交互。
- 通过另一个工具以易于解析的输出来进行脚本化。
- 提供多个测试时间范围,以方便不同的准备情况或故障条件
- 快速测试,用作就绪指标
- 中等测试,用作故障后的尾声
- 长时间测试,由管理员作为事后分析运行
- 将以下概念集成到一个工具中,以发现部署、系统软件和硬件配置问题、基本诊断、集成问题和相对系统性能。
- 部署和软件问题
- NVML 库访问和版本控制
- CUDA 库访问和版本控制
- 软件冲突
- 硬件问题和诊断
- 待处理的页面停用
- PCIe 接口检查
- NVLink 接口检查
- 帧缓冲区和内存检查
- 计算引擎检查
- 集成问题
- PCIe 重放计数器检查
- 拓扑结构限制
- 权限、驱动程序和 cgroups 检查
- 基本功耗和热约束检查
- 压力检查
- 功耗和热压力
- 吞吐量压力
- 恒定的相对系统性能
- 最大相对系统性能
- 内存带宽
- 部署和软件问题
- 提供故障排除帮助
- 轻松集成到 集群调度器 和 集群管理 应用程序中
- 减少停机时间和 GPU 作业失败
NVIDIA 验证套件的范围之外
- 提供全面的硬件诊断
- 主动修复问题
- 取代现场诊断工具。有关该过程,请参阅 http://docs.nvda.net.cn/deploy/hw-field-diag/index.html。
- 促进任何 RMA 流程。有关这些程序,请参阅 http://docs.nvda.net.cn/deploy/rma-process/index.html。
依赖项
- NVVS 需要安装 NVIDIA Linux 驱动程序。标准显示驱动程序和 Tesla 推荐驱动程序均可工作。您可以从 http://www.nvidia.com/object/unix.html 获取驱动程序。
- NVVS 需要标准 C++ 运行时库,GLIBCXX 版本至少为 3.4.5 或更高版本。
支持的产品
NVIDIA 验证套件支持在 64 位 Linux(裸机)操作系统上运行的 Tesla GPU。NVIDIA® Tesla™ 产品线
- 所有 Kepler、Maxwell、Pascal 和 Volta 架构 GPU
使用 NVVS
NVVS 的各种命令行选项旨在控制常规执行参数,而对执行行为的详细更改包含在下一章详述的配置文件中。
命令行选项
NVVS 的各种选项如下
短选项 | 长选项 | 描述 |
---|---|---|
--statspath | 将插件统计信息写入给定路径,而不是当前目录。 | |
-a | --appendLog | 生成调试日志文件时,不要覆盖当前日志的内容。与 -d 和 -l 选项结合使用。 |
-c | --config | 指定要使用的配置文件。默认值为 /etc/nvidia-validation-suite/nvvs.conf |
--configless | 以无配置模式运行 NVVS。对所有支持的 GPU 执行“长时间”测试。 | |
-d | --debugLevel | 指定输出日志的调试级别。范围为 0 到 5,其中 5 为最详细。与 -l 标志结合使用。 |
-g | --listGpus | 列出可用的 GPU 并退出。这将仅列出 NVVS 支持的 GPU。 |
-i | --indexes | 要在其上运行 NVVS 的索引的逗号分隔列表。 |
-j | --jsonOutput | 指示 nvvs 将输出格式化为 JSON。 |
-l | --debugLogFile | 指定调试信息的日志文件。这将生成一个加密的日志文件,旨在在发生错误后返回给 NVIDIA 进行后期运行分析。 |
--quiet | 不提供控制台输出。有关错误,请参阅日志和返回代码。 | |
-p | --pluginpath | 为 NVVS 插件指定自定义路径。 |
-s | --scriptable | 以冒号分隔的、更易于脚本化和解析的格式生成输出。 |
--specifiedtest | 以无配置模式运行特定测试。多词测试应放在引号中,如果指定了多个测试,则应以逗号分隔。 | |
--parameters | 通过命令行指定测试参数。例如:--parameters "sm stress.test_duration=300" 将 SM 压力测试的测试持续时间设置为 300 秒。 | |
--statsonfail | 仅当遇到测试失败时才输出统计日志。 | |
-t | --listTests | 列出可通过 NVVS 执行的可用测试并退出。这将仅列出在当前路径和库条件下易于加载的测试。 |
-v | --verbose | 启用详细报告。 |
--version | 显示版本信息并退出。 | |
-h | --help | 显示用法信息并退出。 |
用法示例
显示系统上可用的 GPU 列表。
user@hostname $ nvvs -g NVIDIA Validation Suite (version 352.00) Supported GPUs available: [0000:01:00.0] -- Tesla K40c [0000:05:00.0] -- Tesla K20c [0000:06:00.0] -- Tesla K20c
使用自定义配置文件的示例“快速”测试(稍后解释)。
user@hostname $ nvvs -c Tesla_K40c_quick.conf NVIDIA Validation Suite (version 352.00) Software Blacklist ......................................... PASS NVML Library ...................................... PASS CUDA Main Library ................................. PASS CUDA Toolkit Libraries ............................ PASS Permissions and OS-related Blocks ................. PASS Persistence Mode .................................. PASS Environmental Variables ........................... PASS
输出最高调试级别的加密调试文件,以发送给 NVIDIA 进行问题分析。
user@hostname $ nvvs -c Tesla_K40c_medium.conf -d 5 -l debug.log NVIDIA Validation Suite (version 352.00) Software Blacklist ......................................... PASS NVML Library ...................................... PASS CUDA Main Library ................................. PASS CUDA Toolkit Libraries ............................ PASS Permissions and OS-related Blocks ................. PASS Persistence Mode .................................. PASS Environmental Variables ........................... PASS Hardware Memory GPU0 ....................................... PASS Integration PCIe .............................................. FAIL *** GPU 0 is running at PCI link width 8X, which is below the minimum allowed link width of 16X (parameter: min_pci_width)"
输出文件 debug.log 将随后返回给 NVIDIA。
配置文件
NVVS 配置文件是一个 YAML 格式(例如,人类可读的 JSON)文本文件,其中包含三个主要节,用于控制各种测试及其执行。
配置文件的通用格式包括
%YAML 1.2 --- globals: key1: value key2: value test_suite_name: - test_class_name1: test_name1: key1: value key2: value subtests: subtest_name1: key1: value key2: value test_name2: key1: value key2: value -test_class_name2: test_name3: key1: value key2: value gpus: - gpuset: name properties: key1: value key2: value tests: name: test_suite_name
有三个不同的部分:globals、test_suite_name 和 gpus,每个部分都有自己的参数子部分,并且与任何 YAML 文档一样,缩进非常重要,因此如果您的配置文件生成错误,请参考此示例以了解缩进参考。
全局参数
关键字 | 值类型 | 描述 |
---|---|---|
logfile | 字符串 | 所有详细测试数据的前缀,可用于后处理。 |
logfile_type | 字符串 | 可以是 json、text 或 binary。与 logfile 全局参数结合使用。默认值为 JSON。 |
scriptable | 布尔值 | 接受 true 或 false。生成脚本友好的、冒号分隔的输出,并且与 -s 命令行参数相同。 |
serial_override | 布尔值 | 接受 true 或 false。某些测试设计为在给定多个 GPU 的情况下并行运行。此参数会覆盖该行为,将所有测试的执行序列化。 |
require_persistence_mode | 布尔值 | 接受 true 或 false。持久模式是某些测试的先决条件,此全局参数会覆盖该要求,并且仅应在无法在系统上激活持久模式时使用。 |
GPU 参数
gpus 节可能包含一个或多个 gpusets,每个 gpusets 将根据其 properties(零匹配将产生错误)匹配系统上的零个或多个 GPU。
- GPU 的名称,即 Tesla K40c (name)
- GPU 的品牌,即 Tesla (brand)
- 索引的逗号分隔列表 (index)
- GPU UUID (uuid)
- 或 PCIe 总线 ID (busid)
匹配规则基于排除。首先,获取受支持 GPU 的列表,如果未给出 properties 标签,则所有 GPU 将用于测试。由于 UUID 或 PCIe 总线 ID 只能匹配单个 GPU,因此如果给出这些属性,则如果找到,则仅使用该 GPU。其余属性 index、brand 和 name 以“AND”方式工作,因此,如果指定,则结果必须至少匹配系统上的一个 GPU 才能执行测试。
例如,如果 name 设置为 "Tesla K40c" 并且 index 设置为 "0",则如果索引 0 不是 Tesla K40c,NVVS 将出错。通过同时指定 brand 和 index,用户可以将测试限制为特定的“Tesla”卡,例如。在此版本的 NVVS 中,所有匹配的 GPU 必须是同构的。
gpuset 的第二个标识符是 tests。此参数指定用户希望运行的测试套件或测试本身。
目前,以下套件可用
- Quick -- 旨在作为预运行的健全性检查,以确保 GPU 已准备好执行作业。当前运行下一章中描述的部署测试。
- Medium -- 旨在作为快速的、错误后的检查,以确保 GPU 上未发生 ECC 启用或双位错误等非常明显的情况。当前运行部署、内存/硬件和 PCIe/带宽测试。硬件测试旨在相对较短,以查找明显的错误。
- Long -- 旨在作为更广泛的检查,以查找集群中潜在的功耗和/或性能问题。当前运行广泛的测试,包括部署、内存/硬件、PCI/带宽、功耗、压力和内存带宽。硬件测试将在更长期的迭代模式下运行,旨在尝试捕获瞬时故障以及明显的错误。
也可以指定单个测试。当前关键字为:Memory、Diagnostic、Targeted Stress、Targeted Power、PCIe、SM Stress 和 Memory Bandwidth。请参阅下一小节中的“自定义”部分,以配置和调整使用此方法时的参数。
测试参数
NVVS 配置文件的格式设计为可扩展性。上面的每个测试套件都可以通过多种方式进行自定义,每种测试的详细信息将在以下章节中介绍。单个测试属于特定类别的功能,当想要自定义特定参数时,也必须指定该功能类别。
类名及其执行的测试如下
类名 | 测试 | 简要描述 |
---|---|---|
软件 | 部署 | 检查各种运行时库、持久模式、权限、环境变量和列入黑名单的驱动程序。 |
硬件 | 诊断 | 执行一系列硬件诊断,旨在将 GPU 或 GPU 组驱动到其出厂指定的限制。 |
集成 | PCIe | 测试主机到 GPU、GPU 到主机以及 P2P(如果可能)带宽。GPU 之间的 P2P 通过 NvLink(如果可能)或 PCIe 发生。 |
压力 | 定向压力 | 在给定的时间内维持特定的定向压力水平。 |
定向功耗 | 在给定的时间内维持特定的定向功耗水平。 | |
SM 压力 | 在给定时间内在 GPU 的流式多处理器 (SM) 上维持工作负载。 | |
内存带宽 | 验证是否可以在 GPU 的帧缓冲区上实现一定的内存带宽。 |
某些测试还具有子测试,可以通过使用 subtests 关键字,然后在下面分层添加所需的子测试参数来启用。例如,PCIe 带宽测试可能具有类似于以下内容的节
long: - integration: pcie: test_unpinned: false subtests: h2d_d2h_single_pinned: min_bandwidth: 20 min_pci_width: 16
当仅在配置文件的 GPU 集部分中给出特定测试时,测试的套件和类均为 custom。例如
%YAML 1.2 --- globals: logfile: nvvs.log custom: - custom: targeted stress: test_duration: 60 gpus: - gpuset: all_K40c properties: name: Tesla K40c tests: - name: targeted stress
插件概述
NVIDIA 验证套件由一系列插件组成,每个插件都旨在完成不同的目标。
部署插件
部署插件的目的是验证计算环境是否已准备好运行 Cuda 应用程序,并且能够加载 NVML 库。
先决条件
- LD_LIBRARY_PATH 必须包含 cuda 库的路径,对于 Cuda 的 X.Y 版本,通常为 /usr/local/cuda-X.Y/lib64,可以通过运行 export LD_LIBRARY_PATH=/usr/local/cuda-X.Y/lib64 来设置
- linux nouveau 驱动程序不得运行,并且应列入黑名单,因为它会与 nvidia 驱动程序冲突
配置参数
目前没有。
统计输出
目前没有。
失败
- 目标 GPU 的相应设备节点被操作系统(例如 cgroups)阻止,或者存在但当前用户没有 r/w 权限。
- 无法加载 NVML 库 libnvidia-ml.so
- 无法加载 Cuda 运行时库
- 发现已加载 nouveau 驱动程序
- 目标 GPU 上有任何页面处于待停用状态
- 在插件运行时,目标 GPU 上正在运行任何其他图形进程
硬件诊断插件
HW 诊断插件旨在识别 GPU 芯片和板级组件上的硬件故障,并扩展到 PCIE 和 NVLINK 接口。它不打算识别 NVIDIA 提供的硬件以外的硬件或系统级问题。它也不打算识别硬件之上的软件级问题,例如 NVIDIA 驱动程序堆栈中的问题。该插件运行一系列测试,目标是 GPU 计算正确性、GDDR/HBM 内存弹性、GPU 和 SRAM 高功率运行、SM 压力和 NVLINK/PCIE 正确性。该插件可以运行多种测试组合,对应于中等和长时间的 NVVS 运行模式。此插件大约需要三分钟才能执行。
该插件产生简单的通过/失败输出。失败输出意味着已发现潜在的硬件问题。但是,NVVS HW 诊断插件本身并不是 GPU RMA 的理由。插件中的任何故障都应在机器脱机后执行完整的 NVIDIA 现场诊断。只有现场诊断工具的故障才构成 RMA 的理由。由于 NVVS HW 诊断插件是现场诊断的功能子集,因此插件中的故障强烈预示着未来现场诊断会失败。
先决条件
- 不得运行其他 GPU 进程。
配置参数
参数名称 | 类型 | 默认值 | 值范围 | 描述 |
---|---|---|---|---|
test_duration | 浮点数 | 180.0 | 30.0 - 3600.0 | 性能测试应运行多长时间(以秒为单位)。建议将其设置为至少 30 秒,以确保您实际获得测试的压力。 |
use_doubles | 布尔值 | False | True 或 False | 如果设置为 true,则告诉测试在其计算中使用双精度。默认情况下,它为 false,测试将使用单精度浮点数。 |
temperature_max | 浮点数 | 100.0 | 30.0 - 120.0 | 卡在测试期间允许达到的最高温度(摄氏度)。使用 nvidia-smi -q 查看设备的正常温度限制。 |
统计输出
统计名称 | 统计范围 | 类型 | 描述 |
---|---|---|---|
power_usage | GPU | 时间序列浮点数 | 每个 GPU 每秒的功耗(瓦特)。请注意,对于多 GPU 板,每个 GPU 获得板的功率预算的一部分。 |
graphics_clock | GPU | 时间序列浮点数 | 每个 GPU 每秒的时钟频率(MHZ) |
memory_clock | GPU | 时间序列浮点数 | GPU 内存每秒的时钟频率(MHZ) |
nvml_events | GPU | 时间序列 Int64 | 使用 nvmlEventSetWait 读取的任何事件 - 包括单比特或双比特错误或 XID 错误 - 在测试期间。 |
power_violation | GPU | 时间序列浮点数 | 此 GPU 违反功耗约束的时间百分比。 |
gpu_temperature | GPU | 时间序列浮点数 | GPU 每秒的温度(摄氏度) |
thermal_violation | GPU | 时间序列浮点数 | 此 GPU 违反热约束的时间百分比。 |
perf_gflops | GPU | 时间序列浮点数 | 自测试开始以来每秒读取的平均 GFLOPS。 |
失败
- 目标 GPU 的相应设备节点被操作系统(例如 cgroups)阻止,或者存在但当前用户没有 r/w 权限。
- 正在运行其他 GPU 进程
- 检测到硬件问题。这不是 RMA 可操作的故障,而是表明需要进行更多调查。
- 温度在测试期间达到不可接受的水平。
- 如果发生 GPU 双位 ECC 错误,或者发生了配置数量的 SBE 错误。
- 如果发生严重 XID
PCIe - GPU 带宽插件
GPU 带宽插件的目的是测量 GPU 与主机之间的带宽和延迟。
先决条件
无
子测试
该插件由几个自测组成,每个自测都测量带宽或延迟的不同方面。每个子测试都有一对固定/非固定对,或者一对启用 P2P/禁用 P2P 的相同测试。固定/非固定测试在主机和 GPU 之间复制数据时使用固定或非固定内存。
当可能时,此插件将使用 NvLink 在 GPU 之间进行通信。否则,GPU 之间的通信将通过 PCIe 进行
每个子测试都用一个标签表示,该标签既用于指定子测试的配置参数,又用于输出子测试的统计信息。启用 P2P/禁用 P2P 测试启用或禁用同一张卡上的 GPU 彼此直接通信,而不是通过 PCIe 总线。
子测试标签 | 固定/非固定 启用 P2P/禁用 P2P |
描述 |
---|---|---|
h2d_d2h_single_pinned | 固定 | 设备 <-> 主机带宽,一次一个 GPU |
h2d_d2h_single_unpinned | 非固定 | 设备 <-> 主机带宽,一次一个 GPU |
h2d_d2h_concurrent_pinned | 固定 | 设备 <-> 主机带宽,所有 GPU 并发 |
h2d_d2h_concurrent_unpinned | 非固定 | 设备 <-> 主机带宽,所有 GPU 并发 |
h2d_d2h_latency_pinned | 固定 | 设备 <-> 主机延迟,一次一个 GPU |
h2d_d2h_latency_unpinned | 非固定 | 设备 <-> 主机延迟,一次一个 GPU |
p2p_bw_p2p_enabled | 启用 P2P | 设备 <-> 设备带宽,一次一个 GPU 对 |
p2p_bw_p2p_disabled | 禁用 P2P | 设备 <-> 设备带宽,一次一个 GPU 对 |
p2p_bw_concurrent_p2p_enabled | 启用 P2P | 设备 <-> 设备带宽,并发,专注于 GPU 之间可能直接相互连接的 GPU 之间的带宽 -> 对于每个(索引 / 2)和(索引 / 2)+1 |
p2p_bw_concurrent_p2p_disabled | 禁用 P2P | 设备 <-> 设备带宽,并发,专注于 GPU 之间可能直接相互连接的 GPU 之间的带宽 -> 对于每个(索引 / 2)和(索引 / 2)+1 |
1d_exch_bw_p2p_enabled | 启用 P2P | 设备 <-> 设备带宽,并发,专注于 GPU 之间的带宽,每个 GPU 要么发送到索引高于自身的 GPU (l2r),要么发送到索引低于自身的 GPU (r2l) |
1d_exch_bw_p2p_disabled | 禁用 P2P | 设备 <-> 设备带宽,并发,专注于 GPU 之间的带宽,每个 GPU 要么发送到索引高于自身的 GPU (l2r),要么发送到索引低于自身的 GPU (r2l) |
p2p_latency_p2p_enabled | 启用 P2P | 设备 <-> 设备延迟,一次一个 GPU 对 |
p2p_latency_p2p_disabled | 禁用 P2P | 设备 <-> 设备延迟,一次一个 GPU 对 |
配置参数 - 全局
参数名称 | 类型 | 默认值 | 值范围 | 描述 |
---|---|---|---|---|
test_pinned | 布尔值 | True | True/False | 包括测试使用固定内存的子测试。 |
test_unpinned | 布尔值 | True | True/False | 包括测试使用非固定内存的子测试。 |
test_p2p_on | 布尔值 | True | True/False | 包括需要卡之间发生对等 (P2P) 内存传输的子测试。 |
test_p2p_off | 布尔值 | True | True/False | 包括不需要卡之间发生对等 (P2P) 内存传输的子测试。 |
max_pcie_replays | 浮点数 | 80.0 | 1.0 - 1000000.0 | 在此插件的持续时间内,每个 GPU 允许的最大 PCIe 重放次数。这是基于 PCIe Gen 3.0 的预期重放速率 <8 次/分钟,假设此插件将运行不到一分钟,并允许 10 倍的重放次数才失败。 |
配置参数 - 子测试
参数名称 | 默认值(范围) | 受影响的子测试 | 描述 |
---|---|---|---|
min_bandwidth | Null (0.0 - 100.0) |
h2d_d2h_single_pinned、h2d_d2h_single_unpinned、h2d_d2h_concurrent_pinned、h2d_d2h_concurrent_unpinned | 此子测试要通过必须达到的最小带宽(GB/s)。 |
max_latency | 100,000.0 (0.0 - 1,000,000.0) |
h2d_d2h_latency_pinned、h2d_d2h_latency_unpinned | 此子测试要通过不得超过的延迟(微秒)。 |
min_pci_generation | 1.0 (1.0 - 3.0) |
h2d_d2h_single_pinned、h2d_d2h_single_unpinned | GPU 必须达到或超过才能通过此子测试的最小允许 PCI 代数。 |
min_pci_width | 1.0 (1.0 - 16.0) |
h2d_d2h_single_pinned、h2d_d2h_single_unpinned | GPU 必须达到或超过才能通过此子测试的最小允许 PCI 位宽。例如,16x = 16.0。 |
统计输出 - 全局
统计名称 | 统计范围 | 类型 | 描述 |
---|---|---|---|
pcie_replay_count | GPU | 浮点数 | 自 GPU 带宽插件开始以来每秒读取的 PCIe 重放次数。 |
统计输出 - 子测试
GPU 带宽测试的统计信息也按测试输出,使用子测试名称作为组名称键。以下统计信息部分按子测试组织。
h2d_d2h_single_pinned/h2d_d2h_single_unpinned
统计名称 | 类型 | 描述 |
---|---|---|
N_h2d | 浮点数 | 设备 N 从主机到设备的平均带宽 |
N_d2h | 浮点数 | 设备 N 从设备到主机的平均带宽 |
N_bidir | 浮点数 | 设备 N 同时从设备到主机和主机到设备的平均带宽 |
h2d_d2h_concurrent_pinned/h2d_d2h_concurrent_unpinned
统计名称 | 类型 | 描述 |
---|---|---|
N_h2d | 浮点数 | 设备 N 从主机到设备的平均带宽 |
N_d2h | 浮点数 | 设备 N 从设备到主机的平均带宽 |
N_bidir | 浮点数 | 设备 N 同时从设备到主机和主机到设备的平均带宽 |
sum_bidir | 浮点数 | 所有设备从设备到主机和主机到设备的平均带宽之和。 |
sum_h2d | 浮点数 | 所有设备从主机到设备的平均带宽之和。 |
sum_d2h | 浮点数 | 所有设备从设备到主机的平均带宽之和。 |
h2d_d2h_latency_pinned/h2d_d2h_latency_unpinned
统计名称 | 类型 | 描述 |
---|---|---|
N_h2d | 浮点数 | N_latency_h2d |
N_d2h | 浮点数 | N_latency_d2h |
N_bidir | 浮点数 | N_latency_bidir |
p2p_bw_p2p_enabled/p2p_bw_p2p_disabled
统计名称 | 类型 | 描述 |
---|---|---|
N_M_onedir | 浮点数 | 从设备 N 到设备 M 的平均带宽,一次复制一个方向。 |
N_M_bidir | 浮点数 | 从设备 N 到设备 M 的平均带宽,同时复制两个方向。 |
p2p_bw_concurrent_p2p_enabled/p2p_bw_concurrent_p2p_disabled
统计名称 | 类型 | 描述 |
---|---|---|
l2r_N_M | 浮点数 | 从设备 N 到设备 M 的平均带宽 |
r2l_N_M | 浮点数 | 从设备 M 到设备 N 的平均带宽 |
bidir_N_M | 浮点数 | 从设备 M 到设备 N 的平均带宽,并发复制 |
r2l_sum | 浮点数 | 所有从右 (M) 到左 (N) 复制的平均带宽之和 |
r2l_sum | 浮点数 | 所有从右 (M) 到左 (N) 以及从左到右复制的平均双向带宽之和 |
1d_exch_bw_p2p_enabled/1d_exch_bw_p2p_disabled
统计名称 | 类型 | 描述 |
---|---|---|
l2r_N | 浮点数 | 从设备 N 到设备 N+1 的平均带宽 |
r2l_N | 浮点数 | 从设备 N 到设备 N-1 的平均带宽 |
l2r_sum | 浮点数 | 所有 l2r 平均带宽统计信息的总和 |
r2l_sum | 浮点数 | 所有 l2r 平均带宽统计信息的总和 |
p2p_latency_p2p_enabled/p2p_latency_p2p_disabled
统计名称 | 类型 | 描述 |
---|---|---|
N_M | 浮点数 | 从设备 N 到设备 M 的平均延迟 |
失败
- 延迟超过相关测试的配置阈值。
- 带宽不能超过相关测试的配置阈值。
- 如果 PCIe 重传次数超过用户提供的阈值。
内存带宽插件
内存带宽插件的目的是验证 GPU 帧缓冲区的带宽是否高于预配置的阈值。
先决条件
此插件目前仅在 GV100 GPU 上运行。
配置参数
参数名称 | 类型 | 默认值 | 值范围 | 描述 |
---|---|---|---|---|
minimum_bandwidth | 浮点数 | 每个 GPU 不同 | 1.0 - 1000000.0 | 必须达到的最小帧缓冲区带宽阈值,单位为 MB/秒,才能通过此测试。 |
统计输出
统计名称 | 统计范围 | 类型 | 描述 |
---|---|---|---|
power_usage | GPU | 时间序列浮点数 | 每个 GPU 每秒的功耗(瓦特)。请注意,对于多 GPU 板,每个 GPU 获得板的功率预算的一部分。 |
memory_clock | GPU | 时间序列浮点数 | GPU 内存每秒的时钟频率(MHZ) |
nvml_events | GPU | 时间序列 Int64 | 使用 nvmlEventSetWait 在测试期间读取的任何事件及其读取的时间戳。 |
失败
- 无法达到 minimum_bandwidth 中指定的最小带宽。
- 如果发生 GPU 双位 ECC 错误,或者发生了配置数量的 SBE 错误。
- 如果发生严重 XID
SM 压力插件
SM 性能插件的目的是通过使用 cublas 进行大型矩阵乘法,将目标 GPU 的流式多处理器 (SM) 提升到目标性能水平(以 GFLOPS 为单位)。与定向压力插件不同,SM 压力插件不会在每次矩阵乘法之前将源数组复制到 GPU。这使得 SM 性能插件的性能不受设备到主机带宽的限制。该插件计算达到配置的性能目标所需的每秒矩阵运算次数,如果无法达到该目标,则会失败。
此插件应用于在目标 GPU 处于实际负载条件下时观察热、功耗和相关异常。通过设置适当的参数,用户可以确保节点或集群中的所有 GPU 都达到期望的性能水平。对生成的统计信息的进一步分析还可以显示达到这些目标所需的功耗、时钟或温度的变化,从而突出显示效率较低的 GPU 或节点。
先决条件
无
配置参数
参数名称 | 类型 | 默认值 | 值范围 | 描述 |
---|---|---|---|---|
test_duration | 浮点数 | 90.0 | 30.0 - 3600.0 | 性能测试应运行多长时间(以秒为单位)。建议将其设置为至少 30 秒,以使性能稳定。 |
temperature_max | 浮点数 | Null | 30.0 - 120.0 | 卡在测试期间允许达到的最高温度(摄氏度)。请注意,此检查默认情况下处于禁用状态。使用 nvidia-smi -q 查看设备的正常温度限制。 |
target_stress | 浮点数 | Null | 取决于 SKU | 每张卡将尝试达到的最大相对性能。 |
统计输出
统计名称 | 统计范围 | 类型 | 描述 |
---|---|---|---|
power_usage | GPU | 时间序列浮点数 | 每个 GPU 每秒的功耗(瓦特)。请注意,对于多 GPU 板,每个 GPU 获得板的功率预算的一部分。 |
graphics_clock | GPU | 时间序列浮点数 | 每个 GPU 每秒的时钟频率(MHZ) |
memory_clock | GPU | 时间序列浮点数 | GPU 内存每秒的时钟频率(MHZ) |
nvml_events | GPU | 时间序列 Int64 | 使用 nvmlEventSetWait 读取的任何事件 - 包括单比特或双比特错误或 XID 错误 - 在测试期间。 |
power_violation | GPU | 时间序列浮点数 | 此 GPU 违反功耗约束的时间百分比。 |
gpu_temperature | GPU | 时间序列浮点数 | GPU 每秒的温度(摄氏度) |
perf_gflops | GPU | 时间序列浮点数 | 自测试开始以来每秒读取的平均 GFLOPS。 |
flops_per_op | GPU | 浮点数 | 每个排队到 GPU 流的操作的 FLOP(浮点运算)。一个操作是对 cublasSgemm 或 cublasDgemm 的一次调用 |
bytes_copied_per_op | GPU | 浮点数 | 每个操作复制到 GPU 和从 GPU 复制的字节数 |
num_cuda_streams | GPU | 浮点数 | 每个 GPU 用于将操作排队到 GPU 的 cuda 流的数量 |
try_ops_per_sec | GPU | 浮点数 | 达到目标 GFLOPS 所需的计算 ops/秒数 |
失败
- GPU 温度超过用户提供的阈值。
- 如果热违规计数器增加
- 如果无法达到目标性能水平
- 如果发生 GPU 双位 ECC 错误,或者发生了配置数量的 SBE 错误。
- 如果发生严重 XID
定向压力插件
定向压力插件的目的是通过使用 cublas 进行大型矩阵乘法,将 GPU 提升到目标性能水平(以 GFLOPS 为单位)。该插件计算达到配置的性能目标所需的每秒矩阵运算次数,如果无法达到该目标,则会失败。
此插件应用于在目标 GPU 处于实际负载条件下时观察热、功耗和相关异常。通过设置适当的参数,用户可以确保节点或集群中的所有 GPU 都达到期望的性能水平。对生成的统计信息的进一步分析还可以显示达到这些目标所需的功耗、时钟或温度的变化,从而突出显示效率较低的 GPU 或节点。
先决条件
无
配置参数
参数名称 | 类型 | 默认值 | 值范围 | 描述 |
---|---|---|---|---|
test_duration | 浮点数 | 120.0 | 30.0 - 3600.0 | 定向压力测试应运行多长时间(以秒为单位)。建议将其设置为至少 30 秒,以使性能稳定。 |
temperature_max | 浮点数 | Null | 30.0 - 120.0 | 卡在测试期间允许达到的最高温度(摄氏度)。请注意,此检查默认情况下处于禁用状态。使用 nvidia-smi -q 查看设备的正常温度限制。 |
target_stress | 浮点数 | Null | 取决于 SKU | 每张卡将尝试达到的最大相对压力。 |
max_pcie_replays | 浮点数 | 160.0 | 1.0 - 1000000.0 | 每个 GPU 在此插件运行期间允许的最大 PCIe 重传次数。这基于 PCIe Gen 3.0 的预期重传率(每分钟 <8 次),假设此插件将运行 2 分钟(可配置),并允许 10 倍的重传次数才视为失败。 |
统计输出
统计名称 | 统计范围 | 类型 | 描述 |
---|---|---|---|
power_usage | GPU | 时间序列浮点数 | 每个 GPU 每秒的功耗(瓦特)。请注意,对于多 GPU 板,每个 GPU 获得板的功率预算的一部分。 |
graphics_clock | GPU | 时间序列浮点数 | 每个 GPU 每秒的时钟频率(MHZ) |
memory_clock | GPU | 时间序列浮点数 | GPU 内存每秒的时钟频率(MHZ) |
nvml_events | GPU | 时间序列 Int64 | 使用 nvmlEventSetWait 在测试期间读取的任何事件及其读取的时间戳。 |
power_violation | GPU | 时间序列浮点数 | 此 GPU 违反功耗约束的时间百分比。 |
gpu_temperature | GPU | 时间序列浮点数 | GPU 每秒的温度(摄氏度) |
perf_gflops | GPU | 时间序列浮点数 | 自测试开始以来每秒读取的平均 GFLOPS。 |
flops_per_op | GPU | 浮点数 | 每个排队到 GPU 流的操作的 FLOP(浮点运算)。一个操作是对 cublasSgemm 或 cublasDgemm 的一次调用 |
bytes_copied_per_op | GPU | 浮点数 | 每个操作复制到 GPU 和从 GPU 复制的字节数 |
num_cuda_streams | GPU | 浮点数 | 每个 GPU 用于将操作排队到 GPU 的 cuda 流的数量 |
try_ops_per_sec | GPU | 浮点数 | 达到目标 GFLOPS 所需的计算 ops/秒数 |
pcie_replay_count | GPU | 浮点数 | 自“目标压力”插件启动以来,每秒读取的 PCIe 重传次数。 |
失败
- GPU 温度超过用户提供的阈值。
- 如果温度违规计数器增加
- 如果无法达到目标压力级别
- 如果发生 GPU 双位 ECC 错误,或者发生了配置数量的 SBE 错误。
- 如果 PCIe 重传次数超过用户提供的阈值。
- 发生严重 XID 错误
电源插件
电源插件的目的是通过逐步增加 GPU 的计算负载,将 GPU 提升到预先配置的瓦特功率级别,直到达到期望的功率级别。这验证了 GPU 可以在合理的时间内维持功率水平,而不会出现诸如热违规之类的问题。
先决条件
无
配置参数
参数名称 | 类型 | 默认值 | 值范围 | 描述 |
---|---|---|---|---|
test_duration | 浮点数 | 120.0 | 30.0 - 3600.0 | 性能测试应运行多长时间,以秒为单位。建议将其设置为至少 60 秒,以使性能稳定。 |
temperature_max | 浮点数 | Null | 30.0 - 120.0 | 卡在测试期间允许达到的最高温度(摄氏度)。请注意,此检查默认情况下处于禁用状态。使用 nvidia-smi -q 查看设备的正常温度限制。 |
目标功率 | 浮点数 | 每个 GPU 不同 | 每个 GPU 不同。默认为 TDP - 1 瓦。 | 我们应尝试维持的功率级别(以瓦特为单位)。如果此值设置得高于 GPU 的强制功率限制,那么我们将尝试限制设备的功率。 |
统计输出
统计名称 | 统计范围 | 类型 | 描述 |
---|---|---|---|
power_usage | GPU | 时间序列浮点数 | 每个 GPU 每秒的功耗(瓦特)。请注意,对于多 GPU 板,每个 GPU 获得板的功率预算的一部分。 |
graphics_clock | GPU | 时间序列浮点数 | 每个 GPU 每秒的时钟频率(MHZ) |
memory_clock | GPU | 时间序列浮点数 | GPU 内存每秒的时钟频率(MHZ) |
nvml_events | GPU | 时间序列 Int64 | 使用 nvmlEventSetWait 在测试期间读取的任何事件及其读取的时间戳。 |
power_violation | GPU | 时间序列浮点数 | 此 GPU 违反功耗约束的时间百分比。 |
gpu_temperature | GPU | 时间序列浮点数 | GPU 每秒的温度(摄氏度) |
失败
- GPU 温度超过用户提供的阈值。
- 如果温度违规计数器增加
- 如果无法达到目标性能水平
- 如果发生 GPU 双位 ECC 错误,或者发生了配置数量的 SBE 错误。
- 如果发生严重 XID
测试输出
可以通过设置“logfile”全局参数来收集测试的输出,该参数表示每个测试产生的详细输出的前缀。默认的输出类型是 JSON,但也提供文本和二进制输出。后两者分别更适合由自定义消费者进行解析和直接读取,因此本文档的这一部分将重点介绍 JSON 输出。
JSON 输出
JSON 输出格式基于第 3 章中每个测试概述中给出的“stats”键进行键控。这些标准 JSON 文件可以通过多种方式进行处理,但已提供两个示例 Python 脚本,以帮助在默认安装目录中进行可视化。“第一个”是将 JSON 转换为逗号分隔值脚本 (json2csv.py),可用于将键值导入到图形电子表格中。正确用法为
user@hostname $ python json2csv.py -i stats_targeted_performance.json -o stats.csv -k gpu_temperature,power_usage
还提供了一个示例 Python 脚本,该脚本使用 pygal 库来生成易于查看的标量矢量图形图表 (json2svg.py),可以在任何浏览器中打开。正确用法为
user@hostname $ python json2svg.py -i stats_targeted_performance.json -o stats.svg -k gpu_temperature,power_usage
声明
声明
所有 NVIDIA 设计规范、参考板、文件、图纸、诊断程序、列表和其他文档(统称为“材料”,无论合并或单独)均按“原样”提供。NVIDIA 对这些材料不作任何明示、暗示、法定或其他方面的保证,并明确声明不承担任何关于不侵权、适销性和适用于特定用途的默示保证。
所提供的信息被认为是准确和可靠的。但是,NVIDIA 公司对使用此类信息造成的后果或因使用此类信息而可能导致的侵犯第三方专利或其他权利的行为不承担任何责任。NVIDIA 公司未以暗示或其他方式授予任何专利权许可。本出版物中提及的规格如有更改,恕不另行通知。本出版物取代并替换以前提供的所有其他信息。未经 NVIDIA 公司明确书面批准,NVIDIA 公司产品不得用作生命支持设备或系统中的关键组件。