更新时间:2024-04-30 GMT+08:00
分享

GP Ant8裸金属服务器Ubuntu 20.04安装NVIDIA 525+CUDA 12.0

场景描述

本文旨在指导完成GP Ant8裸金属服务器装机和nccl-test测试。装机软件预览如下:

表1 装机软件

软件类型

版本详情

预置操作系统

Ubuntu 20.04 server 64bit

驱动版本

525.105.17

nvidia-cuda

12.0

nvidia-fabricmanager

515.10.17(必须和驱动版本保持一致)

mlnx-ofed-linux

5.8-2.0.3.0/5.4-3.6.8.1(可选)

nvidia-peer-memory-dkms

1.2-0

nccl

libnccl2=2.16.2-1+cuda12.0 libnccl-dev=2.16.2-1+cuda12.0

nccl-test

v.2.13.6

前提条件

  • 华为云Ant8裸金属服务器,使用IMS公共镜像Ubuntu 20.04 x86 64bit sdi3 for Ant8 BareMetal。镜像中仅预置IB驱动。NVIDIA驱动均未安装。
  • 已联系客户经理完成RoCE网络配置。

操作步骤

  1. 替换apt源。

    sudo sed -i "s@http://.*archive.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list
    sudo sed -i "s@http://.*security.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list
    sudo apt update

  2. 安装nvidia驱动。

    注意替换驱动版本为自己期望的。
    sudo apt install nvidia-driver-525

  3. 安装cuda-toolkit,可参考CUDA Toolkit Downloads

    wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
    sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600
    wget https://developer.download.nvidia.com/compute/cuda/12.0.0/local_installers/cuda-repo-ubuntu2004-12-0-local_12.0.0-525.60.13-1_amd64.deb
    sudo dpkg -i cuda-repo-ubuntu2004-12-0-local_12.0.0-525.60.13-1_amd64.deb
    sudo cp /var/cuda-repo-ubuntu2004-12-0-local/cuda-*-keyring.gpg /usr/share/keyrings/
    sudo apt-get update
    sudo apt-get -y install cuda

  4. 安装NCCL,可参考NCCL Documentation

    wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-keyring_1.0-1_all.deb
    sudo dpkg -i cuda-keyring_1.0-1_all.deb
    sudo apt update
    sudo apt install libnccl2 libnccl-dev

  5. 安装nvidia-fabricmanager。

    sudo apt install nvidia-fabricmanager-525
    systemctl enable nvidia-fabricmanager
    systemctl start nvidia-fabricmanager

  6. 安装nv-peer-memory。

    git clone https://github.com/Mellanox/nv_peer_memory.git
    cd ./nv_peer_memory
    ./build_module.sh
    cd /tmp
    tar xzf /tmp/nvidia-peer-memory_1.3.orig.tar.gz
    cd nvidia-peer-memory-1.3
    dpkg-buildpackage -us -uc
    dpkg -i ../nvidia-peer-memory-dkms_1.2-0_all.deb
    • 如果git clone拉不下来代码,可能需要先设置下git的配置:
      git config --global core.compression -1
      export GIT_SSL_NO_VERIFY=1
      git config --global http.sslVerify false
      git config --global http.postBuffer 10524288000
      git config --global http.lowSpeedLimit 1000
      git config --global http.lowSpeedTime 1800
    • 如果安装完成后lsmod看不到nv-peer-memory,可能是由于ib驱动版本过低导致,此时需要升级ib驱动,升级命令:
      wget https://content.mellanox.com/ofed/MLNX_OFED-5.4-3.6.8.1/MLNX_OFED_LINUX-5.4-3.6.8.1-ubuntu20.04-x86_64.tgz
      tar -zxvf MLNX_OFED_LINUX-5.4-3.6.8.1-ubuntu20.04-x86_64.tgz
      cd MLNX_OFED_LINUX-5.4-3.6.8.1-ubuntu20.04-x86_64
      apt-get install -y python3 gcc quilt build-essential bzip2 dh-python pkg-config dh-autoreconf python3-distutils debhelper make
      ./mlnxofedinstall --add-kernel-support
    • 如果想安装其它更高版本的ib驱动,请参考Linux InfiniBand Drivers。比如要安装MLNX_OFED-5.8-2.0.3.0 (当前最新版本),则命令为:
      wget https://content.mellanox.com/ofed/MLNX_OFED-5.8-2.0.3.0/MLNX_OFED_LINUX-5.8-2.0.3.0-ubuntu20.04-x86_64.tgz
      tar -zxvf MLNX_OFED_LINUX-5.8-2.0.3.0-ubuntu20.04-x86_64.tgz
      cd MLNX_OFED_LINUX-5.8-2.0.3.0-ubuntu20.04-x86_64
      apt-get install -y python3 gcc quilt build-essential bzip2 dh-python pkg-config dh-autoreconf python3-distutils debhelper make
      ./mlnxofedinstall --add-kernel-support

  7. 设置环境变量。

    MPI路径版本需要匹配,可以通过“ls /usr/mpi/gcc/”查看openmpi的具体版本。

    # 加入到~/.bashrc
    export LD_LIBRARY_PATH=/usr/local/cuda/lib:usr/local/cuda/lib64:/usr/include/nccl.h:/usr/mpi/gcc/openmpi-4.1.2a1/lib:$LD_LIBRARY_PATH
    export PATH=$PATH:/usr/local/cuda/bin:/usr/mpi/gcc/openmpi-4.1.2a1/bin

  8. 安装编译nccl-test。

    cd /root
    git clone https://github.com/NVIDIA/nccl-tests.git
    cd ./nccl-tests
    make  MPI=1 MPI_HOME=/usr/mpi/gcc/openmpi-4.1.2a1 -j 8

    编译时需要加上MPI=1的参数,否则无法进行多机之间的测试。

    MPI路径版本需要匹配,可以通过“ls /usr/mpi/gcc/”查看openmpi的具体版本。

  9. 测试。

    • 单机测试:
      /root/nccl-tests/build/all_reduce_perf -b 8 -e 1024M -f 2 -g 8
    • 多机测试:
      mpirun --allow-run-as-root --hostfile hostfile -mca btl_tcp_if_include eth0 -mca btl_openib_allow_ib true -x NCCL_DEBUG=INFO -x NCCL_IB_GID_INDEX=3 -x NCCL_IB_TC=128 -x NCCL_ALGO=RING -x NCCL_IB_HCA=^mlx5_bond_0 -x LD_LIBRARY_PATH  /root/nccl-tests/build/all_reduce_perf -b 8 -e 11g -f 2 -g 8

      hostfile格式:

      #主机私有IP  单节点进程数
      192.168.20.1 slots=1
      192.168.20.2 slots=1
      • 需要执行mpirun的节点到hostfile中的节点间有免密登录(如何设置SSH免密登录)。
      • btl_tcp_if_include后面替换为主网卡名称。
      • NCCL环境变量:

        NCCL_IB_GID_INDEX=3 :数据包走交换机的队列4通道,这是RoCE协议标准。

        NCCL_IB_TC=128 :使用RoCE v2协议,默认使用RoCE v1,但是v1在交换机上没有拥塞控制,可能丢包,而且后面的交换机不会支持v1,就跑不起来了。

        NCCL_ALGO=RING :nccl_test的总线bandwidth是在假定是Ring算法的情况下计算出来的。

        计算公式是有假设的: 总线带宽 = 算法带宽 * 2 ( N-1 ) / N ,算法带宽 = 数据量 / 时间

        但是这个计算公式的前提是用Ring算法,Tree算法的总线带宽不能这么算。

        如果Tree算法算出来的总线带宽相当于是相对Ring算法的性能加速。

        算法计算总耗时减少了,所以用公式算出来的总线带宽也增加了。

        理论上Tree算法是比Ring算法更优的,但是Tree算法对网络的要求比Ring高,计算可能不太稳定。 Tree算法可以用更少的数据通信量完成all reduce计算,但用来测试性能不太合适。

        因此,会出现两节点实际带宽100,但测试出速度110,甚至130GB/s的情况。

        加这个参数以后,2节点和2节点以上情况的速度才会稳定一些。

分享:

    相关文档

    相关产品