Menggunakan bandwidth jaringan yang lebih tinggi


Anda dapat menggunakan bandwidth jaringan yang lebih tinggi, 100 Gbps atau lebih, untuk meningkatkan performa beban kerja terdistribusi yang berjalan di VM GPU.

Bandwidth jaringan yang lebih tinggi didukung pada konfigurasi VM tertentu dari VM tujuan umum N1 yang telah memasang GPU NVIDIA T4 atau V100, dan pada jenis mesin yang dioptimalkan akselerator tertentu.

Untuk meninjau konfigurasi atau jenis mesin yang mendukung kecepatan bandwidth jaringan yang lebih tinggi ini, lihat Bandwidth jaringan dan GPU.

Untuk mengetahui informasi umum bandwidth jaringan pada Compute Engine, lihat Bandwidth jaringan.

Ringkasan

Untuk menggunakan bandwidth jaringan yang lebih tinggi yang tersedia di setiap VM GPU, selesaikan langkah-langkah yang direkomendasikan berikut:

  1. Buat VM GPU Anda menggunakan OS image yang mendukung NIC Virtual Google (gVNIC). Untuk VM A3, sebaiknya gunakan Container-Optimized OS image.
  2. Opsional: Instal Soket Cepat. Fast Socket meningkatkan performa NCCL pada jaringan 100 Gbps atau lebih tinggi dengan mengurangi pertentangan antara beberapa koneksi TCP. Beberapa Deep Learning VM Image (DLVM) memiliki Fast Socket terinstal sebelumnya.

Menggunakan Deep Learning VM Image

Anda dapat membuat VM menggunakan image yang didukung GPU dari project Deep Learning VM Image. Semua gambar DLVM yang didukung GPU sudah disertai driver GPU, software ML, dan gVNIC. Untuk daftar gambar DLVM, lihat Memilih image.

Jika ingin menggunakan Fast Socket, Anda dapat memilih image DLVM seperti: tf-latest-gpu-debian-10 atau tf-latest-gpu-ubuntu-1804.

Buat VM yang menggunakan bandwidth jaringan yang lebih tinggi

Untuk bandwidth jaringan yang lebih tinggi, sebaiknya Anda mengaktifkan Google Virtual NIC (gVNIC). Untuk informasi selengkapnya, lihat Menggunakan NIC Virtual Google.

Untuk VM A3, diperlukan gVNIC versi 1.4.0rc3 atau yang lebih baru. Versi driver ini tersedia di Container-Optimized OS. Untuk semua sistem operasi lainnya, Anda harus menginstal gVNIC versi 1.4.0rc3 atau yang lebih baru.

Untuk membuat VM yang telah memasang GPU dan bandwidth jaringan yang lebih tinggi, lakukan langkah-langkah berikut:

  1. Tinjau hal berikut:

    • Untuk VM GPU N1 dengan GPU T4 atau V100 terpasang: tinjau bandwidth maksimum untuk konfigurasi CPU, GPU, dan memori Anda
    • Untuk VM A3, A2, G2 yang dioptimalkan untuk akselerator: tinjau bandwidth maksimum untuk jenis mesin Anda

    Untuk mengetahui informasi selengkapnya, lihat bandwidth maksimum yang tersedia.

  2. Buat VM GPU Anda. Contoh berikut menunjukkan cara membuat A3, A2, dan N1 dengan VM V100 yang terpasang.

    Dalam contoh ini, VM dibuat menggunakan Google Cloud CLI. Namun, Anda juga dapat menggunakan Google Cloud Console atau Compute Engine API untuk membuat VM ini. Untuk informasi selengkapnya tentang cara membuat VM GPU, lihat Membuat VM dengan GPU terpasang.

    A2 (A100)

    Misalnya, untuk membuat VM yang memiliki bandwidth maksimum 100 Gbps, memiliki delapan GPU A100 yang terpasang, dan menggunakan image DLVM tf-latest-gpu, jalankan perintah berikut:

    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
    

    Ganti kode berikut:

    • VM_NAME: nama VM Anda
    • PROJECT_ID: Project ID Anda.
    • ZONE: zona untuk VM. Zona ini harus mendukung jenis GPU yang ditentukan. Untuk informasi selengkapnya tentang zona, lihat Ketersediaan region dan zona GPU.

    A3 (H100)

    Untuk petunjuk mendetail tentang cara menyiapkan VM A3 yang telah meningkatkan performa jaringan, lihat Meningkatkan performa jaringan dengan GPUDirect-TCPX.

    N1 (V100)

    Misalnya, untuk membuat VM yang memiliki bandwidth maksimum 100 Gbps, memiliki delapan GPU V100 yang terpasang, dan menggunakan image DLVM tf-latest-gpu, jalankan perintah berikut:

    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. Jika Anda tidak menggunakan Deep Learning VM Image yang didukung GPU atau Container-Optimized OS, instal driver GPU. Untuk informasi selengkapnya, lihat Menginstal driver GPU.

  4. Opsional. Di VM, Instal Fast Socket.

  5. Setelah menyiapkan VM, Anda dapat memverifikasi bandwidth jaringan.

Pasang Soket Cepat

NVIDIA Collective Communications Library (NCCL) digunakan oleh framework deep learning seperti TensorFlow, PyTorch, Horovod untuk pelatihan multi-GPU dan multi-node.

Fast Socket adalah transpor jaringan eksklusif Google untuk NCCL. Di Compute Engine, Fast Socket meningkatkan performa NCCL pada jaringan 100 Gbps dengan mengurangi pertentangan antara beberapa koneksi TCP. Untuk informasi selengkapnya tentang menggunakan NCCL, lihat Panduan pengguna NCCL.

Evaluasi saat ini menunjukkan bahwa Fast Socket meningkatkan semua pengurangan throughput sebesar 30%–60%, bergantung pada ukuran pesan.

Untuk menyiapkan lingkungan Fast Socket, Anda dapat menggunakan Deep Learning VM Image yang memiliki Fast Socket bawaan, atau Anda dapat menginstal Fast Socket secara manual di VM Linux. Untuk memeriksa apakah Fast Socket sudah terinstal sebelumnya, lihat Memverifikasi bahwa Fast Socket diaktifkan.

Sebelum menginstal Fast Socket di VM Linux, Anda perlu menginstal NCCL. Untuk mengetahui petunjuk mendetail, lihat dokumentasi NVIDIA NCCL.

CentOS/RHEL

Untuk mendownload dan menginstal Fast Socket di VM CentOS atau RHEL, jalankan langkah-langkah berikut:

  1. Tambahkan repository paket dan impor kunci publik.

    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. Instal Fast Socket.

    sudo yum install google-fast-socket
    
  3. Pastikan Fast Socket telah diaktifkan.

SLES

Untuk mendownload dan menginstal Fast Socket di VM SLES, jalankan langkah-langkah berikut:

  1. Tambahkan repository paket.

    sudo zypper addrepo https://packages.cloud.google.com/yum/repos/google-fast-socket google-fast-socket
    
  2. Tambahkan kunci repositori.

    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. Instal Fast Socket.

    sudo zypper install google-fast-socket
    
  4. Pastikan Fast Socket telah diaktifkan.

Debian/Ubuntu

Untuk mendownload dan menginstal Fast Socket di VM Debian atau Ubuntu, jalankan langkah-langkah berikut:

  1. Tambahkan repository paket.

    echo "deb https://packages.cloud.google.com/apt google-fast-socket main" | sudo tee /etc/apt/sources.list.d/google-fast-socket.list
    
  2. Tambahkan kunci repositori.

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

    sudo apt update && sudo apt install google-fast-socket
    
  4. Pastikan Fast Socket telah diaktifkan.

Memverifikasi bahwa Fast Socket telah diaktifkan

Di VM Anda, jalankan langkah-langkah berikut:

  1. Temukan direktori beranda NCCL.

    sudo ldconfig -p | grep nccl

    Misalnya, di image DLVM, Anda mendapatkan output berikut:

    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

    Ini menunjukkan bahwa direktori beranda NCCL adalah /usr/local/nccl2.

  2. Pastikan NCCL memuat plugin Fast Socket. Untuk memeriksanya, Anda perlu mendownload paket pengujian NCCL. Untuk mendownload paket pengujian, jalankan perintah berikut:

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

    Ganti NCCL_HOME_DIRECTORY dengan direktori beranda NCCL.

  3. Dari direktori nccl-tests, jalankan proses all_reduce_perf:

    NCCL_DEBUG=INFO build/all_reduce_perf

    Jika Fast Socket diaktifkan, pesan FastSocket plugin initialized akan ditampilkan di log output.

    # 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
    ......
    

Memeriksa bandwidth jaringan

Saat menangani GPU dengan bandwidth tinggi, Anda dapat menggunakan alat traffic jaringan, seperti iperf2, untuk mengukur bandwidth jaringan.

Untuk memeriksa kecepatan bandwidth, Anda memerlukan setidaknya dua VM yang telah dipasangi GPU dan keduanya dapat mendukung kecepatan bandwidth yang sedang Anda uji.

Gunakan iPerf untuk menjalankan tolok ukur pada sistem berbasis Debian.

  1. Buat dua VM yang dapat mendukung kecepatan bandwidth yang diperlukan.

  2. Setelah kedua VM berjalan, gunakan SSH untuk terhubung dengan salah satu VM.

    gcloud compute ssh VM_NAME \
        --project=PROJECT_ID
    

    Ganti kode berikut:

    • VM_NAME: nama VM pertama
    • PROJECT_ID: Project ID Anda.
  3. Di VM pertama, jalankan langkah-langkah berikut:

    1. Instal iperf.

      sudo apt-get update && sudo apt-get install iperf
      
    2. Dapatkan alamat IP internal untuk VM ini. Lacak dengan menuliskannya.

      ip a
      
    3. Mulai server iPerf.

      iperf -s
      

      Tindakan ini akan memulai server yang memproses koneksi untuk melakukan tolok ukur. Biarkan ini tetap berjalan selama durasi pengujian.

  4. Dari terminal klien baru, hubungkan ke VM kedua menggunakan SSH.

    gcloud compute ssh VM_NAME \
       --project=PROJECT_ID
    

    Ganti kode berikut:

    • VM_NAME: nama VM kedua
    • PROJECT_ID: Project ID Anda.
  5. Di VM kedua, jalankan langkah-langkah berikut:

    1. Instal iPerf.

      sudo apt-get update && sudo apt-get install iperf
      
    2. Jalankan pengujian iperf, lalu tentukan alamat IP VM pertama sebagai target.

      iperf -t 30 -c internal_ip_of_instance_1 -P 16
      

      Tindakan ini akan menjalankan pengujian selama 30 detik dan memberikan hasil yang menyerupai output berikut. Jika iPerf tidak dapat menjangkau VM lain, Anda, mungkin perlu menyesuaikan jaringan atau setelan firewall di VM, atau mungkin di konsolK Google Cloud.

Jika Anda menggunakan bandwidth maksimum yang tersedia, yaitu 100 Gbps atau 1000 Gbps (A3), pertimbangkan pertimbangan berikut:

  • Karena overhead header untuk protokol seperti Ethernet, IP, dan TCP pada stack virtualisasi, throughput, yang diukur berdasarkan netperf, akan tersaturasi pada sekitar 90 Gbps atau 800 Gbps (A3). Secara umum dikenal sebagai goodput.

    TCP dapat mencapai kecepatan jaringan 100 atau 1000 Gbps. Protokol lain, seperti UDP, lebih lambat.

  • Karena faktor-faktor seperti overhead protokol dan kemacetan jaringan, performa aliran data secara menyeluruh mungkin sedikit lebih rendah.

  • Anda harus menggunakan beberapa aliran TCP untuk mencapai bandwidth maksimum antar-instance VM. Google merekomendasikan 4 hingga 16 streaming. Pada 16 alur, Anda akan sering memaksimalkan throughput. Bergantung pada stack aplikasi dan software, Anda mungkin perlu menyesuaikan setelan aplikasi atau kode Anda untuk menyiapkan beberapa aliran data.

Apa langkah selanjutnya?