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 测试。