下载
中文
注册

多机峰值带宽低

问题现象

使用HCCL Test工具测试多机带宽时,多机带宽峰值低于预期值。

原因分析

  • 使用HCCL Test性能测试工具时,未设置HCCL_BUFFSIZE环境变量,或者测试命令中设置的测试数据量较小。
  • 开启了Profiling功能或日志等级未设置为默认的ERROR级别,会导致带宽较低。
  • 某台机器带宽较低,导致多机带宽低。
  • 交换机负载分担方式配置不合理,产生拥塞。
  • spine和leaf交换机之间的某个端口状态异常。

解决步骤

  1. 确认HCCL_BUFFSIZE环境变量是否设置。

    环境变量HCCL_BUFFSIZE用于调整两个NPU之间共享数据的缓存区大小,两个NPU之间共享数据的缓存区大小默认为200M,使用HCCL Test工具进行性能测试的场景下,往往通信数据量较大,此种场景下,可适当增大HCCL_BUFFSIZE的值,提升数据通信效率与带宽。

    配置示例:

    export HCCL_BUFFSIZE=2048
  2. 确认hccl_test测试命令中的参数“-e”是否配置过小。

    “-e”代表测试数据大小的结束值,若“-e”较小,则带宽会较小,建议增大-e参数的值,例如:

    mpirun -n 8 ./bin/all_reduce_test -b 8K -e 4G -f 2 -d fp32 -o sum -p 8

  3. 查看是否开启了Profiling性能数据采集功能。

    Porfiling性能数据采集功能会导致带宽变低,请关闭此功能。

    每种业务场景的性能数据采集功能开启方法不同,详细的方法可参见性能调优工具指南中的“性能分析”章节。

  4. 查看日志级别是否为“ERROR”。
    查看Host与Device的日志级别:
    • Host侧日志级别可通过echo $ASCEND_GLOBAL_LOG_LEVEL命令查看,0代表debug,1代表info,2代表warning,3代表error。
    • Device侧日志级别可通过如下命令查看:

      for i in {0..7}; do /usr/local/Ascend/driver/tools/msnpureport -r -d $i; done

    若日志级别不为默认值ERROR,则执行如下命令分别修改HOST与DEVICE的日志级别为“ERROR”。
    • Host侧日志级别修改

      在测试主机设置即可,MPI会将环境变量带到所有测试机器:

      export ASCEND_GLOBAL_LOG_LEVEL=3 // (0:debug 1:info 2:warning 3:error)

    • Device日志级别修改

      for i in {0..7}; do msnpureport -g error -d $i; done

  5. 多机带宽较低还可能是某台机器带宽较低或网络配置不一致导致的。

    此种场景下,可以通过二分法找到这台机器,然后参见单机带宽低进行可能原因的排查,若单机测试均无问题可尝试通过“cat /etc/hccn.conf”命令检查所有服务器配置是否一样,某台机器网络配置不一致,有可能会造成单机测试无问题(单机不使用外部网络),但多机带宽低的情况。

  6. 检查交换机负载分担方式是否配置合理。

    执行如下命令,查看服务器统计信息:

    for i in $(seq 0 15); do echo "==============> $i"; hccn_tool -i $i -stat -g |grep pfc ;done

    统计信息中有很多“rx pfc”,标识交换机负载分担不均衡,产生了拥塞。

    可通过如下方法尝试解决:

    • 首先解决交换机的pfc问题,要做到pfc很少甚至没有pfc。
    • 查看交换机流量是否不均衡,有没有出现多打一(多条流量走一个端口出),有些端口流量大有些端口流量小,产生拥塞的情况。
    • 假如是通过udp端口进行哈希选路,查看是否某些机器的udp port没配置。