故障排除
确保您熟悉以下已知问题和有用的调试策略。
错误
MCCL 调用可能会返回各种返回码。确保返回码始终等于 mcclSuccess。如果任何调用失败并返回与 mcclSuccess 不同的值,将 MCCL_DEBUG 设置为 "WARN" 将使 MCCL 在返回错误之前打印一个明确的警告消息。
错误被分为不同的类别。
- mcclUnhandledmusaError 和 mcclSystemError 表示对外部库的调用失败。
- mcclInvalidArgument 和 mcclInvalidUsage 表示使用 MCCL 的应用程序中存在编程错误。
在任何情况下,请参阅 MCCL 警告消息以了解如何解决问题。
RAS
从 2.24 版本开始,MCCL 包括一个可靠性、可用性和服务性(RAS)子系统,以帮助诊断和调试崩溃和挂起。
GPU Direct
MCCL 严重依赖 GPU Direct 进行 GPU 间通信。这指的是 GPU 能够直接与另一个设备(如另一个 GPU 或网卡)使用直接点对点 PCI 消息进行通信的能力。
直接点对点 PCI 消息可能因各种原因失败或表现不佳,例如缺少组件、虚拟机或容器的配置错误,或某些 BIOS 设置。
GPU 到 GPU 通信
为确保 GPU 到 GPU 通信正常工作,请查找 MUSA 示例中的 p2pBandwidthLatencyTest:
https://github.com/mthreads/musa-samples
cd musa-samples/Samples/5_Domain_Specific/p2pBandwidthLatencyTest
make
./p2pBandwidthLatencyTest
测试应该能够顺利完成,并报告 GPU 之间的良好性能。
另一个检查 GPU 到 GPU 性能的工具叫做 nvbandwidth。这可以从以下代码和说明中下载并构建:
https://github.com/mthreads/mtbandwidth
GPU 到 NIC 通信
GPU 也可以使用 GPU Direct RDMA (GDRDMA) 直接与网卡通信。这需要有兼容的网卡和驱动程序,以及加载一个额外的内核模块称为 mthreads-peermem。mthreads-peermem 模块现在随 MUSA 驱动程序提供,但必须在每个节点启动时加载:
sudo modprobe mthreads-peermem
GDRDMA 也可以通过使用最新 Linux 内核的 DMA-BUF 特性结合开源 mthreads GPU 驱动程序来启用。在这种情况下,MCCL 将自动检测并启用 DMA-BUF,因此不需要 mthreads-peermem 模块。