使用更高的网络带宽


您可以使用更高的网络带宽(100 Gbps 或更高),以提高在 GPU 虚拟机上运行的分布式工作负载的性能。

挂接了 NVIDIA T4 或 V100 GPU 的 N1 通用虚拟机的部分虚拟机配置、以及部分加速器优化机器类型支持更高的网络带宽。

如需查看支持这些更高网络带宽速度的配置或机器类型,请参阅网络带宽和 GPU

如需了解有关 Compute Engine 的常规网络带宽信息,请参阅网络带宽

概览

如需使用每个 GPU 虚拟机都可使用的较高网络带宽,请完成以下推荐执行的步骤:

  1. 使用支持 Google 虚拟 NIC (gVNIC) 的操作系统映像创建 GPU 虚拟机。对于 A3 虚拟机,建议您使用 Container-Optimized OS 映像。
  2. 可选:安装 Fast Socket。Fast Socket 通过减少多个 TCP 连接之间的争用来提高 100 Gbps 或更高速度的网络上的 NCCL 性能。部分 Deep Learning VM Image (DLVM) 预安装了 Fast Socket。

使用 Deep Learning VM Image

您可以使用 Deep Learning VM Image 项目中任何受 GPU 支持的映像来创建虚拟机。GPU 支持的所有 DLVM Image 映像都预安装了 GPU 驱动程序、机器学习软件和 gVNIC。如需查看 DLVM Image 映像列表,请参阅选择映像

如果您想使用 Fast Socket,您可以选择 DLVM 映像,如 tf-latest-gpu-debian-10tf-latest-gpu-ubuntu-1804

创建使用更高网络带宽的虚拟机

对于更高的网络带宽,建议您启用 Google 虚拟 NIC (gVNIC)。如需了解详情,请参阅使用 Google 虚拟 NIC

对于 A3 虚拟机,需要 gVNIC 1.4.0rc3 或更高版本。Container-Optimized OS 已提供此驱动程序版本。对于所有其他操作系统,您需要安装 gVNIC 1.4.0rc3 或更高版本

要创建挂接 GPU 和更高网络带宽的虚拟机,请完成以下操作:

  1. 请查看以下内容:

    • 对于挂接了 T4 或 V100 GPU 的 N1 GPU 虚拟机:查看 CPU、GPU 和内存配置的最大带宽
    • 对于 A3、A2、G2 加速器优化虚拟机:查看机器类型的最大带宽

    如需了解详情,请参阅可用带宽上限

  2. 创建 GPU 虚拟机。以下示例展示了如何创建挂接 V100 虚拟机的 A3、A2 和 N1。

    在这些示例中,虚拟机是使用 Google Cloud CLI 创建的。但是,您也可以使用 Google Cloud 控制台Compute Engine API 来创建这些虚拟机。如需详细了解如何创建 GPU 虚拟机,请参阅创建挂接 GPU 的虚拟机

    A2 (A100)

    例如,如需创建最大带宽为 100 Gbps、挂接了 8 个 A100 GPU 并使用 tf-latest-gpu DLVM Image 映像的虚拟机,请运行以下命令:

    gcloud compute instances create VM_NAME \
     --project=PROJECT_ID \
     --zone=ZONE \
     --machine-type=a2-highgpu-8g \
     --maintenance-policy=TERMINATE --restart-on-failure \
     --image-family=tf-latest-gpu \
     --image-project=deeplearning-platform-release \
     --boot-disk-size=200GB \
     --network-interface=nic-type=GVNIC \
     --metadata="install-nvidia-driver=True,proxy-mode=project_editors" \
     --scopes=https://www.googleapis.com/auth/cloud-platform
    

    请替换以下内容:

    • VM_NAME:您的虚拟机的名称
    • PROJECT_ID:您的项目 ID
    • ZONE:虚拟机的可用区。此可用区必须支持该 GPU 类型。如需详细了解可用区,请参阅 GPU 区域和可用区可用性

    A3 (H100)

    如需详细了解如何设置 A3 虚拟机以提高网络性能,请参阅使用 GPUDirect-TCPX 提高网络性能

    N1 (V100)

    例如,如需创建最大带宽为 100 Gbps、挂接了 8 个 V100 GPU 并使用 tf-latest-gpu DLVM Image 映像的虚拟机,请运行以下命令:

    gcloud compute instances create VM_NAME \
     --project PROJECT_ID \
     --custom-cpu 96 \
     --custom-memory 624 \
     --image-project=deeplearning-platform-release \
     --image-family=tf-latest-gpu \
     --accelerator type=nvidia-tesla-v100,count=8 \
     --maintenance-policy TERMINATE \
     --metadata="install-nvidia-driver=True"  \
     --boot-disk-size 200GB \
     --network-interface=nic-type=GVNIC \
     --zone=ZONE
    
  3. 如果您使用的不是 GPU 支持的 Deep Learning VM Image 或 Container-Optimized OS,请安装 GPU 驱动程序。如需了解详情,请参阅安装 GPU 驱动程序

  4. 可选。在虚拟机上,安装 Fast Socket

  5. 设置虚拟机后,您可以验证网络带宽

安装 Fast Socket

NVIDIA Collective Communications Library (NCCL) 用于深度学习框架,如 TensorFlow、PyTorch、用于多 GPU 和多节点训练的 Horovod。

Fast Socket 是一种适用于 NCCL 的 Google 专有网络传输。在 Compute Engine 上,Fast Socket 通过减少多个 TCP 连接之间的争用来提高 100 Gbps 网络上的 NCCL 性能。 如需详细了解如何使用 NCCL,请参阅 NCCL 用户指南

当前评估表明,根据消息大小,Fast Socket 可将全缩减吞吐量提高 30%–60%。

如需设置 Fast Socket 环境,您可以使用预安装了 Fast Socket 的 Deep Learning VM Image,也可以在 Linux 虚拟机上手动安装 Fast Socket。如需检查是否预安装了 Fast Socket,请参阅验证 Fast Socket 是否已启用

在 Linux 虚拟机上安装 Fast Socket 之前,您需要安装 NCCL。如需了解详细说明,请参阅 NVIDIA NCCL 文档

CentOS/RHEL

如需在 CentOS 或 RHEL 虚拟机上下载和安装 Fast Socket,请完成以下步骤:

  1. 添加软件包代码库并导入公钥。

    sudo tee /etc/yum.repos.d/google-fast-socket.repo << EOM
    [google-fast-socket]
    name=Fast Socket Transport for NCCL
    baseurl=https://packages.cloud.google.com/yum/repos/google-fast-socket
    enabled=1
    gpgcheck=0
    repo_gpgcheck=0
    gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
          https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
    EOM
    
  2. 安装 Fast Socket。

    sudo yum install google-fast-socket
    
  3. 验证 Fast Socket 已启用

SLES

如需在 SLES 虚拟机上下载和安装 Fast Socket,请完成以下步骤:

  1. 添加软件包代码库。

    sudo zypper addrepo https://packages.cloud.google.com/yum/repos/google-fast-socket google-fast-socket
    
  2. 添加代码库密钥。

    sudo rpm --import https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
    
  3. 安装 Fast Socket。

    sudo zypper install google-fast-socket
    
  4. 验证 Fast Socket 已启用

Debian/Ubuntu

如需在 Debian 或 Ubuntu 虚拟机上下载和安装 Fast Socket,请完成以下步骤:

  1. 添加软件包代码库。

    echo "deb https://packages.cloud.google.com/apt google-fast-socket main" | sudo tee /etc/apt/sources.list.d/google-fast-socket.list
    
  2. 添加代码库密钥。

    curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
    
  3. 安装 Fast Socket。

    sudo apt update && sudo apt install google-fast-socket
    
  4. 验证 Fast Socket 已启用

验证是否已启用 Fast Socket

在您的虚拟机上,完成以下步骤:

  1. 找到 NCCL 主目录。

    sudo ldconfig -p | grep nccl

    例如,在 DLVM 映像上,您将获得以下输出:

    libnccl.so.2 (libc6,x86-64) => /usr/local/nccl2/lib/libnccl.so.2
    libnccl.so (libc6,x86-64) => /usr/local/nccl2/lib/libnccl.so
    libnccl-net.so (libc6,x86-64) => /usr/local/nccl2/lib/libnccl-net.so

    这表明 NCCL 主目录为 /usr/local/nccl2

  2. 检查 NCCL 是否加载 Fast Socket 插件。要进行检查,您需要下载 NCCL 测试软件包。如需下载测试软件包,请运行以下命令:

    git clone https://github.com/NVIDIA/nccl-tests.git && \
    cd nccl-tests && make NCCL_HOME=NCCL_HOME_DIRECTORY

    NCCL_HOME_DIRECTORY 替换为 NCCL 主目录。

  3. nccl-tests 目录运行 all_reduce_perf 进程:

    NCCL_DEBUG=INFO build/all_reduce_perf

    如果启用了 Fast Socket,则输出日志中会显示 FastSocket plugin initialized 消息。

    # nThread 1 nGpus 1 minBytes 33554432 maxBytes 33554432 step: 1048576(bytes) warmup iters: 5 iters: 20 validation: 1
    #
    # Using devices
    #   Rank  0 Pid  63324 on fast-socket-gpu device  0 [0x00] Tesla V100-SXM2-16GB
    .....
    fast-socket-gpu:63324:63324 [0] NCCL INFO NET/FastSocket : Flow placement enabled.
    fast-socket-gpu:63324:63324 [0] NCCL INFO NET/FastSocket : queue skip: 0
    fast-socket-gpu:63324:63324 [0] NCCL INFO NET/FastSocket : Using [0]ens12:10.240.0.24
    fast-socket-gpu:63324:63324 [0] NCCL INFO NET/FastSocket plugin initialized
    ......
    

检查网络带宽

使用高带宽 GPU 时,您可以使用网络流量工具(如 iperf2)来测量网络带宽。

如需检查带宽速度,您需要至少两个已挂接 GPU 且同时支持您正在测试的带宽速度的虚拟机。

使用 iPerf 在基于 Debian 的系统上执行基准测试。

  1. 创建两个可以支持所需带宽速度的虚拟机。

  2. 两个虚拟机运行后,使用 SSH 连接到其中一个虚拟机。

    gcloud compute ssh VM_NAME \
        --project=PROJECT_ID
    

    请替换以下内容:

    • VM_NAME:第一个虚拟机的名称
    • PROJECT_ID:您的项目 ID
  3. 在第一个虚拟机上,完成以下步骤:

    1. 安装 iperf

      sudo apt-get update && sudo apt-get install iperf
      
    2. 获取此虚拟机的内部 IP 地址。记录下来以进行跟踪。

      ip a
      
    3. 启动 iPerf 服务器。

      iperf -s
      

      它会启动一个服务器来监听连接,以便执行基准测试。在测试期间,保持运行状态。

  4. 通过新的客户端终端,用 SSH 连接到第二个虚拟机。

    gcloud compute ssh VM_NAME \
       --project=PROJECT_ID
    

    请替换以下内容:

    • VM_NAME:第二个虚拟机的名称
    • PROJECT_ID:您的项目 ID
  5. 在第二个虚拟机上,完成以下步骤:

    1. 安装 iPerf。

      sudo apt-get update && sudo apt-get install iperf
      
    2. 运行 iperf 测试,并将第一个虚拟机的 IP 地址指定为目标。

      iperf -t 30 -c internal_ip_of_instance_1 -P 16
      

      这会执行 30 秒的测试,并生成类似于以下输出的结果。如果 iPerf 无法访问其他虚拟机,则可能需要调整虚拟机或 Google Cloud 控制台中的网络或防火墙设置

当您使用 100 Gbps 或 1000 Gbps(对于 A3)的最大可用带宽时,请注意以下注意事项:

  • 由于虚拟化堆栈的以太网、IP 和 TCP 等协议的标头开销,吞吐量(以 netperf 衡量)会在值大约为 90 Gbps 或 800 Gbps(对于 A3)时达到饱和。这通常称为 goodput

    TCP 的网络速度能够达到 100 或 1000 Gbps。其他协议(如 UDP)速度较慢。

  • 由于协议开销和网络拥塞度等因素,数据流的端到端性能可能略低。

  • 您需要使用多个 TCP 流来实现虚拟机实例之间的最大带宽。Google 建议使用 4 到 16 个数据流。如果使用 16 个数据流,您将频繁地达到最高吞吐量。根据您的应用和软件堆栈,您可能需要调整应用设置或代码来设置多个数据流。

后续步骤