网络诊断工具Network Diagnostic Toolkit
Network Diagnostic Toolkit 网络诊断工具镜像为ACP平台提供了用于排查硬件及网络故障的工具,可以辅助快速定位异常节点(慢节点),提供性能基准测试。有利于用户了解当前环境的NCCL性能,GPU通信测试是否正常,提前排查通信问题或者解决训练过程中卡顿、通信效率低等问题。
前置准备工作
1、需要创建一个MPI的检测任务,镜像选择有【Toolkit】标识的镜像,选取network-diagnostic-toolkit,镜像选择最新的Tag版本。
2、启动命令写成 sleep inf
,让容器保持长运行状态,方便执行相关的检测脚本。
3、资源配置需要区分当前做的是单机(通信基线测试)还是多机(通信基线测试或者慢节点测试),副本数对应1或者n。
通过【Web Terminal】登录到pod 内,通过cat README.md
-,可以看到该工具的操作说明,包含慢节点检测和通信库基线测试2部分。
通信库基线测试(单机)
操作指令: bash everun_base.sh
。
默认开始测试的数据量为1024M,结束的最大数据量为8192M,分别对应 --nccl-bsize
和 --nccl-esize
,映射到nccl-test的参数为 -b,--minbytes <min size in bytes>
和 -e,--maxbytes <max size in bytes>
。
可以根据实际测试需要自定义数据量,例如 bash everun_base.sh --nccl-esize 4096M
。
通信库基线测试(多机)
通过nccl-test 检测4*8卡的集合通信的情况,副本数设置为4,选择8卡的产品规格。
任务创建好后,在任务详情页的Worker列表tab页,选取laucher那个Worker,通过Web Terminal登录。
操作指令: bash everun_base.sh
,4台的测试结果如下:
补充说明:
如果需要提升基线测试的结果,可以参考帮助文档环境通用环境变量,可以提升测试结果。比如在RoCE v2 *400G集训环境里,可以设置 NCCL_MIN_NCHANNELS=32
,可以大幅度提高测试结果。
慢节点检测
如果集群里面有多个节点,训练的数据并不理想,怀疑有慢节点时,可以通过检测查找到可疑的节点。
因为检测的目的是为了查找慢节点,不是做通信库基线打流测试,不需要数据量达到很大,这样会拖慢整个检测的流程,有如下几个方式可以加速检测流程:
1、设置 --nccl-esize
为4096M,减少数据的检测。
2、设置 --nccl-parallel
为并行,这样对于千卡集训,128个Worker的时候,可以快速完成整个检测过程。目前检测方式默认就是并行,不需要额外设置。
默认检测是俩俩一组Ring环状检测,每个node都会和左右2个node做一次对比检测。
直接执行 bash everun_dect.sh
,默认就是按照并行检测方式,起始数据量为1024M,结束的最大数据量为8192M,俩俩一组的检测方式,检测结果如下:
检测流程:先是每个节点单独检测,确保单节点没有问题,然后是俩俩检测launcher和worker-2 、launcher 和worker-0、worker-1和worker-2 、worker-2和worker-0。
目前各个环节的检测分值都良好,且score分数为100,最低值没有低于 max_algbw
的80%,没有怀疑的慢节点。
当前检测怀疑慢节点最低基线值设定的是实际检测数值 max_algbw
的80%,实际检测出来的分值低于这个最低基线值就会罗列出来。实际用户使用过程中,会根据理论值的80% 来判定,比如400G*80%=320 或者配置 NCCL_MIN_NCHANNELS=32
,按照380去检验。
由于检测结果会按照顺序展示,用户根据需要检验下倒数最后几个的测试数据,去排除是否为慢节点。