转载请注明出处:小锋学长生活大爆炸xfxuezhagn.cn 如果本文帮助到了你,欢迎点赞、收藏、关注哦~
https://github.com/NVIDIA/nccl-tests
1、对于cuda、cudnn、nccl的环境安装可以看:
https://cloud.tencent.com/developer/article/2162519
2、然后编译工具,编译的结果在build文件夹里:
cd nccl-test
make
NCCL(NVIDIA 集体通信库)测试提供了集体操作的重要性能指标,对于优化和理解多 GPU 通信非常重要。以下是这些指标的详细解释及其含义。
带宽表示操作期间的数据传输速率,分为两种类型:
操作:对所有节点上的输入求和并将结果分发到所有节点。注意:这与所使用的算法(环形、树形或其他)无关,只要它们使用点对点操作(发送/接收)即可。
示例:o_0 = o_1 = o_2 = ... = o_{n-1} = i_0 + i_1 + i_2 + ... + i_{n-1}
**环将按照环的顺序进行操作:i\_0 + i\_1 + ...+ i\_{n-1} -> o\_{n-1} -> o\_0 -> o\_1 -> ... -> o\_{n-2}**
**树状结构可以分层处理 :(((((i\_{n-1} + i\_{n-2}) + (i\_{n-3} + i\_{n-4}))+ ...+ (i\_1 + i\_0)))))-> o\_0 -> (o\_{n/2} -> (o\_{3n/4} ...))**
**在所有情况下,我们需要对每个元素进行 n-1 次添加和 n 次赋值。由于每一步都在不同的秩上,只有潜在的一步除外(最后一个输入和第一个输出),因此我们需要 2(n-1) 次数据传输(x 个元素)才能执行一次 allReduce 操作。**
**考虑到每个秩都有通向 B 外部世界的带宽,执行 S 个元素的 allReduce 操作的时间充其量为 :t = (S\*2\*(n-1)) / (n\*B)**
**事实上,我们有 S 个元素,每个元素有 2\*(n-1) 个操作,有 n 个带宽为 B 的链路来执行这些操作。对等式重新排序后,我们发现 t = (S/B) \* (2\*(n-1)/n)**
**因此,要获得可以与硬件峰值带宽进行比较的 AllReduce 带宽测量值,我们需要计算 :B = S/t \* (2\*(n-1)/n) = algbw \* (2\*(n-1)/n)**
./all_reduce_perf
USAGE: all_reduce_perf -t,--nthreads <num threads> -b,--minbytes <min size in bytes> -i,--stepbytes <increment size> -n,--iters <iteration count> -w,--warmup_iters <warmup iteration count> -c,--check <check iteration count> -d,--datatype <nccltype/all> -z,--blocking <0/1> -T,--timeout <time in seconds> -C,--report_cputime <0/1> -R,--local_register <1/0> enable local buffer registration on send/recv buffers (default: disable)
./reduce_scatter_perf
USAGE: reduce_scatter_perf -t,--nthreads <num threads> -b,--minbytes <min size in bytes> -i,--stepbytes <increment size> -n,--iters <iteration count> -w,--warmup_iters <warmup iteration count> -c,--check <check iteration count> -d,--datatype <nccltype/all> -z,--blocking <0/1> -T,--timeout <time in seconds> -C,--report_cputime <0/1> -R,--local_register <1/0> enable local buffer registration on send/recv buffers (default: disable)
./all_gather_perf
USAGE: all_gather_perf -t,--nthreads <num threads> -b,--minbytes <min size in bytes> -i,--stepbytes <increment size> -n,--iters <iteration count> -w,--warmup_iters <warmup iteration count> -c,--check <check iteration count> -d,--datatype <nccltype/all> -z,--blocking <0/1> -T,--timeout <time in seconds> -C,--report_cputime <0/1> -R,--local_register <1/0> enable local buffer registration on send/recv buffers (default: disable)
./broadcast_perf
USAGE: broadcast_perf -t,--nthreads <num threads> -b,--minbytes <min size in bytes> -i,--stepbytes <increment size> -n,--iters <iteration count> -w,--warmup_iters <warmup iteration count> -c,--check <check iteration count> -d,--datatype <nccltype/all> -z,--blocking <0/1> -T,--timeout <time in seconds> -C,--report_cputime <0/1> -R,--local_register <1/0> enable local buffer registration on send/recv buffers (default: disable)
./reduce_perf
USAGE: reduce_perf -t,--nthreads <num threads> -b,--minbytes <min size in bytes> -i,--stepbytes <increment size> -n,--iters <iteration count> -w,--warmup_iters <warmup iteration count> -c,--check <check iteration count> -d,--datatype <nccltype/all> -z,--blocking <0/1> -T,--timeout <time in seconds> -C,--report_cputime <0/1> -R,--local_register <1/0> enable local buffer registration on send/recv buffers (default: disable)
为了在不同节点数量 nnn 上归一化总线带宽,我们对算法带宽应用一个修正因子:
总线带宽反映了硬件瓶颈的速度:NVLink、PCIe、QPI 或网络。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。