您可以使用更高的网络带宽(100 Gbps 或更高),以提高在 GPU 虚拟机上运行的分布式工作负载的性能。
在 Compute Engine 上挂接 GPU 的虚拟机可用的网络带宽更高,如下所示:
- 对于挂接了 T4 和 V100 GPU 的 N1 通用虚拟机,您可以获得高达 100 Gbps 的最大网络带宽,具体取决于 GPU 和 vCPU 的数量组合。
- 对于 A2 和 G2 加速器优化虚拟机,您可以获得高达 100 Gbps 的最大网络带宽,具体取决于机器类型。
- 对于 A3 加速器优化型虚拟机,您可以获得高达 1,800 Gbps 的网络带宽上限
如需查看支持这些更高网络带宽速度的配置或机器类型,请参阅网络带宽和 GPU。
如需了解有关 Compute Engine 的常规网络带宽信息,请参阅网络带宽。
概览
如需使用每个 GPU 虚拟机都可使用的较高网络带宽,请完成以下推荐执行的步骤:
- 使用支持 Google 虚拟 NIC (gVNIC) 的操作系统映像创建 GPU 虚拟机。对于 A3 虚拟机,建议您使用 Container-Optimized OS 映像。
- 可选:安装 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-10
或 tf-latest-gpu-ubuntu-1804
。
创建使用更高网络带宽的虚拟机
对于更高的网络带宽,建议您启用 Google 虚拟 NIC (gVNIC)。如需了解详情,请参阅使用 Google 虚拟 NIC。
对于 A3 虚拟机,需要 gVNIC 1.4.0rc3 或更高版本。Container-Optimized OS 已提供此驱动程序版本。对于所有其他操作系统,您需要安装 gVNIC 1.4.0rc3 或更高版本。
要创建挂接 GPU 和更高网络带宽的虚拟机,请完成以下操作:
- 查看挂接 GPU 的每种机器类型可用的网络带宽上限。
创建 GPU 虚拟机。以下示例展示了如何创建挂接 V100 虚拟机的 A3、A2 和 N1。
在这些示例中,虚拟机是使用 Google Cloud CLI 创建的。但是,您也可以使用 Google Cloud 控制台或 Compute Engine API 来创建这些虚拟机。如需详细了解如何创建 GPU 虚拟机,请参阅创建挂接 GPU 的虚拟机。
A3 (H100)
如需详细了解如何设置 A3 虚拟机以最大限度地提高网络性能,请参阅以下内容:
- 对于
a3-megagpu-8g
虚拟机,请参阅部署 A3 Mega Slurm 集群以用作机器学习训练用途。 - 对于
a3-highgpu-8g
虚拟机,请参阅使用 GPUDirect-TCPX 最大限度地提高 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
:您的项目 IDZONE
:虚拟机的可用区。此可用区必须支持该 GPU 类型。如需详细了解可用区,请参阅 GPU 区域和可用区可用性。
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
- 对于
如果您使用的不是 GPU 支持的 Deep Learning VM Image 或 Container-Optimized OS,请安装 GPU 驱动程序。如需了解详情,请参阅安装 GPU 驱动程序。
可选:在虚拟机上,安装 Fast Socket。
设置虚拟机后,您可以验证网络带宽。
安装 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,请完成以下步骤:
添加软件包代码库并导入公钥。
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
安装 Fast Socket。
sudo yum install google-fast-socket
验证 Fast Socket 已启用。
SLES
如需在 SLES 虚拟机上下载和安装 Fast Socket,请完成以下步骤:
添加软件包代码库。
sudo zypper addrepo https://packages.cloud.google.com/yum/repos/google-fast-socket google-fast-socket
添加代码库密钥。
sudo rpm --import https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
安装 Fast Socket。
sudo zypper install google-fast-socket
验证 Fast Socket 已启用。
Debian/Ubuntu
如需在 Debian 或 Ubuntu 虚拟机上下载和安装 Fast Socket,请完成以下步骤:
添加软件包代码库。
echo "deb https://packages.cloud.google.com/apt google-fast-socket main" | sudo tee /etc/apt/sources.list.d/google-fast-socket.list
添加代码库密钥。
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
安装 Fast Socket。
sudo apt update && sudo apt install google-fast-socket
验证 Fast Socket 已启用。
验证是否已启用 Fast Socket
在您的虚拟机上,完成以下步骤:
找到 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
。检查 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 主目录。从
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 的系统上执行基准测试。
创建两个可以支持所需带宽速度的虚拟机。
两个虚拟机运行后,使用 SSH 连接到其中一个虚拟机。
gcloud compute ssh VM_NAME \ --project=PROJECT_ID
请替换以下内容:
VM_NAME
:第一个虚拟机的名称PROJECT_ID
:您的项目 ID
在第一个虚拟机上,完成以下步骤:
安装
iperf
。sudo apt-get update && sudo apt-get install iperf
获取此虚拟机的内部 IP 地址。记录下来以进行跟踪。
ip a
启动 iPerf 服务器。
iperf -s
它会启动一个服务器来监听连接,以便执行基准测试。在测试期间,保持运行状态。
通过新的客户端终端,用 SSH 连接到第二个虚拟机。
gcloud compute ssh VM_NAME \ --project=PROJECT_ID
请替换以下内容:
VM_NAME
:第二个虚拟机的名称PROJECT_ID
:您的项目 ID
在第二个虚拟机上,完成以下步骤:
安装 iPerf。
sudo apt-get update && sudo apt-get install iperf
运行 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 个数据流,您将频繁地达到最高吞吐量。根据您的应用和软件堆栈,您可能需要调整应用设置或代码来设置多个数据流。
后续步骤
- 如需监控 GPU 性能,请参阅监控 GPU 性能。
- 如需处理 GPU 主机维护,请参阅处理 GPU 主机维护事件。