使用較高的網路頻寬


本頁說明如何建立使用較高網路頻寬的 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 適用的較高網路頻寬,請完成下列建議步驟:

  1. 使用支援 Google 虛擬 NIC (gVNIC) 的 OS 映像檔建立 GPU VM
  2. 選用:安裝 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-10tf-latest-gpu-ubuntu-1804

建立使用較高網路頻寬的 VM

如要提高網路頻寬,建議啟用 Google 虛擬 NIC (gVNIC)。詳情請參閱「使用 Google Virtual NIC」。

如要建立附加 GPU 且網路頻寬較高的 VM,請完成下列步驟:

  1. 查看各機器類型可用的最大網路頻寬,這些機器類型已附加 GPU。
  2. 建立 GPU VM。下列範例說明如何建立 A2 和 N1,並附加 V100 VM。

    在這些範例中,VM 是使用 Google Cloud CLI 建立。不過,您也可以使用 Google Cloud consoleCompute 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:您的專案 ID
    • ZONE: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
    
  3. 如果您未使用支援 GPU 的深度學習 VM 映像檔或 Container-Optimized OS,請安裝 GPU 驅動程式。詳情請參閱「安裝 GPU 驅動程式」。

  4. 選用:在 VM 上安裝 Fast Socket

  5. 設定 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,請完成下列步驟:

  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 VM 上下載及安裝 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 VM 上下載及安裝 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 已啟用

確認是否已啟用快速 Socket

在 VM 上完成下列步驟:

  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

    如果啟用快速 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,且兩者都支援您測試的頻寬速度。

在 Debian 系統上使用 iPerf 執行基準測試。

  1. 建立兩個可支援所需頻寬速度的 VM。

  2. 兩個 VM 執行個體都啟動後,請使用 SSH 連線至其中一個 VM。

    gcloud compute ssh VM_NAME \
        --project=PROJECT_ID
    

    更改下列內容:

    • VM_NAME:第一個 VM 的名稱
    • PROJECT_ID:您的專案 ID
  3. 在第一個 VM 上完成下列步驟:

    1. 安裝「iperf」。

      sudo apt-get update && sudo apt-get install iperf
      
    2. 取得這個 VM 的內部 IP 位址。請寫下這些資訊,以便追蹤。

      ip a
      
    3. 啟動 iPerf 伺服器。

      iperf -s
      

      這會啟動伺服器,監聽連線以執行基準測試。在測試期間,請讓這項服務持續執行。

  4. 從新的用戶端終端機,使用 SSH 連線至第二部 VM。

    gcloud compute ssh VM_NAME \
       --project=PROJECT_ID
    

    更改下列內容:

    • VM_NAME:第二個 VM 的名稱
    • PROJECT_ID:您的專案 ID
  5. 在第二部 VM 上,完成下列步驟:

    1. 安裝 iPerf。

      sudo apt-get update && sudo apt-get install iperf
      
    2. 執行 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)。一般稱為「有效輸送量」

    TCP 可達到 100 或 1000 Gbps 的網路速度。其他通訊協定 (例如 UDP) 的速度較慢。

  • 由於通訊協定負荷和網路壅塞等因素,資料串流的端對端效能可能會略有降低。

  • 您必須使用多個 TCP 串流,才能在 VM 執行個體之間達到最大頻寬。Google 建議使用 4 到 16 個串流。16 個流程通常可將總處理量提升至最高。視應用程式和軟體堆疊而定,您可能需要調整應用程式或程式碼的設定,才能設定多個串流。

後續步驟