本頁面說明如何建立使用較高網路頻寬的 A2、G2 和 N1 執行個體。如要瞭解如何為其他加速器最佳化機器系列使用更高的網路頻寬,請參閱「建立高頻寬 GPU 機器」。
您可以使用 100 Gbps 以上的高頻寬網路,改善在 GPU VM 上執行的分散式工作負載效能。在 Compute Engine 上,如果 A2、G2 和 N1 VM 已連接 GPU,則可使用更高的網路頻寬,如下所示:
- 如果 N1 一般用途 VM 已連接 T4 和 V100 GPU,您可以根據 GPU 和 vCPU 數量組合,取得最高 100 Gbps 的網路頻寬。
- 對於 A2 和 G2 加速器最佳化 VM,您可以根據機器類型獲得最高 100 Gbps 的網路頻寬。
如要查看支援這些較高網路頻寬率的設定或機器類型,請參閱「網路頻寬和 GPU」。
如要瞭解 Compute Engine 的一般網路頻寬資訊,請參閱「網路頻寬」一文。
總覽
如要使用各 GPU VM 可用的較高網路頻寬,請完成下列建議步驟:
- 使用支援 Google Virtual NIC (gVNIC) 的 OS 映像檔,建立 GPU VM。
- 選用步驟:安裝 Fast Socket。Fast Socket 會減少多個 TCP 連線之間的競爭,進而改善 100 Gbps 以上網路的 NCCL 效能。部分深度學習 VM 映像檔 (DLVM) 已預先安裝 Fast Socket。
使用深度學習 VM 映像檔
您可以使用深度學習 VM 映像檔專案中的任何 GPU 支援映像檔建立 VM。所有 GPU 支援的 DLVM 映像檔都已預先安裝 GPU 驅動程式、ML 軟體和 gVNIC。如需 DLVM 映像檔清單,請參閱「選擇映像檔」。
如果您想使用 Fast Socket,可以選擇 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。
在這些範例中,我們會使用 Google Cloud CLI 建立 VM。不過,您也可以使用 Google Cloud 控制台或 Compute Engine API 建立這些 VM。如要進一步瞭解如何建立 GPU VM,請參閱「建立連結 GPU 的 VM」。
A2 (A100)
舉例來說,如要建立最高頻寬為 100 Gbps、已連接八個 A100 GPU,並使用
tf-latest-gpu
DLVM 映像檔的 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-gpu
DLVM 映像檔的 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。
設定完成後,您可以驗證網路頻寬。
安裝 Fast Socket
NVIDIA 集體通訊程式庫 (NCCL) 可用於 TensorFlow、PyTorch、Horovod 等深度學習架構,用於多 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,請完成下列步驟:
新增套件存放區。
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
在 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
如果啟用 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 ......
檢查網路頻寬
本節說明如何檢查 A3 Mega、A3 High、A3 Edge、A2、G2 和 N1 執行個體的網路頻寬。使用高頻寬 GPU 時,您可以使用網路流量工具 (例如 iperf2) 來測量網路頻寬。
如要檢查頻寬速度,您至少需要兩個已連結 GPU 的 VM,且兩者都支援您要測試的頻寬速度。
使用 iPerf 在以 Debian 為基礎的系統上執行基準測試。
建立兩個可支援所需頻寬速度的 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 或 Google Cloud 主控台上的網路或防火牆設定。
使用 100 Gbps 或 1000 Gbps (A3 Mega、A3 High 或 A3 Edge) 的最高可用頻寬時,請注意下列事項:
由於虛擬化堆疊中乙太網路、IP 和 TCP 等網路通訊協定的封包標頭額外負擔,
netperf
所測得的總處理量會飽和在約 90 Gbps 或 800 Gbps (A3 Mega、A3 High 或 A3 Edge)。通常稱為「goodput」。TCP 可達到 100 或 1000 Gbps 的網路速度。其他通訊協定 (例如 UDP) 的速度較慢。
由於通訊協定額外負擔和網路壅塞等因素,資料串流的端對端效能可能會稍微降低。
您必須使用多個 TCP 串流,才能在 VM 執行個體之間達到最高頻寬。Google 建議的串流數量為 4 到 16 個。在 16 個資料流中,您經常會將吞吐量提高到最高。視應用程式和軟體堆疊而定,您可能需要調整應用程式或程式碼的設定,才能設定多個串流。
後續步驟
- 如要監控 GPU 效能,請參閱「監控 GPU 效能」一文。
- 如要處理 GPU 主機維護作業,請參閱「處理 GPU 主機維護事件」。