cuDSS 调试技巧与窍门#

默认模式#

了解在使用 cuDSS 时可能发生两种不同类型的错误,这将很有帮助

  • 主机端错误:这些错误可以通过检查主机端状态来检查,因为所有 cuDSS API 都返回 cudssStatus_t 类型的值,可以检查其是否为 CUDSS_STATUS_SUCCESS

  • 设备端错误:这些错误可能异步发生,因此需要额外的努力来更精确地定位。cuDSS 的主例程 cudssExecute() 可以检测并报告一些设备端错误,如果用户为 CUDSS_DATA_INFO 调用 cudssDataGet()

    注意:调用 cudssDataGet() 会在内部执行流同步。因此,不建议在不需要时调用 cudssDataGet(),因为这会带来流同步的开销。因此,出于性能原因,建议用户在非调试时尽可能少地调用 cudssDataGet

此外,在调试可能与 cuDSS 相关的问题时,以下通用技巧是有效的

  • 建议启用 日志记录。例如,使用 CUDSS_LOG_LEVEL=5 重新运行可能会提供有关问题原因的有用信息。

  • 由于 cuDSS 支持异步执行,为了更准确地定位失败的 cuDSS 调用位置,可以在 cuDSS 调用之间插入同步(特别是对于 cudssExecute())。

    具体来说,可以调用 cudaStreamSynchronize(stream),然后调用 cudaGetLastError() 来检查 cuDSS 内部潜在的 CUDA API 错误。这可以与通过 cudssDataGet() 检查 cuDSS 特定的设备端错误结合使用,如上所述。

MGMN 模式#

虽然 cuDSS 的 MGMN 模式也遵循上述所有调试技巧,但还有一些特定于此模式的额外技巧。

  • 由于在多 GPU/多节点环境中可能发生各种各样的错误,因此,如果在 cuDSS 的 MGMN 模式下使用时出现问题,建议使用与应用程序中使用的特定通信后端相同的启动参数,通过简单的基准测试来检查系统配置的健康状况。

    例如,对于 NCCL,可以使用 NCCL 测试