Kelompok mesin yang dioptimalkan untuk akselerator dirancang oleh Google Cloud untuk memberikan performa dan efisiensi yang dibutuhkan untuk workload yang dipercepat GPU seperti kecerdasan buatan (AI), machine learning (ML), dan komputasi berperforma tinggi (HPC).
Seri mesin A3 yang dioptimalkan untuk akselerator memiliki 208 vCPU, dan memori hingga 1.872 GB. Setiap jenis mesin A3 memiliki delapan GPU NVIDIA H100 yang terpasang, yang menawarkan memori GPU 80 GB per GPU. VM ini dapat mendapatkan bandwidth jaringan hingga 1.000 Gbps, yang membuatnya ideal untuk model bahasa berbasis transformer, database, dan komputasi berperforma tinggi (HPC) yang besar.
Saat menggunakan VM a3-highgpu-8g
atau a3-edgegpu-8g
, Anda dapat menggunakan
GPUDirect-TCPX untuk mencapai latensi serendah mungkin antara aplikasi
dan jaringan. GPUDirect-TCPX adalah stack jaringan akses memori langsung (RDMA) kustom yang meningkatkan performa jaringan VM A3 dengan memungkinkan payload paket data ditransfer langsung dari memori GPU ke antarmuka jaringan tanpa harus melalui CPU dan memori sistem.
VM A3 dapat menggunakan GPUDirect-TCPX yang dikombinasikan dengan Google Virtual NIC (gVNIC)
untuk memberikan throughput tertinggi di antara VM dalam cluster jika dibandingkan dengan
jenis mesin yang dioptimalkan akselerator A2 atau G2.
Dokumen ini menunjukkan cara membuat VM a3-highgpu-8g
atau a3-edgegpu-8g
yang berjalan di sistem operasi Container-Optimized OS. Artikel ini juga
menunjukkan cara mengaktifkan GPUDirect-TCPX di VM serta menyiapkan dan menguji
performa jaringan GPU yang ditingkatkan.
Ringkasan
Untuk menguji performa jaringan dengan GPUDirect-TCPX, selesaikan langkah-langkah berikut:
- Siapkan satu atau beberapa jaringan Virtual Private Cloud (VPC) dan tetapkan
setelan MTU (juga dikenal sebagai frame jumbo) ke
8244
. - Buat VM GPU menggunakan image Container-Optimized OS
cos-105-lts
atau yang lebih baru. - Di setiap VM, instal driver GPU.
- Di setiap VM, berikan kartu antarmuka jaringan (NIC) akses ke GPU.
- Jalankan pengujian NCCL.
Menyiapkan jaringan MTU frame jumbo
VM a3-highgpu-8g
dan a3-edgegpu-8g
memiliki lima NIC fisik. Untuk mendapatkan performa terbaik untuk NIC fisik, Anda perlu membuat lima jaringan Virtual Private Cloud dan menetapkan MTU ke 8244
.
Membuat jaringan pengelolaan, subnet, dan aturan firewall
Selesaikan langkah-langkah berikut untuk menyiapkan jaringan pengelolaan:
Buat jaringan pengelolaan menggunakan perintah
networks create
:gcloud compute networks create NETWORK_NAME_PREFIX-mgmt-net \ --project=PROJECT_ID \ --subnet-mode=custom \ --mtu=8244
Buat subnet pengelolaan menggunakan perintah
networks subnets create
:gcloud compute networks subnets create NETWORK_NAME_PREFIX-mgmt-sub \ --project=PROJECT_ID \ --network=NETWORK_NAME_PREFIX-mgmt-net \ --region=REGION \ --range=192.168.0.0/24
Buat aturan firewall menggunakan perintah
firewall-rules create
.Buat aturan firewall untuk jaringan pengelolaan.
gcloud compute firewall-rules create NETWORK_NAME_PREFIX-mgmt-internal \ --project=PROJECT_ID \ --network=NETWORK_NAME_PREFIX-mgmt-net \ --action=ALLOW \ --rules=tcp:0-65535,udp:0-65535,icmp \ --source-ranges=192.168.0.0/16
Buat aturan firewall
tcp:22
untuk membatasi alamat IP sumber yang dapat terhubung ke VM Anda menggunakan SSH.gcloud compute firewall-rules create NETWORK_NAME_PREFIX-mgmt-external-ssh \ --project=PROJECT_ID \ --network=NETWORK_NAME_PREFIX-mgmt-net \ --action=ALLOW \ --rules=tcp:22 \ --source-ranges=SSH_SOURCE_IP_RANGE
Buat aturan firewall
icmp
yang dapat digunakan untuk memeriksa masalah transmisi data di jaringan.gcloud compute firewall-rules create NETWORK_NAME_PREFIX-mgmt-external-ping \ --project=PROJECT_ID \ --network=NETWORK_NAME_PREFIX-mgmt-net \ --action=ALLOW \ --rules=icmp \ --source-ranges=0.0.0.0/0
Ganti kode berikut:
NETWORK_NAME_PREFIX
: awalan nama yang akan digunakan untuk jaringan dan subnet Virtual Private Cloud.PROJECT_ID
: Project ID Anda.REGION
: region tempat Anda ingin membuat jaringan.SSH_SOURCE_IP_RANGE
: Rentang IP dalam format CIDR. Ini menentukan alamat IP sumber yang dapat terhubung ke VM Anda menggunakan SSH.
Membuat jaringan data, subnet, dan aturan firewall
Gunakan perintah berikut untuk membuat empat jaringan data, masing-masing dengan subnet dan aturan firewall.
for N in $(seq 1 4); do gcloud compute networks create NETWORK_NAME_PREFIX-data-net-$N \ --project=PROJECT_ID \ --subnet-mode=custom \ --mtu=8244 gcloud compute networks subnets create NETWORK_NAME_PREFIX-data-sub-$N \ --project=PROJECT_ID \ --network=NETWORK_NAME_PREFIX-data-net-$N \ --region=REGION \ --range=192.168.$N.0/24 gcloud compute firewall-rules create NETWORK_NAME_PREFIX-data-internal-$N \ --project=PROJECT_ID \ --network=NETWORK_NAME_PREFIX-data-net-$N \ --action=ALLOW \ --rules=tcp:0-65535,udp:0-65535,icmp \ --source-ranges=192.168.0.0/16 done
Untuk mengetahui informasi selengkapnya tentang cara membuat jaringan Virtual Private Cloud, lihat Membuat dan memverifikasi jaringan MTU frame jumbo.
Membuat VM GPU
Untuk menguji performa jaringan dengan GPUDirect-TCPX, Anda harus membuat minimal dua VM A3.
Buat setiap VM menggunakan image OS yang Dioptimalkan untuk Container
cos-105-lts
atau yang lebih baru dan tentukan jaringan MTU virtual yang dibuat pada langkah sebelumnya.VM juga harus menggunakan antarmuka jaringan Google Virtual NIC (gVNIC). Untuk VM A3, gVNIC versi 1.4.0rc3 atau yang lebih baru diperlukan. Versi driver ini tersedia di Container-Optimized OS.
NIC virtual pertama digunakan sebagai NIC utama untuk jaringan dan penyimpanan umum, empat NIC virtual lainnya adalah NUMA yang diselaraskan dengan dua dari delapan GPU di switch PCIe yang sama.
gcloud compute instances create VM_NAME \ --project=PROJECT_ID \ --zone=ZONE \ --machine-type=MACHINE_TYPE \ --maintenance-policy=TERMINATE --restart-on-failure \ --image-family=cos-105-lts \ --image-project=cos-cloud \ --boot-disk-size=${BOOT_DISK_SZ:-50} \ --metadata=cos-update-strategy=update_disabled \ --scopes=https://www.googleapis.com/auth/cloud-platform \ --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-mgmt-net,subnet=NETWORK_NAME_PREFIX-mgmt-sub \ --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-1,subnet=NETWORK_NAME_PREFIX-data-sub-1,no-address \ --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-2,subnet=NETWORK_NAME_PREFIX-data-sub-2,no-address \ --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-3,subnet=NETWORK_NAME_PREFIX-data-sub-3,no-address \ --network-interface=nic-type=GVNIC,network=NETWORK_NAME_PREFIX-data-net-4,subnet=NETWORK_NAME_PREFIX-data-sub-4,no-address
Ganti kode berikut:
VM_NAME
: nama VM Anda.PROJECT_ID
: Project ID Anda.ZONE
: zona yang mendukung jenis mesin Anda.MACHINE_TYPE
: jenis mesin untuk VM. Tentukana3-highgpu-8g
ataua3-edgegpu-8g
.NETWORK_NAME_PREFIX
: awalan nama yang akan digunakan untuk jaringan dan subnet Virtual Private Cloud.
Menginstal driver GPU
Di setiap VM A3, selesaikan langkah-langkah berikut.
Instal driver GPU NVIDIA dengan menjalankan perintah berikut:
sudo cos-extensions install gpu -- --version=latest
Pasang ulang jalur dengan menjalankan perintah berikut:
sudo mount --bind /var/lib/nvidia /var/lib/nvidia sudo mount -o remount,exec /var/lib/nvidia
Memberikan akses NIC ke GPU
Di setiap VM A3, berikan akses NIC ke GPU dengan menyelesaikan langkah-langkah berikut:
Konfigurasikan registry.
Jika Anda menggunakan Container Registry, jalankan perintah berikut:
docker-credential-gcr configure-docker
Jika Anda menggunakan Artifact Registry, jalankan perintah berikut:
docker-credential-gcr configure-docker --registries us-docker.pkg.dev
Konfigurasikan pengelola jalur data terima. Layanan pengelolaan, GPUDirect-TCPX Receive Data Path Manager, perlu dijalankan bersama aplikasi yang menggunakan GPUDirect-TCPX. Untuk memulai layanan di setiap VM Container-Optimized OS, jalankan perintah berikut:
docker run --pull=always --rm \ --name receive-datapath-manager \ --detach \ --privileged \ --cap-add=NET_ADMIN --network=host \ --volume /var/lib/nvidia/lib64:/usr/local/nvidia/lib64 \ --device /dev/nvidia0:/dev/nvidia0 \ --device /dev/nvidia1:/dev/nvidia1 \ --device /dev/nvidia2:/dev/nvidia2 \ --device /dev/nvidia3:/dev/nvidia3 \ --device /dev/nvidia4:/dev/nvidia4 \ --device /dev/nvidia5:/dev/nvidia5 \ --device /dev/nvidia6:/dev/nvidia6 \ --device /dev/nvidia7:/dev/nvidia7 \ --device /dev/nvidia-uvm:/dev/nvidia-uvm \ --device /dev/nvidiactl:/dev/nvidiactl \ --env LD_LIBRARY_PATH=/usr/local/nvidia/lib64 \ --volume /run/tcpx:/run/tcpx \ --entrypoint /tcpgpudmarxd/build/app/tcpgpudmarxd \ us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpx/tcpgpudmarxd \ --gpu_nic_preset a3vm --gpu_shmem_type fd --uds_path "/run/tcpx" --setup_param "--verbose 128 2 0"
Pastikan penampung
receive-datapath-manager
dimulai.docker container logs --follow receive-datapath-manager
Output akan terlihat seperti berikut:
I0000 00:00:1687813309.406064 1 rx_rule_manager.cc:174] Rx Rule Manager server(s) started...
Untuk berhenti melihat log, tekan
ctrl-c
.Instal aturan tabel IP.
sudo iptables -I INPUT -p tcp -m tcp -j ACCEPT
Konfigurasikan NVIDIA Collective Communications Library (NCCL) dan plugin GPUDirect-TCPX.
Versi library NCCL tertentu dan kombinasi biner plugin GPUDirect-TCPX diperlukan untuk menggunakan NCCL dengan dukungan GPUDirect-TCPX. Google Cloud telah menyediakan paket yang memenuhi persyaratan ini.
Untuk menginstal paket Google Cloud, jalankan perintah berikut:
docker run --rm -v /var/lib:/var/lib us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpx/nccl-plugin-gpudirecttcpx install --install-nccl sudo mount --bind /var/lib/tcpx /var/lib/tcpx sudo mount -o remount,exec /var/lib/tcpx
Jika perintah ini berhasil, file
libnccl-net.so
danlibnccl.so
akan ditempatkan di direktori/var/lib/tcpx/lib64
.
Menjalankan pengujian
Di setiap VM A3, jalankan pengujian NCCL dengan menyelesaikan langkah-langkah berikut:
Mulai penampung.
#!/bin/bash function run_tcpx_container() { docker run \ -u 0 --network=host \ --cap-add=IPC_LOCK \ --userns=host \ --volume /run/tcpx:/tmp \ --volume /var/lib/nvidia/lib64:/usr/local/nvidia/lib64 \ --volume /var/lib/tcpx/lib64:/usr/local/tcpx/lib64 \ --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 \ --device /dev/nvidia0:/dev/nvidia0 \ --device /dev/nvidia1:/dev/nvidia1 \ --device /dev/nvidia2:/dev/nvidia2 \ --device /dev/nvidia3:/dev/nvidia3 \ --device /dev/nvidia4:/dev/nvidia4 \ --device /dev/nvidia5:/dev/nvidia5 \ --device /dev/nvidia6:/dev/nvidia6 \ --device /dev/nvidia7:/dev/nvidia7 \ --device /dev/nvidia-uvm:/dev/nvidia-uvm \ --device /dev/nvidiactl:/dev/nvidiactl \ --env LD_LIBRARY_PATH=/usr/local/nvidia/lib64:/usr/local/tcpx/lib64 \ "$@" }
Perintah sebelumnya menyelesaikan hal berikut:
- Memasang perangkat NVIDIA dari
/dev
ke dalam penampung - Menetapkan namespace jaringan penampung ke host
- Menetapkan namespace pengguna penampung ke host
- Menambahkan
CAP_IPC_LOCK
ke kemampuan penampung - Memasang
/tmp
host ke/tmp
penampung - Memasang jalur penginstalan NCCL dan plugin NCCL GPUDirect-TCPX ke dalam
penampung dan menambahkan jalur yang dipasang ke
LD_LIBRARY_PATH
- Memasang perangkat NVIDIA dari
Setelah Anda memulai penampung, aplikasi yang menggunakan NCCL dapat berjalan dari dalam penampung. Misalnya, untuk menjalankan pengujian
run-allgather
, selesaikan langkah-langkah berikut:Di setiap VM A3, jalankan hal berikut:
$ run_tcpx_container -it --rm us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpx/nccl-plugin-gpudirecttcpx shell
Di satu VM, jalankan perintah berikut:
Siapkan koneksi antar-VM. Ganti
VM-0
danVM-1
dengan nama setiap VM./scripts/init_ssh.sh VM-0 VM-1 pushd /scripts && /scripts/gen_hostfiles.sh VM-0 VM-1; popd
Tindakan ini akan membuat direktori
/scripts/hostfiles2
di setiap VM.Jalankan skrip.
/scripts/run-allgather.sh 8 eth1,eth2,eth3,eth4 1M 512M 2
Skrip
run-allgather
memerlukan waktu sekitar dua menit untuk dijalankan. Di akhir log, Anda akan melihat hasilall-gather
.Jika Anda melihat baris berikut di log NCCL, ini akan memverifikasi bahwa GPUDirect-TCPX berhasil diinisialisasi.
NCCL INFO NET/GPUDirectTCPX ver. 3.1.1.