GPU+Mellanox HCA GDR TEST 环境部署
1、安装nvidia驱动(建议采用最新驱动),根据操作系统和显卡型号选择即可
https://www.nvidia.cn/Download/index.aspx?lang=cn
2、安装CUDA
https://developer.nvidia.com/cuda-downloads
3、安装对应操作系统版本的Mellanox OFED
https://www.mellanox.com/products/infiniband-drivers/linux/mlnx_ofed
上述安装完成后可以使用nvidia-smi以及ibstat查看GPU/HCA卡的状态
4、关闭selinux;配置cuda环境变量;
# set enforce 0
# export PATH=$PATH:/usr/local/cuda/bin
# export LD_LIBRARY_PATH=/usr/local/cuda/lib:/usr/local/cuda/lib64:$LD_LIBRARY_PATH
5、安装nv_peer_memory
https://github.com/Mellanox/nv_peer_memory
# ./build_module.sh
# rpmbuild –rebuild /tmp/nvidia_peer_memory-1.0-8.src.rpm
# rpm -ivh <path to generated binary rpm file>
6、安装GDR TEST的相关套件并测试(perftest)
https://github.com/linux-rdma/perftest
7、nccl test
https://www.jianshu.com/p/f34c08ccc2ff
https://github.com/NVIDIA/nccl-tests
NCCL环境变量理解(影响通信效率)
https://docs.nvidia.com/deeplearning/nccl/user-guide/docs/env.html
修改环境变量或在nccl.conf中修改相关参数选项。可以改变通信特点,进而起到影响通行性能的作用。
NCCL_P2P_DISABLE 默认是开启P2P通信的,这样一般会更高效,用到点对点通信延迟会有所改善,带宽也是。
NCCL_P2P_LEVEL 开启P2P后可以设置P2P的级别,比如在那些特定条件下可以开启点对点通信,具体的可以参看文档(0-5)
NCCL_SOCKET_NTHREADS 增加它的数量可以提高socker传输的效率,但是会增加CPU的负担
NCCL_BUFFLE_SIZE 缓存数据量,缓存越大一次ring传输的数据就越大自然对带宽的压力最大,但是相应的总延迟次数会少。缺省值是4M(4194304),注意设置的时候使用bytes(字节大小)
NCCL_MAX/MIN_NCHANNELS 最小和最大的rings,rings越多对GPU的显存、带宽的压力都越大,也会影响计算性能
NCCL_CHECKS_DISABLE 在每次集合通信进行前对参数检验校对,这会增加延迟时间,在生产环境中可以设为1.缺省是0
NCCL_CHECK_POINTERS 在每次集合通信进行前对CUDA内存 指针进行校验,这会增加延迟时间,在生产环境中可以设为1.缺省是0
NCCL_NET_GDR_LEVEL GDR触发的条件,默认是当GPU和NIC挂载一个swith上面时使用GDR
NCCL_IGNORE_CPU_AFFINITY 忽略CPU与应用的亲和性使用GPU与nic的亲和性为主
NCCL_ALGO 通信使用的算法,ring Tree Collnet