Untuk aplikasi AI berskala besar, komunikasi yang efisien antar tugas merupakan kunci untuk memaksimalkan kinerja GPU. Alibaba Cloud Container Compute Service (ACS) menyediakan layanan jaringan Remote Direct Memory Access (RDMA) berkinerja tinggi dengan latensi rendah, throughput tinggi, dan elastisitas tinggi. Topik ini menjelaskan cara menjalankan aplikasi pada jaringan RDMA berkinerja tinggi.
Ikhtisar fitur
Protokol TCP/IP merupakan standar komunikasi jaringan, dan banyak aplikasi dibangun di atasnya. Namun, seiring pertumbuhan layanan AI, aplikasi memerlukan kinerja jaringan yang lebih baik. Protokol TCP/IP memiliki sejumlah keterbatasan, seperti overhead penyalinan data yang tinggi, pemrosesan tumpukan protokol yang kompleks, algoritma pengendalian aliran yang rumit, serta sering terjadinya context switching. Masalah-masalah tersebut menjadikan kinerja jaringan TCP/IP sebagai bottleneck bagi aplikasi.
RDMA mengatasi permasalahan tersebut dengan memanfaatkan fitur seperti zero-copy dan kernel bypass untuk menghindari penyalinan data dan context switching. Hasilnya adalah latensi yang lebih rendah, throughput yang lebih tinggi, serta penggunaan CPU yang lebih efisien.
Di ACS, Anda dapat menambahkan label alibabacloud.com/hpn-type: "rdma" ke sebuah Pod untuk menjalankan aplikasi pada jaringan RDMA. Setelah jaringan RDMA diaktifkan, sebuah network interface card (NIC) RDMA akan ditambahkan ke kontainer. Anda kemudian dapat mengonfigurasi variabel lingkungan NCCL untuk melakukan pelatihan terdistribusi dan inferensi di ACS.
Model GPU yang mendukung RDMA
ACS mendukung berbagai GPU models. Tabel berikut mencantumkan model GPU yang mendukung jaringan RDMA berkinerja tinggi beserta batasannya.
Card model | compute-class | Batasan dukungan RDMA | Tipe NIC RDMA yang sesuai |
GU8TF | gpu | Hanya Pod dengan 8 kartu yang mendukung RDMA. | Tipe 1 |
GU8TEF | gpu | Hanya Pod dengan 8 kartu yang mendukung RDMA. | Tipe 1 |
GX8SF | gpu | Hanya Pod dengan 8 kartu yang mendukung RDMA. | Tipe 1 |
P16EN | gpu | Hanya Pod dengan 16 kartu yang mendukung RDMA. | Tipe 2 |
gpu-hpn | Pod dengan 1, 2, 4, 8, dan 16 kartu mendukung RDMA. |
Tipe NIC RDMA yang berbeda memerlukan konfigurasi variabel lingkungan NCCL yang berbeda, sebagaimana dijelaskan pada bagian berikut.
Konfigurasi NCCL
Model GPU yang berbeda di ACS menggunakan NIC RDMA yang berbeda, sehingga memengaruhi cara Anda mengonfigurasi NCCL. GPU ACS mendukung dua metode konfigurasi.
Tipe NIC RDMA 1 (GU8TF/GU8TEF/GX8SF)
export NCCL_SOCKET_IFNAME=eth0
export NCCL_IB_HCA=mlx5
export NCCL_DEBUG=INFOTipe NIC RDMA 2 (P16EN)
export NCCL_IB_DISABLE=1
export NCCL_SOCKET_IFNAME=eth0
export NCCL_IB_HCA=
export NCCL_DEBUG=INFODeskripsi variabel lingkungan
Variabel lingkungan | Environment variables |
NCCL_SOCKET_IFNAME | Port yang digunakan NCCL untuk membuat koneksi. Gunakan eth0 untuk membuat koneksi di ACS. |
NCCL_IB_DISABLE | Menentukan apakah jaringan IB/RoCE dinonaktifkan dan menggunakan IP Sockets sebagai gantinya. Nilai 1 menonaktifkan IB/RoCE. Anda harus mengatur nilai ini ke 1 untuk P16EN. |
NCCL_IB_HCA | Menentukan NIC untuk komunikasi RDMA. Anda harus mengosongkan nilai ini untuk P16EN. |
NCCL_DEBUG | Mengontrol tingkat output log debug NCCL. |
Untuk informasi lebih lanjut mengenai variabel lingkungan lain yang tidak disebutkan di sini, lihat dokumentasi resmi NCCL.
Penggunaan
Langkah-langkah berikut menjelaskan cara menyebar aplikasi GPU yang berjalan dengan RDMA di kluster ACS.
Buat file bernama dep-demo-hpn-gpu.yaml dengan konten YAML berikut.
apiVersion: apps/v1 kind: Deployment metadata: name: dep-demo-hpn-gpu labels: app: demo-hpn-gpu spec: replicas: 1 selector: matchLabels: app: demo-hpn-gpu template: metadata: labels: app: demo-hpn-gpu alibabacloud.com/compute-class: gpu alibabacloud.com/compute-qos: default # Specify the GPU model as GU8TF. Change this value as needed. alibabacloud.com/gpu-model-series: "GU8TF" alibabacloud.com/hpn-type: "rdma" spec: containers: - name: demo image: registry-cn-wulanchabu.ack.aliyuncs.com/acs/stress:v1.0.4 command: - "sleep" - "1000h" env: - name: NCCL_SOCKET_IFNAME value: "eth0" - name: NCCL_IB_HCA value: "mlx5" - name: NCCL_DEBUG value: "INFO" resources: requests: cpu: 128 memory: 512Gi nvidia.com/gpu: 8 limits: cpu: 128 memory: 512Gi nvidia.com/gpu: 8Terapkan aplikasi.
kubectl apply -f dep-demo-hpn-gpu.yamlTunggu hingga Pod aplikasi memasuki status
Running.kubectl get pod |grep dep-demo-hpn-gpuKeluaran yang diharapkan:
dep-demo-hpn-gpu-5d9xxxxxb6-xxxxx 1/1 Running 0 25m16sLihat informasi NIC jaringan berkinerja tinggi.
kubectl exec -it deploy/dep-demo-hpn-gpu -- ifconfig | grep hpn -A 8Keluaran yang diharapkan:
hpn0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx inet6 addr: xxxx::x:xxxx:xxxx:xxx/xx Scope:Link inet6 addr: xxxx:xxx:xxx:x:x:xxxx:x:xxx/xxx Scope:Global UP BROADCAST RUNNING MULTICAST MTU:xxxx Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:xx errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:x (892.0 B)Output tersebut menunjukkan bahwa NIC berkinerja tinggi
hpn0telah dikonfigurasi di dalam Pod.