如何解决我的 NVIDIA GPU 加速 EC2 Linux 实例上的 Xid 错误?
在 NVIDIA GPU 加速的 Amazon Elastic Compute Cloud(Amazon EC2)Linux 实例上运行我的应用程序时,应用程序崩溃,并在系统日志中发现了特定于 GPU 的 Xid 错误。我想从 GPU 检索诊断信息并解决与 GPU 相关的 Xid 错误。
简短描述
AWS 提供具有 GPU 加速功能的多个 EC2 实例系列。GPU 会被传递到所有 GPU 加速的 EC2 实例系列的访客实例。这让您可以使用 GPU 硬件的全部功能。
解决方法
阅读和解释 nvidia-smi 诊断信息
使用 nvidia-smi 工具来检索被附加到实例的 NVIDIA GPU 的运行状况和性能的统计数据和诊断信息。NVIDIA GPU 驱动程序会自动提供此工具,包括深度学习亚马逊云机器镜像(AMI)的任何变体。有关为任何 GPU 实例系列安装 NVIDIA GPU 驱动程序的详细信息,请参阅在 Linux 实例上安装 NVIDIA 驱动程序。
运行 sudo nvidia-smi -q 命令以查询统计信息。
内存统计数据示例
ECC Errors Volatile # Errors counted since last GPU driver reload SRAM Correctable : 0 SRAM Uncorrectable : 0 DRAM Correctable : 0 DRAM Uncorrectable : 0 Aggregate # Errors counted for the life of the GPU SRAM Correctable : 0 SRAM Uncorrectable : 0 DRAM Correctable : 0 DRAM Uncorrectable : 0
各代 NVIDIA GPU 都可记录 GPU 硬件的聚合和易失存储器统计数据。请注意,聚合 ECC 错误计数器在 GPU 生命周期内持续存在。正值并不表示实例遇到了硬件问题或 GPU 故障。正值可能来自过去,因此查看易失性指标很重要。
但是,自上次重新加载 GPU 驱动程序开始,易失性 ECC 错误将从零开始递增。在实例的生命周期内,无法更正的 ECC 错误会递增。如果 ECC 错误是易失性的,则可能需要重启实例或重置 GPU。根据实例类型和 GPU 代系,重启会启动页面停用或为内存损坏页面重新映射行。
P3、P3dn、G4dn 实例
Retired Pages Single Bit ECC : 0 Double Bit ECC : 0 Pending Page Blacklist : No
早期代系的 NVIDIA GPU 使用动态页面停用。您可以忽略一位错误,因为它们通常是良性的。GPU 固件可识别双位错误。
如果 GPU 固件识别出双位错误,则 GPU 会停止处理并导致应用程序突然退出。如果出现双位错误,则操作系统(OS)日志中会记录 Xid 错误,而挂起页面黑名单状态为是。要解决这些错误,请重启实例以停用损坏内存位置。重启后,挂起页面黑名单状态会被重置为否。
**注意:**错误计数器在 GPU 的生命周期内持续存在。因此,实例启动时的非零计数器并不表示存在活动的硬件问题或 GPU 故障。
P4d、P4de、G5 和 G5g 实例
Remapped Rows Correctable Error : 0 # Can safely ignore. Uncorrectable Error : 0 # If > 0, review system logs for Xid errors Pending : No # If Yes, an instance reboot or GPU reset is required. Remapping Failure Occurred : No # Should always be No. If Yes, please stop/start the instance.
后期使用 A100 和 A10G GPU 的实例系列可通过行重新映射来隔离和抑制内存错误。与动态页面停用类似,行重新映射可防止重复使用已知的已降级内存位置。行重新映射取代了上一代 GPU 中的页面停用方案。
您可以忽略可纠正的内存错误。无法纠正的错误可能会导致应用程序出现错误或突然退出。无法纠正的错误会作为 Xid 错误记录到操作系统日志中。
在出现无法纠正的错误后激活的挂起重新映射行需要重置 GPU 才能停用错误的内存位置。重启实例以重置 GPU。或者,运行以下命令以手动重置 GPU:
sudo nvidia-smi -i <GPU UUID> -r
如果重新映射失败,则停止并启动实例。停止并启动实例会将实例迁移到具有运行状况良好的 GPU 的新底层主机。
检测到运行状况不佳的 GPU
AWS 使用自动化来定期执行诊断和检测运行状况不佳的 GPU。任何因硬件错误而运行状况不佳的 GPU 最终都会被识别并自动更换。
失败模式
各代 NVIDIA GPU 的 GPU 驱动程序会将错误作为 Xid 错误写入操作系统的系统日志中。有关这些错误的分类和描述,请参阅 NVIDIA 网站上的 Xid 错误。
以下常见 Xid 错误的列表包括解决这些问题的最佳实践:
GPU 数量不正确或者缺少 GPU
运行以下命令:
nvidia-smi —list-gpus | wc -l
在命令输出中,确保附加的 GPU 数量与您的实例类型的预期 GPU 数量相匹配。如果缺少 GPU,则停止并启动实例。
Xid 48: 发生了 DBE。
Xid 63: 页面已成功停用。
Xid 64: 由于出现错误,页面停用失败。
上述错误表明出现了 ECC 错误。要解决此问题,请完成 GPU 数量不正确或者缺少 GPU部分中的步骤。
NVRM: Xid 79(PCI:0000:00:00): GPU 已经从总线上掉落。
Xid 79 错误表示实例失去了与底层 GPU 的通信。要解决此问题,请重启实例。如果重启后问题仍然存在,请停止并启动您的实例。
警告:infoROM 在 gpu 0000:00:00.0 上已损坏
infoROM 已损坏错误表示 GPU 固件的一部分已损坏。要解决此问题,请重启实例或重置 GPU。如果重启后问题仍然存在,请停止并启动您的实例。
NVRM: Xid 119 PCI:0000:00:00): 等待 GSP 的 RPC 超时!
NVRM: Xid 120 PCI:0000:00:00): GSP 错误: 任务 1 引发了错误代码...
上述错误会在 GPU 系统处理器(GSP)启用时出现。在 GPU 驱动程序或内核模块中验证 GSP 是否已关闭。
最佳实践
- 如果可能,请使用最新的驱动程序和 CUDA 运行时系统。新版本的 GPU 驱动程序经常会引入修补程序、改进和优化。但是,这些更新可能包含功能性更改。首先在非生产 GPU 实例上暂存和测试驱动程序更新。
- 与带有 Turbo Boost 的常用 x86 CPU 类似,GPU 的内核和内存时钟速度会根据负载而动态变化。为了获得最佳性能,请始终将 GPU 内核和内存时钟速度设置为其最大速度。有关详细信息,请参阅优化 GPU 设置。
- 关闭 GSP。在最近的实例代系中,NVIDIA GPU 包含了 GSP 固件功能。GSP 旨在卸载 GPU 初始化以及其他管理任务。有关详细信息,请参阅 NVIDIA 网站上的关闭 GSP 固件。
- 使用 Amazon CloudWatch 代理来监控您的 GPU。CloudWatch 代理原生支持 NVIDIA GPU 指标,您可以从 CloudWatch 收集和监控这些指标。有关详细信息,请参阅收集 NVIDIA GPU 指标。
联系 AWS Support
在支持案例中提供您的实例 ID 以及 nvidia-smi -q 命令的输出。
此外,运行 NVIDIA GPU 驱动程序中包含的 sudo nvidia-bug-report.sh 命令。nvidia-bug-report.sh 脚本会捕获主要日志和其他诊断信息。该脚本会在您当前的工作目录中创建名为 nvidia-bug-report.log.gz 的压缩日志文件,您可以检索该文件并将其提供给 AWS Support。
相关内容
- AWS 官方已更新 1 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 2 年前