本頁說明如何建立使用較高網路頻寬的 A2、G2 和 N1 執行個體。如要瞭解如何為其他加速器最佳化機器系列使用更高的網路頻寬,請參閱建立高頻寬 GPU 機器。
您可以提高網路頻寬 (100 Gbps 以上),提升在 GPU VM 上執行的分散式工作負載效能。在 Compute Engine 上,如果 A2、G2 和 N1 VM 附加 GPU,則可使用更高的網路頻寬,如下所示:
- 對於附加 T4 和 V100 GPU 的 N1 一般用途 VM,根據 GPU 和 vCPU 數量的組合,您可獲得最高 100 Gbps 的網路頻寬。
- 對於 A2 和 G2 加速器最佳化 VM,根據機型而定,網路頻寬最高可達 100 Gbps。
如要查看支援這些較高網路頻寬速率的設定或機器類型,請參閱「網路頻寬和 GPU」。
如要瞭解 Compute Engine 的一般網路頻寬資訊,請參閱「網路頻寬」一文。
總覽
如要使用每個 GPU VM 可用的較高網路頻寬,請完成下列建議步驟:
- 使用支援 Google 虛擬 NIC (gVNIC) 的 OS 映像檔建立 GPU VM。
- 選用:安裝 Fast Socket。 Fast Socket 可減少多個 TCP 連線之間的爭用,進而提升 100 Gbps 以上網路的 NCCL 效能。部分深度學習 VM 映像檔 (DLVM) 已預先安裝 Fast Socket。
使用深度學習 VM 映像檔
您可以從深度學習 VM 映像檔專案,使用任何支援 GPU 的映像檔建立 VM。所有支援 GPU 的 DLVM 映像檔都已預先安裝 GPU 驅動程式、機器學習軟體和 gVNIC。如需 DLVM 映像檔清單,請參閱「選擇映像檔」。
如要使用快速通訊端,可以選擇 DLVM 映像檔,例如:tf-latest-gpu-debian-10 或 tf-latest-gpu-ubuntu-1804。
建立使用較高網路頻寬的 VM
如要提高網路頻寬,建議啟用 Google 虛擬 NIC (gVNIC)。詳情請參閱「使用 Google Virtual NIC」。
如要建立附加 GPU 且網路頻寬較高的 VM,請完成下列步驟:
- 查看各個已連結 GPU 的機型可用的網路頻寬上限。
建立 GPU VM。下列範例說明如何建立 A2 和 N1,並連接 V100 VM。
在這些範例中,VM 是使用 Google Cloud CLI 建立。不過,您也可以使用 Cloud de Confiance console 或 Compute Engine API 建立這些 VM。如要進一步瞭解如何建立 GPU VM,請參閱「建立連接 GPU 的 VM」。
A2 (A100)
舉例來說,如要建立頻寬上限為 100 Gbps、附加八個 A100 GPU,並使用
tf-latest-gpuDLVM 映像檔的 VM,請執行下列指令: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:VM 名稱PROJECT_ID:專案 IDZONE:VM 的可用區。這個區域必須支援指定的 GPU 類型。如要進一步瞭解區域,請參閱「GPU 區域和可用區」。
N1 (V100)
舉例來說,如要建立頻寬上限為 100 Gbps、附加八個 V100 GPU,並使用
tf-latest-gpuDLVM 映像檔的 VM,請執行下列指令: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 的深度學習 VM 映像檔或 Container-Optimized OS,請安裝 GPU 驅動程式。詳情請參閱「安裝 GPU 驅動程式」。
選用:在 VM 上安裝 Fast Socket。
設定 VM 後,您可以驗證網路頻寬。
安裝 Fast Socket
TensorFlow、PyTorch、Horovod 等深度學習框架會使用 NVIDIA Collective Communications Library (NCCL),進行多 GPU 和多節點訓練。
Fast Socket 是 Google 專有的 NCCL 網路傳輸方式。在 Compute Engine 上,Fast Socket 可減少多個 TCP 連線之間的爭用,進而提升 100 Gbps 網路的 NCCL 效能。如要進一步瞭解如何使用 NCCL,請參閱 NCCL 使用手冊。
目前的評估結果顯示,Fast Socket 可將全縮減處理量提升 30% 至 60%,實際提升幅度取決於訊息大小。
如要設定 Fast Socket 環境,您可以使用預先安裝 Fast Socket 的深度學習 VM 映像檔,也可以在 Linux VM 上手動安裝 Fast Socket。如要確認是否已預先安裝 Fast Socket,請參閱「確認已啟用 Fast Socket」。
在 Linux VM 上安裝 Fast Socket 前,請先安裝 NCCL。 如需詳細操作說明,請參閱 NVIDIA NCCL 說明文件。
CentOS/RHEL
如要在 CentOS 或 RHEL VM 上下載及安裝 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 VM 上下載及安裝 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 VM 上下載及安裝 Fast Socket,請完成下列步驟:
將公開存放區 GPG 金鑰安裝至
/etc/apt/keyrings:sudo curl https://packages.cloud.google.com/apt/doc/apt-key.gpg -o /etc/apt/keyrings/google-fast-socket-keyring.gpg
新增套件存放區:
echo "deb [signed-by=/etc/apt/keyrings/google-fast-socket-keyring.gpg] https://packages.cloud.google.com/apt google-fast-socket main" | sudo tee /etc/apt/sources.list.d/google-fast-socket.list
安裝 Fast Socket。
sudo apt update && sudo apt install google-fast-socket
確認 Fast Socket 已啟用。
確認是否已啟用快速通訊端
在 VM 上完成下列步驟:
找出 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
如果啟用快速通訊端,輸出記錄中會顯示
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 ......
基準化 NCCL 效能
為分散式工作負載最佳化 GPU 效能時,基準化 NVIDIA Collective Communications Library (NCCL) 至關重要。NCCL 效能會以匯流排頻寬 (busbw) 衡量,通常使用 all_reduce_perf 測試。
A3 High 和 A3 Mega VM 的預期 NCCL 效能
下表列出在雙節點測試中,使用 1 GB 至 8 GB 訊息大小的 A3 High 和 A3 Mega VM,預期的 NCCL 匯流排頻寬指標。
| 機型 | 節點數量 | 預期 all_reduce_perf 匯流排頻寬 (GBps) |
|---|---|---|
| A3 High | 2 | > 80 GBps |
| A3+ Mega | 2 | > 160 GBps |
在集體作業中新增更多 VM 時,匯流排頻寬通常會減少。舉例來說,4 節點的 A3+ 叢集可能達到 130 到 140 GBps。
執行 NCCL all-reduce 效能測試
使用 mpirun 在多個節點上執行 all_reduce_perf 基準測試。
完成下列必要條件:
- 在每個節點上,下載並編譯
nccl-tests。詳情請參閱「確認是否已啟用快速 Socket」。 - 建立
hostfile,列出節點並為每個節點指定 8 個 GPU。
主機檔案是文字檔,可告知
mpirun要使用哪些節點,以及要在每個節點上執行多少程序。如要建立節點檔案,請在工作目錄中建立文字檔,並在每一行列出一個節點,指定主機名稱或 IP 位址,然後加上slots=8。舉例來說,如要為節點node-1和node-2建立名為my-hostfile的主機檔案,請在my-hostfile中新增下列指令行:node-1 slots=8 node-2 slots=8
- 在每個節點上,下載並編譯
執行測試。下列指令會在兩個節點上執行
all-reduce-perf測試,總共 16 個程序。mpirun -x LD_LIBRARY_PATH --hostfile HOSTFILE_NAME \ -n 16 ./build/all_reduce_perf -b 1G -e 8G -f 2 -g 8
將
HOSTFILE_NAME替換為您在上一步建立的hostfile名稱。例如:my-hostfile。-n 16:MPI 處理序總數,計算方式為節點數乘以每個節點的 GPU 數量。-b 1G -e 8G:郵件大小範圍。-f 2:每個步驟的訊息大小乘數。-g 8:每個程序使用的 GPU 數量。
檢查網路頻寬
本節說明如何檢查 A3 Mega、A3 High、A3 Edge、A2、G2 和 N1 執行個體的網路頻寬。使用高頻寬 GPU 時,您可以運用 iperf2 等網路流量工具測量網路頻寬。
如要檢查頻寬速度,您需要至少兩個已附加 GPU 的 VM,且這兩個 VM 都能支援您測試的頻寬速度。
在 Debian 系統上使用 iPerf 執行基準測試。
建立兩個可支援所需頻寬速度的 VM。
兩個 VM 執行後,請使用 SSH 連線至其中一個 VM。
gcloud compute ssh VM_NAME \ --project=PROJECT_ID更改下列內容:
VM_NAME:第一個 VM 的名稱PROJECT_ID:專案 ID
在第一個 VM 上完成下列步驟:
安裝「
iperf」。sudo apt-get update && sudo apt-get install iperf
取得這個 VM 的內部 IP 位址。請寫下並追蹤這項資訊。
ip a
啟動 iPerf 伺服器。
iperf -s
這會啟動伺服器,監聽連線以執行基準測試。在測試期間,請讓這項服務持續執行。
從新的用戶端終端機,使用 SSH 連線至第二個 VM。
gcloud compute ssh VM_NAME \ --project=PROJECT_ID
更改下列內容:
VM_NAME:第二個 VM 的名稱PROJECT_ID:專案 ID
在第二部 VM 上,完成下列步驟:
安裝 iPerf。
sudo apt-get update && sudo apt-get install iperf
執行 iperf 測試,並將第一個 VM 的 IP 位址指定為目標。
iperf -t 30 -c internal_ip_of_instance_1 -P 16
這會執行 30 秒的測試,並產生類似下列輸出內容的結果。如果 iPerf 無法連線至其他 VM,您可能需要調整 VM 上的網路或防火牆設定,或是在 Cloud de Confiance 控制台中調整。
使用 100 Gbps 或 1000 Gbps 的最高可用頻寬 (A3 Mega、A3 High 或 A3 Edge) 時,請注意下列事項:
由於乙太網路、IP 和 TCP 等網路通訊協定的封包標頭負擔位於虛擬化堆疊上,因此以
netperf測量的總處理量會飽和在 90 Gbps 或 800 Gbps (A3 Mega、A3 High 或 A3 Edge) 左右。一般稱為「有效輸送量」。TCP 可達到 100 或 1000 Gbps 的網路速度。其他通訊協定 (例如 UDP) 的速度較慢。
由於通訊協定負荷和網路壅塞等因素,資料串流的端對端效能可能會略有降低。
您必須使用多個 TCP 串流,才能在 VM 執行個體之間達到最大頻寬。Google 建議使用 4 到 16 個串流。16 個流程通常可達到最大輸送量。視應用程式和軟體堆疊而定,您可能需要調整應用程式或程式碼的設定,才能設定多個串流。
後續步驟
- 如要監控 GPU 效能,請參閱「監控 GPU 效能」。
- 如要處理 GPU 主機維護作業,請參閱「處理 GPU 主機維護事件」。